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;
std::list<Player*> targets;
Trinity::AnyPlayerInObjectRangeCheck check(this, GetVisibilityRange());
Trinity::AnyPlayerInObjectRangeCheck check(this, GetVisibilityRange(), false);
Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, targets, check);
VisitNearbyWorldObject(GetVisibilityRange(), searcher);
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
{
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