aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Handlers/MiscHandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Handlers/MiscHandler.cpp')
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp12
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)