*Fix a crash caused by gm command .object move and so on

--HG--
branch : trunk
This commit is contained in:
megamage
2009-08-28 14:19:14 -05:00
parent 3d9326c4b7
commit 6de6557bf0
5 changed files with 37 additions and 36 deletions

View File

@@ -2303,3 +2303,32 @@ void WorldObject::PlayDirectSound( uint32 sound_id, Player* target /*= NULL*/ )
else
SendMessageToSet( &data, true );
}
void WorldObject::DestroyForNearbyPlayers()
{
if(!IsInWorld())
return;
std::list<Unit*> targets;
Trinity::AnyUnitInObjectRangeCheck check(this, World::GetMaxVisibleDistance());
Trinity::UnitListSearcher<Trinity::AnyUnitInObjectRangeCheck> searcher(this, targets, check);
VisitNearbyWorldObject(World::GetMaxVisibleDistance(), searcher);
for(std::list<Unit*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
{
Player *plr = dynamic_cast<Player*>(*iter);
if(!plr)
continue;
if(plr == this)
continue;
if(!plr->HaveAtClient(this))
continue;
if(isType(TYPEMASK_UNIT) && ((Unit*)this)->GetCharmerGUID() == plr->GetGUID()) // TODO: this is for puppet
continue;
DestroyForPlayer(plr);
plr->m_clientGUIDs.erase(GetGUID());
}
}