///////// 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 }