diff options
Diffstat (limited to 'src/server/game/Handlers/MiscHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 6b3959a7df3..5ad39188fbd 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -382,7 +382,7 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPacket& /*recvData*/) uint32 reason = 0; if (GetPlayer()->IsInCombat() && !canLogoutInCombat) reason = 1; - else if (GetPlayer()->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FALLING | MOVEMENTFLAG_FALLING_FAR)) + else if (GetPlayer()->IsFalling()) reason = 3; // is jumping or falling else if (GetPlayer()->duel || GetPlayer()->HasAura(9454)) // is dueling or frozen by GM via freeze command reason = 2; // FIXME - Need the correct value @@ -2004,6 +2004,16 @@ void WorldSession::HandleObjectUpdateFailedOpcode(WorldPacket& recvPacket) WorldObject* obj = ObjectAccessor::GetWorldObject(*GetPlayer(), guid); TC_LOG_ERROR(LOG_FILTER_NETWORKIO, "Object update failed for object " UI64FMTD " (%s) for player %s (%u)", uint64(guid), obj ? obj->GetName().c_str() : "object-not-found", GetPlayerName().c_str(), GetGuidLow()); + + // If create object failed for current player then client will be stuck on loading screen + if (_player->GetGUID() == guid) + { + LogoutPlayer(true); + return; + } + + // Pretend we've never seen this object + _player->m_clientGUIDs.erase(guid); } void WorldSession::HandleSaveCUFProfiles(WorldPacket& recvPacket) |