Notice: Undefined variable: ip in /home/yourpast/public_html/paste.php on line 80
Deprecated: Function get_magic_quotes_gpc() is deprecated in /home/yourpast/public_html/paste.php on line 123
From e8f62ef69142110b0e55b40d71922b1bddf2f2bc Mon Sep 17 00:00:00 2001
From: SkyFire
Date: Wed, 2 Oct 2024 19:37:03 -0500
Subject: [PATCH] Fix movement ticks
Signed-off-by: SkyFire
---
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 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
!highlight!