private static bool FindItem( int x, int y, int z, Map map, Item srcItem )
{
int itemID = srcItem.ItemID;
bool res = false;
IPooledEnumerable eable;
if ( srcItem is BaseDoor )
{
eable = map.GetItemsInRange( new Point3D( x, y, z ), 1 );
foreach ( Item item in eable )
{
if ( !(item is BaseDoor) )
continue;
BaseDoor bd = (BaseDoor)item;
Point3D p;
int bdItemID;
if ( bd.Open )
{
p = new Point3D( bd.X - bd.Offset.X, bd.Y - bd.Offset.Y, bd.Z - bd.Offset.Z );
bdItemID = bd.ClosedID;
}
else
{
p = bd.Location;
bdItemID = bd.ItemID;
}
if ( p.X != x || p.Y != y )
continue;
if ( item.Z == z && bdItemID == itemID )
res = true;
else if ( Math.Abs( item.Z - z ) < 8 )
m_DeleteQueue.Enqueue( item );
}
}
else if ( (TileData.ItemTable[itemID & TileData.MaxItemValue].Flags & TileFlag.LightSource) != 0 )
{
eable = map.GetItemsInRange( new Point3D( x, y, z ), 0 );
LightType lt = srcItem.Light;
string srcName = srcItem.ItemData.Name;
foreach ( Item item in eable )
{
if ( item.Z == z )
{
if ( item.ItemID == itemID )
{
if ( item.Light != lt )
m_DeleteQueue.Enqueue( item );
else
res = true;
}
else if ( (item.ItemData.Flags & TileFlag.LightSource) != 0 && item.ItemData.Name == srcName )
{
m_DeleteQueue.Enqueue( item );
}
}
}
}
else if ( srcItem is Teleporter || srcItem is FillableContainer || srcItem is BaseBook )
{
eable = map.GetItemsInRange( new Point3D( x, y, z ), 0 );
Type type = srcItem.GetType();
foreach ( Item item in eable )
{
if ( item.Z == z && item.ItemID == itemID )
{
if ( item.GetType() != type )
m_DeleteQueue.Enqueue( item );
else
res = true;
}
}
}
else
{
eable = map.GetItemsInRange( new Point3D( x, y, z ), 0 );
foreach ( Item item in eable )
{
if ( item.Z == z && item.ItemID == itemID )
{
eable.Free();
return true;
}
}
}
eable.Free();
while ( m_DeleteQueue.Count > 0 )
((Item)m_DeleteQueue.Dequeue()).Delete();
return res;
}