CPP 1179
Movement By AlterEgo on 3rd October 2024 12:42:18 AM
  1. From e8f62ef69142110b0e55b40d71922b1bddf2f2bc Mon Sep 17 00:00:00 2001
  2. From: SkyFire <admin@projectskyfire.org>
  3. Date: Wed, 2 Oct 2024 19:37:03 -0500
  4. Subject: [PATCH] Fix movement ticks
  5.  
  6. Signed-off-by: SkyFire <admin@projectskyfire.org>
  7. ---
  8.  src/server/game/Entities/Unit/Unit.cpp       | 4 ++--
  9.  src/server/game/Handlers/MovementHandler.cpp | 6 +++++-
  10.  src/server/game/Server/WorldSession.cpp      | 1 +
  11.  src/server/game/Server/WorldSession.h        | 2 ++
  12.  src/server/game/Server/WorldSocket.cpp       | 7 +++++--
  13.  5 files changed, 15 insertions(+), 5 deletions(-)
  14.  
  15. diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp
  16. index 4885a6a..be4c103 100644
  17. --- a/src/server/game/Entities/Unit/Unit.cpp
  18. +++ b/src/server/game/Entities/Unit/Unit.cpp
  19. @@ -18270,7 +18270,7 @@ void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusEle
  20.      bool hasMountDisplayId = GetUInt32Value(UNIT_FIELD_MOUNT_DISPLAY_ID) != 0;
  21.      bool hasMovementFlags = GetUnitMovementFlags() != 0;
  22.      bool hasMovementFlags2 = GetExtraUnitMovementFlags() != 0;
  23. -    bool hasTimestamp = true;
  24. +    bool hasTimestamp = mi.time;
  25.      bool hasOrientation = !G3D::fuzzyEq(GetOrientation(), 0.0f);
  26.      bool hasTransportData = GetTransGUID() != 0;
  27.      bool hasSpline = IsSplineEnabled();
  28. @@ -18402,7 +18402,7 @@ void Unit::WriteMovementInfo(WorldPacket& data, Movement::ExtraMovementStatusEle
  29.                  break;
  30.              case MSETimestamp:
  31.                  if (hasTimestamp)
  32. -                    data << getMSTime();
  33. +                    data << mi.time;
  34.                  break;
  35.              case MSEPositionX:
  36.                  if (data.GetOpcode() == SMSG_MOVE_TELEPORT && hasTransportData)
  37. diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp
  38. index 1107c89..1b7cd89 100644
  39. --- a/src/server/game/Handlers/MovementHandler.cpp
  40. +++ b/src/server/game/Handlers/MovementHandler.cpp
  41. @@ -409,8 +409,12 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvPacket)
  42.          plrMover->SanitizeMovementInfo(&movementInfo, true);
  43.      }
  44.  
  45. +    uint32 mstime = getMSTime();
  46. +    if (m_clientTimeDelay == 0)
  47. +        m_clientTimeDelay = mstime - movementInfo.time;
  48. +
  49.      /* process position-change */
  50. -    movementInfo.time = getMSTime();
  51. +    movementInfo.time = movementInfo.time + m_clientTimeDelay + MOVEMENT_PACKET_TIME_DELAY;
  52.      movementInfo.guid = mover->GetGUID();
  53.      mover->m_movementInfo = movementInfo;
  54.  
  55. diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp
  56. index 2b7e482..a9484b6 100644
  57. --- a/src/server/game/Server/WorldSession.cpp
  58. +++ b/src/server/game/Server/WorldSession.cpp
  59. @@ -121,6 +121,7 @@ WorldSession::WorldSession(uint32 id, WorldSocket* sock, AccountTypes sec, uint8
  60.      m_sessionDbcLocale(sWorld->GetAvailableDbcLocale(locale)),
  61.      m_sessionDbLocaleIndex(locale),
  62.      m_latency(0),
  63. +    m_clientTimeDelay(0),
  64.      m_TutorialsChanged(false),
  65.      _filterAddonMessages(false),
  66.      recruiterId(recruiter),
  67. diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h
  68. index 0999a27..2b78ecd 100644
  69. --- a/src/server/game/Server/WorldSession.h
  70. +++ b/src/server/game/Server/WorldSession.h
  71. @@ -434,6 +434,7 @@ class WorldSession : public Schedulable
  72.  
  73.          uint32 GetLatency() const { return m_latency; }
  74.          void SetLatency(uint32 latency) { m_latency = latency; }
  75. +        void ResetClientTimeDelay() { m_clientTimeDelay = 0; }
  76.          uint32 getDialogStatus(Player* player, Object* questgiver, uint32 defstatus);
  77.  
  78.          ACE_Atomic_Op<ACE_Thread_Mutex, time_t> m_timeOutTime;
  79. @@ -1242,6 +1243,7 @@ class WorldSession : public Schedulable
  80.          LocaleConstant m_sessionDbcLocale;
  81.          LocaleConstant m_sessionDbLocaleIndex;
  82.          uint32 m_latency;
  83. +        uint32 m_clientTimeDelay;
  84.          uint32 m_flags;
  85.          TimeValue m_firstCancelModSpeedNoContorlAurasPacket;
  86.          TimeValue m_lastCancelModSpeedNoContorlAurasPacket;
  87. diff --git a/src/server/game/Server/WorldSocket.cpp b/src/server/game/Server/WorldSocket.cpp
  88. index 112e51d..42db89a 100644
  89. --- a/src/server/game/Server/WorldSocket.cpp
  90. +++ b/src/server/game/Server/WorldSocket.cpp
  91. @@ -1198,8 +1198,11 @@ int WorldSocket::HandlePing (WorldPacket& recvPacket)
  92.              uint32 id = m_Session->GetAccountId();
  93.              TaskMgr::Default()->ScheduleInvocation([=]
  94.              {
  95. -                if (WorldSession* session = sWorld->FindSession(id))
  96. -                    session->HandlePingUpdate(latency);
  97. +                    if (WorldSession* session = sWorld->FindSession(id))
  98. +                    {
  99. +                        session->HandlePingUpdate(latency);
  100. +                        session->ResetClientTimeDelay();
  101. +                    }
  102.              });
  103.          }
  104.          else
  105. --
  106. 2.34.1.windows.1

Yourpaste is for source code and general debugging text.

Login or Register to edit, delete and keep track of your pastes and more.

Raw Paste

Login or Register to edit or fork this paste. It's free.