}
vector< stBlockItem > getBlockingItems( P_CHAR pChar, const Coord_cl &pos ){	vector< stBlockItem > blockList;	make_heap( blockList.begin(), blockList.end(), compareTiles() );	// Process the map at that position	stBlockItem mapBlock;	INT32 mapId = 0;	mapBlock.z = Map->AverageMapElevation( pos, mapId );	// TODO: Calculate the REAL average Z Value of that Map Tile here! Otherwise clients will have minor walking problems.	mapBlock.z = Map->MapElevation( pos );	map_st mapCell = Map->SeekMap( pos );	land_st mapTile = cTileCache::instance()->getLand( mapCell.id );	// If it's not impassable it's automatically walkable	if( !(mapTile.flag1 & 0x40) )		mapBlock.walkable = true;	else		mapBlock.walkable = checkWalkable( pChar, Map->SeekMap( pos ).id );	blockList.push_back( mapBlock );	push_heap( blockList.begin(), blockList.end(), compareTiles() );    // Now for the static-items	MapStaticIterator staIter( pos );	for( staticrecord *sTile = staIter.First(); sTile; sTile = staIter.Next() )	{		tile_st tTile = cTileCache::instance()->getTile( sTile->itemid );		// Here is decided if the tile is needed		// It's uninteresting if it's NOT blocking		// And NOT a bridge/surface		if( !( ( tTile.flag2 & 0x02 ) || ( tTile.flag1 & 0x40 ) || ( tTile.flag2 & 0x04 ) ) )			continue;		stBlockItem staticBlock;		staticBlock.z = sTile->zoff;		// If we are a surface we can always walk here, otherwise check if		// we are special		if( ( tTile.flag2 & 0x02 ) && !( tTile.flag1 & 0x40 ) )			staticBlock.walkable = true;		else			staticBlock.walkable = checkWalkable( pChar, sTile->itemid );		// If we are a stair only the half height counts		if( tTile.flag2 & 0x04 )			staticBlock.height = (UINT8)( tTile.height / 2 );		else			staticBlock.height = tTile.height;		blockList.push_back( staticBlock );		push_heap( blockList.begin(), blockList.end(), compareTiles() );	}	RegionIterator4Items iIter( pos );	for( iIter.Begin(); !iIter.atEnd(); iIter++ )	{		P_ITEM pItem = iIter.GetData();		if( !pItem )			continue;		// TODO: Handle Multis		if( pItem->id() >= 0x4000 )			continue;		// They need to be at the same x,y,plane coords		if( ( pItem->pos.x != pos.x ) || ( pItem->pos.y != pos.y ) || ( pItem->pos.map != pos.map ) )			continue;		tile_st tTile = cTileCache::instance()->getTile( pItem->id() );		// Se above for what the flags mean		if( !( ( tTile.flag2 & 0x02 ) || ( tTile.flag1 & 0x40 ) || ( tTile.flag2 & 0x04 ) ) )			continue;		stBlockItem blockItem;		blockItem.height = tTile.height;		blockItem.z = pItem->pos.z;		// Once again: see above for a description of this part		if( ( tTile.flag2 & 0x02 ) && !( tTile.flag1 & 0x40 ) )			blockItem.walkable = true;		else			blockItem.walkable = checkWalkable( pChar, pItem->id() );		blockList.push_back( blockItem );		push_heap( blockList.begin(), blockList.end(), compareTiles() );	}	// Now we need to evaluate dynamic items [...] (later)	// TODO: Multis here	sort_heap( blockList.begin(), blockList.end(), compareTiles() );	return blockList;};