From 0711746b573c665d6970ce3a0acb52a5f3319296 Mon Sep 17 00:00:00 2001 From: Machiavelli Date: Sun, 31 Jul 2011 21:57:23 +0200 Subject: [PATCH] Core/Visibility: Send object destroy packets to dead players. Fixes persistent visuals of no longer existing entities while dead. Closes #2458 --- src/server/game/Entities/Object/Object.cpp | 2 +- .../game/Grids/Notifiers/GridNotifiers.h | 27 +++++++++++-------- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 36961f99ef..66be8e2843 100755 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -2724,7 +2724,7 @@ void WorldObject::DestroyForNearbyPlayers() return; std::list targets; - Trinity::AnyPlayerInObjectRangeCheck check(this, GetVisibilityRange()); + Trinity::AnyPlayerInObjectRangeCheck check(this, GetVisibilityRange(), false); Trinity::PlayerListSearcher searcher(this, targets, check); VisitNearbyWorldObject(GetVisibilityRange(), searcher); for (std::list::const_iterator iter = targets.begin(); iter != targets.end(); ++iter) diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index e64db7cb06..f24fa01892 100755 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -1145,18 +1145,23 @@ namespace Trinity class AnyPlayerInObjectRangeCheck { - public: - AnyPlayerInObjectRangeCheck(WorldObject const* obj, float range) : i_obj(obj), i_range(range) {} - bool operator()(Player* u) - { - if (u->isAlive() && i_obj->IsWithinDistInMap(u, i_range)) - return true; + public: + AnyPlayerInObjectRangeCheck(WorldObject const* obj, float range, bool reqAlive = true) : _obj(obj), _range(range), _reqAlive(reqAlive) {} + bool operator()(Player* u) + { + if (_reqAlive && !u->isAlive()) + return false; - return false; - } - private: - WorldObject const* i_obj; - float i_range; + if (!_obj->IsWithinDistInMap(u, _range)) + return false; + + return true; + } + + private: + WorldObject const* _obj; + float _range; + bool _reqAlive; }; class NearestPlayerInObjectRangeCheck