HoS_PRC8/_mod/_module/nss/oe_maze.nss
Jaysyn904 04165202c0 Initial upload
Initial upload
2024-11-25 19:36:07 -05:00

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
}