[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
This commit is contained in:
megamage
2009-07-01 18:36:03 -05:00
parent 111dac5f94
commit 4a8a89e1db
15 changed files with 209 additions and 17 deletions

View File

@@ -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());