diff options
author | Shauren <shauren.trinity@gmail.com> | 2025-04-16 16:16:49 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2025-04-16 16:16:49 +0200 |
commit | 821ecf8fa3b6b922ba178cde7593ef5d84ef734b (patch) | |
tree | d603527d78911133528897928fba90689eb70945 /src/server/game/Handlers/CharacterHandler.cpp | |
parent | 4dd4cfef8fef1037d44a631f95c0fa6a29597c93 (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
Diffstat (limited to 'src/server/game/Handlers/CharacterHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/CharacterHandler.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 9a5ba64b353..510eefbe5f3 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -63,6 +63,7 @@ #include "SystemPackets.h" #include "Util.h" #include "World.h" +#include <boost/circular_buffer.hpp> #include <sstream> class LoginQueryHolder : public CharacterDatabaseQueryHolder @@ -1112,6 +1113,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)); @@ -1153,6 +1157,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); |