Core/Visibility: Send object destroy packets to dead players. Fixes persistent visuals of no longer existing entities while dead.

Closes #2458
This commit is contained in:
Machiavelli
2011-07-31 21:58:28 +02:00
parent d4a68025c7
commit 0711746b57
2 changed files with 17 additions and 12 deletions
+1 -1
View File
@@ -2724,7 +2724,7 @@ void WorldObject::DestroyForNearbyPlayers()
return; return;
std::list<Player*> targets; std::list<Player*> targets;
Trinity::AnyPlayerInObjectRangeCheck check(this, GetVisibilityRange()); Trinity::AnyPlayerInObjectRangeCheck check(this, GetVisibilityRange(), false);
Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, targets, check); Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, targets, check);
VisitNearbyWorldObject(GetVisibilityRange(), searcher); VisitNearbyWorldObject(GetVisibilityRange(), searcher);
for (std::list<Player*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter) for (std::list<Player*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
+16 -11
View File
@@ -1145,18 +1145,23 @@ namespace Trinity
class AnyPlayerInObjectRangeCheck class AnyPlayerInObjectRangeCheck
{ {
public: public:
AnyPlayerInObjectRangeCheck(WorldObject const* obj, float range) : i_obj(obj), i_range(range) {} AnyPlayerInObjectRangeCheck(WorldObject const* obj, float range, bool reqAlive = true) : _obj(obj), _range(range), _reqAlive(reqAlive) {}
bool operator()(Player* u) bool operator()(Player* u)
{ {
if (u->isAlive() && i_obj->IsWithinDistInMap(u, i_range)) if (_reqAlive && !u->isAlive())
return true; return false;
return false; if (!_obj->IsWithinDistInMap(u, _range))
} return false;
private:
WorldObject const* i_obj; return true;
float i_range; }
private:
WorldObject const* _obj;
float _range;
bool _reqAlive;
}; };
class NearestPlayerInObjectRangeCheck class NearestPlayerInObjectRangeCheck