- From e8f62ef69142110b0e55b40d71922b1bddf2f2bc Mon Sep 17 00:00:00 2001
- From: SkyFire <admin@projectskyfire.org>
- Date: Wed, 2 Oct 2024 19:37:03 -0500
- Subject: [PATCH] Fix movement ticks
- Signed-off-by: SkyFire <admin@projectskyfire.org>
- ---
- src/server/game/Entities/Unit/Unit.cpp | 4 ++--
- src/server/game/Handlers/MovementHandler.cpp | 6 +++++-
- src/server/game/Server/WorldSession.cpp | 1 +
- src/server/game/Server/WorldSession.h | 2 ++
- src/server/game/Server/WorldSocket.cpp | 7 +++++--
- 5 files changed, 15 insertions(+), 5 deletions(-)
- diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
- index 4885a6a..be4c103 100644
- --- a/src/server/game/Entities/Unit/Unit.cpp
- +++ b/src/server/game/Entities/Unit/Unit.cpp
- @@ -18270,7 +18270,7 @@ void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusEle
- bool hasMountDisplayId = GetUInt32Value(UNIT_FIELD_MOUNT_DISPLAY_ID) != 0;
- bool hasMovementFlags = GetUnitMovementFlags() != 0;
- bool hasMovementFlags2 = GetExtraUnitMovementFlags() != 0;
- - bool hasTimestamp = true;
- + bool hasTimestamp = mi.time;
- bool hasOrientation = !G3D::fuzzyEq(GetOrientation(), 0.0f);
- bool hasTransportData = GetTransGUID() != 0;
- bool hasSpline = IsSplineEnabled();
- @@ -18402,7 +18402,7 @@ void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusEle
- break;
- case MSETimestamp:
- if (hasTimestamp)
- - data << getMSTime();
- + data << mi.time;
- break;
- case MSEPositionX:
- if (data.GetOpcode() == SMSG_MOVE_TELEPORT && hasTransportData)
- diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
- index 1107c89..1b7cd89 100644
- --- a/src/server/game/Handlers/MovementHandler.cpp
- +++ b/src/server/game/Handlers/MovementHandler.cpp
- @@ -409,8 +409,12 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvPacket)
- plrMover->SanitizeMovementInfo(&movementInfo, true);
- }
- + uint32 mstime = getMSTime();
- + if (m_clientTimeDelay == 0)
- + m_clientTimeDelay = mstime - movementInfo.time;
- +
- /* process position-change */
- - movementInfo.time = getMSTime();
- + movementInfo.time = movementInfo.time + m_clientTimeDelay + MOVEMENT_PACKET_TIME_DELAY;
- movementInfo.guid = mover->GetGUID();
- mover->m_movementInfo = movementInfo;
- diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
- index 2b7e482..a9484b6 100644
- --- a/src/server/game/Server/WorldSession.cpp
- +++ b/src/server/game/Server/WorldSession.cpp
- @@ -121,6 +121,7 @@ WorldSession::WorldSession(uint32 id, WorldSocket* sock, AccountTypes sec, uint8
- m_sessionDbcLocale(sWorld->GetAvailableDbcLocale(locale)),
- m_sessionDbLocaleIndex(locale),
- m_latency(0),
- + m_clientTimeDelay(0),
- m_TutorialsChanged(false),
- _filterAddonMessages(false),
- recruiterId(recruiter),
- diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
- index 0999a27..2b78ecd 100644
- --- a/src/server/game/Server/WorldSession.h
- +++ b/src/server/game/Server/WorldSession.h
- @@ -434,6 +434,7 @@ class WorldSession : public Schedulable
- uint32 GetLatency() const { return m_latency; }
- void SetLatency(uint32 latency) { m_latency = latency; }
- + void ResetClientTimeDelay() { m_clientTimeDelay = 0; }
- uint32 getDialogStatus(Player* player, Object* questgiver, uint32 defstatus);
- ACE_Atomic_Op<ACE_Thread_Mutex, time_t> m_timeOutTime;
- @@ -1242,6 +1243,7 @@ class WorldSession : public Schedulable
- LocaleConstant m_sessionDbcLocale;
- LocaleConstant m_sessionDbLocaleIndex;
- uint32 m_latency;
- + uint32 m_clientTimeDelay;
- uint32 m_flags;
- TimeValue m_firstCancelModSpeedNoContorlAurasPacket;
- TimeValue m_lastCancelModSpeedNoContorlAurasPacket;
- diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
- index 112e51d..42db89a 100644
- --- a/src/server/game/Server/WorldSocket.cpp
- +++ b/src/server/game/Server/WorldSocket.cpp
- @@ -1198,8 +1198,11 @@ int WorldSocket::HandlePing (WorldPacket& recvPacket)
- uint32 id = m_Session->GetAccountId();
- TaskMgr::Default()->ScheduleInvocation([=]
- {
- - if (WorldSession* session = sWorld->FindSession(id))
- - session->HandlePingUpdate(latency);
- + if (WorldSession* session = sWorld->FindSession(id))
- + {
- + session->HandlePingUpdate(latency);
- + session->ResetClientTimeDelay();
- + }
- });
- }
- else
- --
- 2.34.1.windows.1
Recent Pastes