Add detailed crash info when aura owner is not in the same map as target in Aura::UpdateTargetMap.

This commit is contained in:
megamage
2011-11-11 11:29:59 -05:00
parent 583f6575e1
commit 360c9dd635
3 changed files with 16 additions and 7 deletions
+7 -2
View File
@@ -669,12 +669,17 @@ class WorldObject : public Object, public WorldLocation
} }
float GetDistanceZ(const WorldObject* obj) const; float GetDistanceZ(const WorldObject* obj) const;
bool IsSelfOrInSameMap(const WorldObject* obj) const
{
if (this == obj)
return true;
return IsInMap(obj);
}
bool IsInMap(const WorldObject* obj) const bool IsInMap(const WorldObject* obj) const
{ {
if (obj) if (obj)
return IsInWorld() && obj->IsInWorld() && (GetMap() == obj->GetMap()) && InSamePhase(obj); return IsInWorld() && obj->IsInWorld() && (GetMap() == obj->GetMap()) && InSamePhase(obj);
else return false;
return false;
} }
bool IsWithinDist3d(float x, float y, float z, float dist) const bool IsWithinDist3d(float x, float y, float z, float dist) const
{ return IsInDist(x, y, z, dist + GetObjectSize()); } { return IsInDist(x, y, z, dist + GetObjectSize()); }
+1 -4
View File
@@ -250,12 +250,9 @@ void ObjectAccessor::AddCorpsesToGrid(GridCoord const& gridpair, GridType& grid,
for (Player2CorpsesMapType::iterator iter = i_player2corpse.begin(); iter != i_player2corpse.end(); ++iter) for (Player2CorpsesMapType::iterator iter = i_player2corpse.begin(); iter != i_player2corpse.end(); ++iter)
{ {
// We need this check otherwise a corpose may be added to a grid twice
if (iter->second->IsInGrid()) if (iter->second->IsInGrid())
{
//TODO: add this assert later
//ASSERT(iter->second->GetGridCoord() == gridpair);
continue; continue;
}
if (iter->second->GetGridCoord() == gridpair) if (iter->second->GetGridCoord() == gridpair)
{ {
+8 -1
View File
@@ -557,7 +557,14 @@ void Aura::UpdateTargetMap(Unit* caster, bool apply)
else else
{ {
// owner has to be in world, or effect has to be applied to self // owner has to be in world, or effect has to be applied to self
ASSERT((!GetOwner()->IsInWorld() && GetOwner() == itr->first) || GetOwner()->IsInMap(itr->first)); if (!GetOwner()->IsSelfOrInSameMap(itr->first))
{
//TODO: There is a crash caused by shadowfiend load addon
sLog->outCrash("Aura %u: Owner %s (map %u) is not in the same map as target %s (map %u).", GetSpellInfo()->Id,
GetOwner()->GetName(), GetOwner()->IsInWorld() ? GetOwner()->GetMap()->GetId() : uint32(-1),
itr->first->GetName(), itr->first->IsInWorld() ? itr->first->GetMap()->GetId() : uint32(-1));
ASSERT(false);
}
itr->first->_CreateAuraApplication(this, itr->second); itr->first->_CreateAuraApplication(this, itr->second);
++itr; ++itr;
} }