*Check if grid is loaded before switch container.

--HG--
branch : trunk
This commit is contained in:
megamage
2009-04-08 12:20:39 -05:00
parent bd7955c5a9
commit 2ebeb198ad
2 changed files with 16 additions and 5 deletions

View File

@@ -331,9 +331,21 @@ void Map::RemoveFromGrid(DynamicObject* obj, NGridType *grid, Cell const& cell)
template<class T>
void Map::SwitchGridContainers(T* obj, bool on)
{
CellPair pair = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
Cell cell(pair);
CellPair p = Trinity::ComputeCellPair(obj->GetPositionX(), obj->GetPositionY());
if(p.x_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP || p.y_coord >= TOTAL_NUMBER_OF_CELLS_PER_MAP )
{
sLog.outError("Map::SwitchGridContainers: Object " I64FMT " have invalid coordinates X:%f Y:%f grid cell [%u:%u]", obj->GetGUID(), obj->GetPositionX(), obj->GetPositionY(), p.x_coord, p.y_coord);
return;
}
Cell cell(p);
if( !loaded(GridPair(cell.data.Part.grid_x, cell.data.Part.grid_y)) )
return;
DEBUG_LOG("Switch object " I64FMT " from grid[%u,%u] %u", obj->GetGUID(), cell.data.Part.grid_x, cell.data.Part.grid_y, on);
NGridType *ngrid = getNGrid(cell.GridX(), cell.GridY());
assert( ngrid != NULL );
GridType &grid = (*ngrid)(cell.CellX(), cell.CellY());
if(on)

View File

@@ -52,11 +52,10 @@ ObjectGridRespawnMover::Visit(CreatureMapType &m)
// creature in unloading grid can have respawn point in another grid
// if it will be unloaded then it will not respawn in original grid until unload/load original grid
// move to respawn point to prevent this case. For player view in respawn grid this will be normal respawn.
for(CreatureMapType::iterator iter=m.begin(), next; iter != m.end(); iter = next)
for(CreatureMapType::iterator iter = m.begin(); iter != m.end();)
{
next = iter; ++next;
Creature * c = iter->getSource();
++iter;
assert(!c->isPet() && "ObjectGridRespawnMover don't must be called for pets");