////////////// Maze Exit
void fnPurgeItems(object oNear)
{ // cleanup items
  int nC;
  object oOb;
  nC=1;
  oOb=GetNearestObject(OBJECT_TYPE_ITEM,oNear,nC);
  while(oOb!=OBJECT_INVALID)
  {
    DelayCommand(1.5,DestroyObject(oOb));
    nC++;
    oOb=GetNearestObject(OBJECT_TYPE_ITEM,oNear,nC);
  }
  nC=1;
  oOb=GetNearestObject(OBJECT_TYPE_PLACEABLE,oNear,nC);
  while(oOb!=OBJECT_INVALID)
  {
    DelayCommand(1.5,DestroyObject(oOb));
    nC++;
    oOb=GetNearestObject(OBJECT_TYPE_PLACEABLE,oNear,nC);
  }
} // fnCleanup()


void main()
{
   object oPC=GetExitingObject();
   object oArea=OBJECT_SELF;
   object oNear=GetWaypointByTag("MAZE_SPAWN1");
   object oTest;
   int bDestroyDoor=FALSE;
   int nC;
   if (GetIsPC(oPC)==TRUE)
   { // PC exited
     oTest=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oNear,2,CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC);
     if (oPC==OBJECT_INVALID)
     { // not a second PC
       oTest=GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oNear,1,CREATURE_TYPE_PLAYER_CHAR,PLAYER_CHAR_IS_PC);
       if (oTest==OBJECT_INVALID||oTest==oPC) bDestroyDoor=TRUE;
     } // not a second PC
     if (bDestroyDoor==TRUE)
     { // destroy the door
       oTest=GetLocalObject(oArea,"oDoor");
       if (oTest!=OBJECT_INVALID) DestroyObject(oTest);
       DeleteLocalObject(oArea,"oDoor");
       fnPurgeItems(oNear);
     } // destroy the door
   } // PC exited
}