///////// Enter the Maze
#include "antistuck_h"
void fnAIWander(object oArea)
{
  object oTarg;
  object oMe=OBJECT_SELF;
  if (GetArea(oMe)==oArea)
  { // still in maze
    oTarg=GetNearestObject(OBJECT_TYPE_WAYPOINT,oMe,d20());
    if (GetIsInCombat(oMe)==FALSE&&IsInConversation(oMe)==FALSE&&GetNearestCreature(CREATURE_TYPE_IS_ALIVE,TRUE,oMe,1,CREATURE_TYPE_PERCEPTION,PERCEPTION_SEEN,CREATURE_TYPE_REPUTATION,REPUTATION_TYPE_ENEMY)==OBJECT_INVALID)
    { // move
      if (d4()==1) AssignCommand(oMe,ASActionMoveToObject(oTarg,TRUE,4.0));
      else { AssignCommand(oMe,ASActionMoveToObject(oTarg,FALSE,4.0)); }
    } // move
    DelayCommand(30.0,fnAIWander(oArea));
  } // still in maze
} // fnAIWander()


void main()
{
   object oPC=GetEnteringObject();
   object oArea=OBJECT_SELF;
   object oDoor=GetLocalObject(oArea,"oDoor");
   object oWP;
   int nR=Random(30)+1;
   if (oDoor==OBJECT_INVALID&&GetIsPC(oPC)==TRUE)
   { // create door
     oWP=GetNearestObjectByTag("MAZE_EXIT"+IntToString(nR),oPC,1);
     oDoor=CreateObject(OBJECT_TYPE_PLACEABLE,"mazeexit",GetLocation(oWP));
     SetLocalObject(oArea,"oDoor",oDoor);
   } // create door
   if (GetIsPC(oPC)==TRUE&&GetIsDM(oPC)==FALSE)
     ExecuteScript("rts_save_player",oPC);
   if (GetIsPC(oPC)==FALSE)
   { // handle AI in the area
    oWP=GetNearestObjectByTag("MAZE_EXIT"+IntToString(nR),oPC,1);
    AssignCommand(oPC,ClearAllActions());
    AssignCommand(oPC,JumpToObject(oWP));
    AssignCommand(oPC,fnAIWander(oArea));
   } // handle AI in the area
}