Core/Objects: More minor refactors for SMSG_UPDATE_OBJECT building - move getting and writing field flags to shared function

This commit is contained in:
Shauren
2024-10-27 18:33:47 +01:00
parent a771f210a6
commit ee54ade397
26 changed files with 57 additions and 90 deletions

View File

@@ -1376,17 +1376,14 @@ bool AreaTrigger::IsNeverVisibleFor(WorldObject const* seer, bool allowServersid
return false;
}
void AreaTrigger::BuildValuesCreate(ByteBuffer* data, Player const* target) const
void AreaTrigger::BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint8(flags);
m_objectData->WriteCreate(*data, flags, this, target);
m_areaTriggerData->WriteCreate(*data, flags, this, target);
}
void AreaTrigger::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
void AreaTrigger::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint32(m_values.GetChangedObjectTypeMask());
if (m_values.HasChanged(TYPEID_OBJECT))

View File

@@ -46,8 +46,8 @@ class TC_GAME_API AreaTrigger final : public WorldObject, public GridObject<Area
~AreaTrigger();
protected:
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void ClearUpdateMask(bool remove) override;
public:

View File

@@ -347,17 +347,14 @@ uint32 Conversation::GetScriptId() const
return sConversationDataStore->GetConversationTemplate(GetEntry())->ScriptId;
}
void Conversation::BuildValuesCreate(ByteBuffer* data, Player const* target) const
void Conversation::BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint8(flags);
m_objectData->WriteCreate(*data, flags, this, target);
m_conversationData->WriteCreate(*data, flags, this, target);
}
void Conversation::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
void Conversation::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint32(m_values.GetChangedObjectTypeMask());
if (m_values.HasChanged(TYPEID_OBJECT))

View File

@@ -33,8 +33,8 @@ class TC_GAME_API Conversation final : public WorldObject, public GridObject<Con
~Conversation();
protected:
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void ClearUpdateMask(bool remove) override;
public:

View File

@@ -238,17 +238,14 @@ bool Corpse::IsExpired(time_t t) const
return m_time < t - 3 * DAY;
}
void Corpse::BuildValuesCreate(ByteBuffer* data, Player const* target) const
void Corpse::BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint8(flags);
m_objectData->WriteCreate(*data, flags, this, target);
m_corpseData->WriteCreate(*data, flags, this, target);
}
void Corpse::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
void Corpse::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint32(m_values.GetChangedObjectTypeMask());
if (m_values.HasChanged(TYPEID_OBJECT))

View File

@@ -56,8 +56,8 @@ class TC_GAME_API Corpse final : public WorldObject, public GridObject<Corpse>
~Corpse();
protected:
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void ClearUpdateMask(bool remove) override;
public:

View File

@@ -3784,17 +3784,14 @@ UF::UpdateFieldFlag Creature::GetUpdateFieldFlagsFor(Player const* target) const
return flags;
}
void Creature::BuildValuesCreate(ByteBuffer* data, Player const* target) const
void Creature::BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint8(flags);
m_objectData->WriteCreate(*data, flags, this, target);
m_unitData->WriteCreate(*data, flags, this, target);
}
void Creature::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
void Creature::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint32(m_values.GetChangedObjectTypeMask());
if (m_values.HasChanged(TYPEID_OBJECT))

View File

@@ -470,8 +470,8 @@ class TC_GAME_API Creature : public Unit, public GridObject<Creature>, public Ma
protected:
UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const final;
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
public:
void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;

View File

@@ -252,17 +252,14 @@ SpellInfo const* DynamicObject::GetSpellInfo() const
return sSpellMgr->GetSpellInfo(GetSpellId(), GetMap()->GetDifficultyID());
}
void DynamicObject::BuildValuesCreate(ByteBuffer* data, Player const* target) const
void DynamicObject::BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint8(flags);
m_objectData->WriteCreate(*data, flags, this, target);
m_dynamicObjectData->WriteCreate(*data, flags, this, target);
}
void DynamicObject::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
void DynamicObject::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint32(m_values.GetChangedObjectTypeMask());
if (m_values.HasChanged(TYPEID_OBJECT))

View File

@@ -40,8 +40,8 @@ class TC_GAME_API DynamicObject final : public WorldObject, public GridObject<Dy
~DynamicObject();
protected:
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void ClearUpdateMask(bool remove) override;
public:

View File

@@ -4023,17 +4023,14 @@ GameObject* GameObject::GetLinkedTrap()
return ObjectAccessor::GetGameObject(*this, m_linkedTrap);
}
void GameObject::BuildValuesCreate(ByteBuffer* data, Player const* target) const
void GameObject::BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint8(flags);
m_objectData->WriteCreate(*data, flags, this, target);
m_gameObjectData->WriteCreate(*data, flags, this, target);
}
void GameObject::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
void GameObject::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint32(m_values.GetChangedObjectTypeMask());
if (m_values.HasChanged(TYPEID_OBJECT))

View File

@@ -169,8 +169,8 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
~GameObject();
protected:
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void ClearUpdateMask(bool remove) override;
public:

View File

@@ -154,18 +154,15 @@ int64 AzeriteEmpoweredItem::GetRespecCost() const
return MAX_MONEY_AMOUNT + 1;
}
void AzeriteEmpoweredItem::BuildValuesCreate(ByteBuffer* data, Player const* target) const
void AzeriteEmpoweredItem::BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint8(flags);
m_objectData->WriteCreate(*data, flags, this, target);
m_itemData->WriteCreate(*data, flags, this, target);
m_azeriteEmpoweredItemData->WriteCreate(*data, flags, this, target);
}
void AzeriteEmpoweredItem::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
void AzeriteEmpoweredItem::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint32(m_values.GetChangedObjectTypeMask());
if (m_values.HasChanged(TYPEID_OBJECT))

View File

@@ -43,8 +43,8 @@ public:
int64 GetRespecCost() const;
protected:
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void ClearUpdateMask(bool remove) override;
public:

View File

@@ -389,18 +389,15 @@ void AzeriteItem::SetSelectedAzeriteEssence(uint8 slot, uint32 azeriteEssenceId)
.ModifyValue(&UF::SelectedAzeriteEssences::AzeriteEssenceID, slot), azeriteEssenceId);
}
void AzeriteItem::BuildValuesCreate(ByteBuffer* data, Player const* target) const
void AzeriteItem::BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint8(flags);
m_objectData->WriteCreate(*data, flags, this, target);
m_itemData->WriteCreate(*data, flags, this, target);
m_azeriteItemData->WriteCreate(*data, flags, this, target);
}
void AzeriteItem::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
void AzeriteItem::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint32(m_values.GetChangedObjectTypeMask());
if (m_values.HasChanged(TYPEID_OBJECT))

View File

@@ -74,8 +74,8 @@ public:
void SetSelectedAzeriteEssence(uint8 slot, uint32 azeriteEssenceId);
protected:
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void ClearUpdateMask(bool remove) override;
public:

View File

@@ -182,18 +182,15 @@ void Bag::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) cons
m_bagslot[i]->BuildCreateUpdateBlockForPlayer(data, target);
}
void Bag::BuildValuesCreate(ByteBuffer* data, Player const* target) const
void Bag::BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint8(flags);
m_objectData->WriteCreate(*data, flags, this, target);
m_itemData->WriteCreate(*data, flags, this, target);
m_containerData->WriteCreate(*data, flags, this, target);
}
void Bag::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
void Bag::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint32(m_values.GetChangedObjectTypeMask());
if (m_values.HasChanged(TYPEID_OBJECT))

View File

@@ -54,8 +54,8 @@ class TC_GAME_API Bag : public Item
protected:
void BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) const override;
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void ClearUpdateMask(bool remove) override;
public:

View File

@@ -1704,17 +1704,14 @@ UF::UpdateFieldFlag Item::GetUpdateFieldFlagsFor(Player const* target) const
return UF::UpdateFieldFlag::None;
}
void Item::BuildValuesCreate(ByteBuffer* data, Player const* target) const
void Item::BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint8(flags);
m_objectData->WriteCreate(*data, flags, this, target);
m_itemData->WriteCreate(*data, flags, this, target);
}
void Item::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
void Item::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint32(m_values.GetChangedObjectTypeMask());
if (m_values.HasChanged(TYPEID_OBJECT))

View File

@@ -378,8 +378,8 @@ class TC_GAME_API Item : public Object
protected:
UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const final;
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void ClearUpdateMask(bool remove) override;
public:

View File

@@ -178,9 +178,11 @@ void Object::BuildCreateUpdateBlockForPlayer(UpdateData* data, Player* target) c
BuildMovementUpdate(&buf, flags, target);
UF::UpdateFieldFlag fieldFlags = GetUpdateFieldFlagsFor(target);
std::size_t sizePos = buf.wpos();
buf << uint32(0);
BuildValuesCreate(&buf, target);
buf << uint8(fieldFlags);
BuildValuesCreate(&buf, fieldFlags, target);
buf.put<uint32>(sizePos, buf.wpos() - sizePos - 4);
data->AddUpdateBlock();
@@ -204,9 +206,10 @@ void Object::BuildValuesUpdateBlockForPlayer(UpdateData* data, Player const* tar
{
ByteBuffer& buf = PrepareValuesUpdateBuffer(data);
EnumFlag<UF::UpdateFieldFlag> fieldFlags = GetUpdateFieldFlagsFor(target);
std::size_t sizePos = buf.wpos();
buf << uint32(0);
BuildValuesUpdate(&buf, target);
BuildValuesUpdate(&buf, fieldFlags, target);
buf.put<uint32>(sizePos, buf.wpos() - sizePos - 4);
data->AddUpdateBlock();
@@ -264,7 +267,7 @@ void Object::SendOutOfRangeForPlayer(Player* target) const
target->SendDirectMessage(&packet);
}
void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Player* target) const
void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Player const* target) const
{
std::vector<uint32> const* PauseTimes = nullptr;
if (GameObject const* go = ToGameObject())

View File

@@ -390,10 +390,10 @@ class TC_GAME_API Object
}
}
void BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Player* target) const;
void BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Player const* target) const;
virtual UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const;
virtual void BuildValuesCreate(ByteBuffer* data, Player const* target) const = 0;
virtual void BuildValuesUpdate(ByteBuffer* data, Player const* target) const = 0;
virtual void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const = 0;
virtual void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const = 0;
public:
virtual void BuildValuesUpdateWithFlag(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const;

View File

@@ -3644,10 +3644,8 @@ UF::UpdateFieldFlag Player::GetUpdateFieldFlagsFor(Player const* target) const
return flags;
}
void Player::BuildValuesCreate(ByteBuffer* data, Player const* target) const
void Player::BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint8(flags);
m_objectData->WriteCreate(*data, flags, this, target);
m_unitData->WriteCreate(*data, flags, this, target);
m_playerData->WriteCreate(*data, flags, this, target);
@@ -3655,9 +3653,8 @@ void Player::BuildValuesCreate(ByteBuffer* data, Player const* target) const
m_activePlayerData->WriteCreate(*data, flags, this, target);
}
void Player::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
void Player::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint32(m_values.GetChangedObjectTypeMask() & ~(uint32(target != this) << TYPEID_ACTIVE_PLAYER));
if (m_values.HasChanged(TYPEID_OBJECT))

View File

@@ -2187,8 +2187,8 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player>
protected:
UF::UpdateFieldFlag GetUpdateFieldFlagsFor(Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void ClearUpdateMask(bool remove) override;
public:

View File

@@ -136,17 +136,14 @@ bool SceneObject::Create(ObjectGuid::LowType lowGuid, SceneType type, uint32 sce
return true;
}
void SceneObject::BuildValuesCreate(ByteBuffer* data, Player const* target) const
void SceneObject::BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint8(flags);
m_objectData->WriteCreate(*data, flags, this, target);
m_sceneObjectData->WriteCreate(*data, flags, this, target);
}
void SceneObject::BuildValuesUpdate(ByteBuffer* data, Player const* target) const
void SceneObject::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const
{
UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
*data << uint32(m_values.GetChangedObjectTypeMask());
if (m_values.HasChanged(TYPEID_OBJECT))

View File

@@ -36,8 +36,8 @@ public:
~SceneObject();
protected:
void BuildValuesCreate(ByteBuffer* data, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, Player const* target) const override;
void BuildValuesCreate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags, Player const* target) const override;
void ClearUpdateMask(bool remove) override;
public: