[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

@@ -42,6 +42,10 @@ static void AttemptJoin(Player* _player)
if(!plr || plr==_player || plr->GetTeam() != _player->GetTeam())
continue;
//skip players not in world
if(!plr->IsInWorld())
continue;
// skip not auto add, not group leader cases
if(!plr->GetSession()->LookingForGroup_auto_add || plr->GetGroup() && plr->GetGroup()->GetLeaderGUID()!=plr->GetGUID())
continue;
@@ -98,6 +102,9 @@ static void AttemptAddMore(Player* _player)
if(!plr || plr==_player || plr->GetTeam() != _player->GetTeam())
continue;
if(!plr->IsInWorld())
continue;
// skip not auto join or in group
if(!plr->GetSession()->LookingForGroup_auto_join || plr->GetGroup() )
continue;
@@ -311,6 +318,9 @@ void WorldSession::SendLfgResult(uint32 type, uint32 entry, uint8 lfg_type)
if(!plr || plr->GetTeam() != _player->GetTeam())
continue;
if(!plr->IsInWorld())
continue;
if(!plr->m_lookingForGroup.HaveInSlot(entry, type))
continue;