aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/GameObject
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2024-10-30 14:41:27 +0100
committerShauren <shauren.trinity@gmail.com>2024-10-30 14:41:27 +0100
commit68db469ee1f992bcdc81de64d6af1007d303be05 (patch)
tree776b61e7c2eaf0a07e1d8a711c09c1131603a13c /src/server/game/Entities/GameObject
parent91c12c64037ca906c30f9718fadab619359f1616 (diff)
Core/PacketIO: Updated SMSG_UPDATE_OBJECT for 11.0.5
Diffstat (limited to 'src/server/game/Entities/GameObject')
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp20
-rw-r--r--src/server/game/Entities/GameObject/GameObject.h4
2 files changed, 9 insertions, 15 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index 80e920f1556..a127fd25c57 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -844,6 +844,8 @@ GameObject::GameObject() : WorldObject(false), MapObject(),
m_updateFlag.Stationary = true;
m_updateFlag.Rotation = true;
+ m_entityFragments.Add(WowCS::EntityFragment::Tag_GameObject, false);
+
m_respawnTime = 0;
m_respawnDelayTime = 300;
m_despawnDelay = 0;
@@ -1102,6 +1104,7 @@ bool GameObject::Create(uint32 entry, Map* map, Position const& pos, QuaternionD
}
case GAMEOBJECT_TYPE_TRANSPORT:
{
+ m_updateFlag.GameObject = true;
m_goTypeImpl = std::make_unique<GameObjectType::Transport>(*this);
if (goInfo->transport.startOpen)
SetGoState(GO_STATE_TRANSPORT_STOPPED);
@@ -4043,6 +4046,7 @@ void GameObject::BuildValuesUpdate(ByteBuffer* data, UF::UpdateFieldFlag flags,
void GameObject::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::ObjectData::Mask const& requestedObjectMask,
UF::GameObjectData::Mask const& requestedGameObjectMask, Player const* target) const
{
+ UF::UpdateFieldFlag flags = GetUpdateFieldFlagsFor(target);
UpdateMask<NUM_CLIENT_OBJECT_TYPES> valuesMask;
if (requestedObjectMask.IsAnySet())
valuesMask.Set(TYPEID_OBJECT);
@@ -4053,6 +4057,7 @@ void GameObject::BuildValuesUpdateForPlayerWithMask(UpdateData* data, UF::Object
ByteBuffer& buffer = PrepareValuesUpdateBuffer(data);
std::size_t sizePos = buffer.wpos();
buffer << uint32(0);
+ BuildEntityFragmentsForValuesUpdateForPlayerWithMask(&buffer, flags);
buffer << uint32(valuesMask.GetBlock(0));
if (valuesMask[TYPEID_OBJECT])
@@ -4093,20 +4098,7 @@ std::vector<uint32> const* GameObject::GetPauseTimes() const
void GameObject::SetPathProgressForClient(float progress)
{
- DoWithSuppressingObjectUpdates([&]()
- {
- UF::ObjectData::Base dynflagMask;
- dynflagMask.MarkChanged(&UF::ObjectData::DynamicFlags);
- bool marked = (m_objectData->GetChangesMask() & dynflagMask.GetChangesMask()).IsAnySet();
-
- uint32 dynamicFlags = GetDynamicFlags();
- dynamicFlags &= 0xFFFF; // remove high bits
- dynamicFlags |= uint32(progress * 65535.0f) << 16;
- ReplaceAllDynamicFlags(dynamicFlags);
-
- if (!marked)
- const_cast<UF::ObjectData&>(*m_objectData).ClearChanged(&UF::ObjectData::DynamicFlags);
- });
+ m_transportPathProgress = progress;
}
void GameObject::GetRespawnPosition(float &x, float &y, float &z, float* ori /* = nullptr*/) const
diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h
index 94895a50e99..07db9755d86 100644
--- a/src/server/game/Entities/GameObject/GameObject.h
+++ b/src/server/game/Entities/GameObject/GameObject.h
@@ -289,6 +289,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
static void SetGoArtKit(uint32 artkit, GameObject* go, ObjectGuid::LowType lowguid = UI64LIT(0));
std::vector<uint32> const* GetPauseTimes() const;
+ Optional<float> GetPathProgressForClient() const { return m_transportPathProgress; }
void SetPathProgressForClient(float progress);
void EnableCollision(bool enable);
@@ -451,7 +452,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
void HandleCustomTypeCommand(GameObjectTypeBase::CustomCommand const& command) const;
- UF::UpdateField<UF::GameObjectData, 0, TYPEID_GAMEOBJECT> m_gameObjectData;
+ UF::UpdateField<UF::GameObjectData, int32(WowCS::EntityFragment::CGObject), TYPEID_GAMEOBJECT> m_gameObjectData;
TeamId GetControllingTeam() const;
@@ -514,6 +515,7 @@ class TC_GAME_API GameObject : public WorldObject, public GridObject<GameObject>
bool m_respawnCompatibilityMode;
uint16 _animKitId;
uint32 _worldEffectID;
+ Optional<float> m_transportPathProgress;
std::unique_ptr<Vignettes::VignetteData> m_vignette;