From 4a8a89e1db1f103020ffecbb570e1c570c2e0d21 Mon Sep 17 00:00:00 2001 From: megamage Date: Wed, 1 Jul 2009 18:36:03 -0500 Subject: [8103] More wide use IsInWorld checks and delayed at teleport operations. Author: Ambal * IsInWorld used to prevent return unexpected not in world objects. * Delayed operations need to process its in world state. --HG-- branch : trunk --- src/game/WorldSession.cpp | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/game/WorldSession.cpp') diff --git a/src/game/WorldSession.cpp b/src/game/WorldSession.cpp index 44bab655886..0724aac320e 100644 --- a/src/game/WorldSession.cpp +++ b/src/game/WorldSession.cpp @@ -310,7 +310,13 @@ void WorldSession::LogoutPlayer(bool Save) ///- Teleport to home if the player is in an invalid instance if(!_player->m_InstanceValid && !_player->isGameMaster()) + { _player->TeleportTo(_player->m_homebindMapId, _player->m_homebindX, _player->m_homebindY, _player->m_homebindZ, _player->GetOrientation()); + //this is a bad place to call for far teleport because we need player to be in world for successful logout + //maybe we should implement delayed far teleport logout? + while(_player->IsBeingTeleportedFar()) + HandleMoveWorldportAckOpcode(); + } sOutdoorPvPMgr.HandlePlayerLeaveZone(_player,_player->GetZoneId()); -- cgit v1.2.3