From 2cca3982d4dd87be452ab13332dd809e02d2a24b Mon Sep 17 00:00:00 2001 From: jackpoz Date: Thu, 26 Sep 2013 20:03:39 +0200 Subject: Core/Movement: Port Ascent r1637 http://sourceforge.net/p/ascentemubackup/code/1637/ to TrinityCore Port some movement packet fixes, taking into account client/server connection lag. Credits to original author, check http://sourceforge.net/p/ascentemubackup/code/1637/ for more details. MOVEMENT_PACKET_TIME_DELAY default value is currently set to 0, feel free to set it to different values and report feedback. --- src/server/game/Handlers/MovementHandler.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/server/game/Handlers/MovementHandler.cpp') diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 7a17e715063..1faa68b6ea4 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -31,6 +31,8 @@ #include "InstanceSaveMgr.h" #include "ObjectMgr.h" +#define MOVEMENT_PACKET_TIME_DELAY 0 + void WorldSession::HandleMoveWorldportAckOpcode(WorldPacket & /*recvData*/) { TC_LOG_DEBUG(LOG_FILTER_NETWORKIO, "WORLD: got MSG_MOVE_WORLDPORT_ACK."); @@ -359,11 +361,15 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) plrMover->SetInWater(!plrMover->IsInWater() || plrMover->GetBaseMap()->IsUnderWater(movementInfo.pos.GetPositionX(), movementInfo.pos.GetPositionY(), movementInfo.pos.GetPositionZ())); } + uint32 mstime = getMSTime(); /*----------------------*/ + if(m_clientTimeDelay == 0) + m_clientTimeDelay = mstime - movementInfo.time; /* process position-change */ WorldPacket data(opcode, recvData.size()); - movementInfo.time = getMSTime(); + movementInfo.time = movementInfo.time + m_clientTimeDelay + MOVEMENT_PACKET_TIME_DELAY; + movementInfo.guid = mover->GetGUID(); WriteMovementInfo(&data, &movementInfo); mover->SendMessageToSet(&data, _player); -- cgit v1.2.3