aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/CharacterHandler.cpp
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2025-04-16 16:16:49 +0200
committerOvahlord <dreadkiller@gmx.de>2025-04-16 17:15:27 +0200
commitcbb86c9e5bca31cf67b4395ec076972e7b796c4d (patch)
treebd0059192a5df9729e18109abbc7483f21f50889 /src/server/game/Handlers/CharacterHandler.cpp
parentc637ee12cc968e76afbb79eeac49d6c28c4f324a (diff)
Core/Players: Improve setting ActivePlayerData::TransportServerTime by including TIME_SYNC and CMSG_QUEUED_MESSAGES_END values in its calculation
* This removes delay on nearby object visibility after login and teleport (cherry picked from commit 821ecf8fa3b6b922ba178cde7593ef5d84ef734b) # Conflicts: # src/server/game/Server/Protocol/Opcodes.cpp
Diffstat (limited to 'src/server/game/Handlers/CharacterHandler.cpp')
-rw-r--r--src/server/game/Handlers/CharacterHandler.cpp10
1 files changed, 10 insertions, 0 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp
index 9c9d751f3c1..013584e9793 100644
--- a/src/server/game/Handlers/CharacterHandler.cpp
+++ b/src/server/game/Handlers/CharacterHandler.cpp
@@ -64,6 +64,7 @@
#include "SystemPackets.h"
#include "Util.h"
#include "World.h"
+#include <boost/circular_buffer.hpp>
#include <sstream>
class LoginQueryHolder : public CharacterDatabaseQueryHolder
@@ -964,6 +965,9 @@ void WorldSession::HandleContinuePlayerLogin()
SendPacket(WorldPackets::Auth::ResumeComms(CONNECTION_TYPE_INSTANCE).Write());
+ // client will respond to SMSG_RESUME_COMMS with CMSG_QUEUED_MESSAGES_END
+ RegisterTimeSync(SPECIAL_RESUME_COMMS_TIME_SYNC_COUNTER);
+
AddQueryHolderCallback(CharacterDatabase.DelayQueryHolder(holder)).AfterComplete([this](SQLQueryHolderBase const& holder)
{
HandlePlayerLogin(static_cast<LoginQueryHolder const&>(holder));
@@ -1005,6 +1009,12 @@ void WorldSession::HandlePlayerLogin(LoginQueryHolder const& holder)
return;
}
+ if (!_timeSyncClockDeltaQueue->empty())
+ {
+ pCurrChar->SetPlayerLocalFlag(PLAYER_LOCAL_FLAG_OVERRIDE_TRANSPORT_SERVER_TIME);
+ pCurrChar->SetTransportServerTime(_timeSyncClockDelta);
+ }
+
pCurrChar->SetVirtualPlayerRealm(GetVirtualRealmAddress());
SendAccountDataTimes(ObjectGuid::Empty, GLOBAL_CACHE_MASK);