aboutsummaryrefslogtreecommitdiff
path: root/src/game/Object.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/Object.cpp')
-rw-r--r--src/game/Object.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/game/Object.cpp b/src/game/Object.cpp
index d98784bc602..45ffbc36c4e 100644
--- a/src/game/Object.cpp
+++ b/src/game/Object.cpp
@@ -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());
+ }
+}