43 lines
1.5 KiB
Plaintext
43 lines
1.5 KiB
Plaintext
///////// 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
|
|
}
|