aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-04-17 00:04:41 +0200
committerOvahlord <dreadkiller@gmx.de>2025-04-17 12:15:48 +0200
commit52ac63ece40eb9e44725c15d79dbaf552319576d (patch)
treea43a15939a2dbede49d1fbefcf9f1cef17e6b4c3
parent7f46c6d1a0a72177e8bb59136d80a3c69c5a0c5f (diff)
Core/Transports: Fixed clientside position of stoppable transports
(cherry picked from commit 96026bfc58faa65aeef5cb1430aa2e442a43b115)
-rw-r--r--src/server/game/Entities/Object/Object.cpp8
-rw-r--r--src/server/game/Entities/Transport/Transport.h2
2 files changed, 6 insertions, 4 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 3e58e8e5b4d..bb0f465671c 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -667,9 +667,11 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe
data->FlushBits();
if (transport)
{
- *data << uint32(transport->GetTransportPeriod());
- *data << uint32(transport->GetTimer());
- data->WriteBit(transport->IsStopRequested());
+ uint32 period = transport->GetTransportPeriod();
+
+ *data << uint32((((int64(transport->GetTimer()) - int64(GameTime::GetGameTimeMS())) % period) + period) % period); // TimeOffset
+ *data << uint32(transport->GetNextStopTimestamp().value_or(0));
+ data->WriteBit(transport->GetNextStopTimestamp().has_value());
data->WriteBit(transport->IsStopped());
data->WriteBit(false);
data->FlushBits();
diff --git a/src/server/game/Entities/Transport/Transport.h b/src/server/game/Entities/Transport/Transport.h
index 0c78785377d..b78f02d3be9 100644
--- a/src/server/game/Entities/Transport/Transport.h
+++ b/src/server/game/Entities/Transport/Transport.h
@@ -89,7 +89,7 @@ class TC_GAME_API Transport final : public GameObject, public TransportBase
uint32 GetTransportPeriod() const { return m_gameObjectData->Level; }
void SetPeriod(uint32 period) { SetLevel(period); }
uint32 GetTimer() const { return _pathProgress; }
- bool IsStopRequested() const { return _requestStopTimestamp.has_value(); }
+ Optional<uint32> GetNextStopTimestamp() const { return _requestStopTimestamp; }
bool IsStopped() const { return HasDynamicFlag(GO_DYNFLAG_LO_STOPPED); }
void UpdatePosition(float x, float y, float z, float o);