diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-10-30 14:41:27 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-10-30 14:41:27 +0100 |
| commit | 68db469ee1f992bcdc81de64d6af1007d303be05 (patch) | |
| tree | 776b61e7c2eaf0a07e1d8a711c09c1131603a13c /src/server/game/Entities/GameObject | |
| parent | 91c12c64037ca906c30f9718fadab619359f1616 (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.cpp | 20 | ||||
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObject.h | 4 |
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; |
