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

82 lines
2.3 KiB
Plaintext

// ai_header2
#include "rts_pathing"
#include "rts_header"
///////////////////
// PROTOTYPE
///////////////////
object fnTransitionOutside(int nObjectType);
object fnFindSafeTransition();
//////////////////
// FUNCTION
//////////////////
object fnTransitionOutside(int nObjectType)
{ // get transition target
object oRet=OBJECT_INVALID;
int nC=1;
object oTO;
object oTarget;
object oMe=OBJECT_SELF;
oTO=GetNearestObject(nObjectType,oMe,nC);
while(oTO!=OBJECT_INVALID&&oRet==OBJECT_INVALID)
{ // check transition object
oTarget=GetTransitionTarget(oTO);
if (oTarget!=OBJECT_INVALID) oRet=oTarget;
nC++;
oTO=GetNearestObject(nObjectType,oMe,nC);
} // check transition object
return oRet;
} // fnTransitionOutside()
int fnNotGoodArea(object oTT)
{ // transition
string sTag=GetTag(GetArea(oTT));
if (sTag=="AGC") return FALSE;
else if (sTag=="AGE") return FALSE;
else if (sTag=="AGN") return FALSE;
else if (sTag=="AGNE") return FALSE;
else if (sTag=="AGNW") return FALSE;
else if (sTag=="AGS") return FALSE;
else if (sTag=="AGSE") return FALSE;
else if (sTag=="AGSW") return FALSE;
else if (sTag=="AGW") return FALSE;
else if (sTag=="BGC") return FALSE;
else if (sTag=="BGE") return FALSE;
else if (sTag=="BGN") return FALSE;
else if (sTag=="BGNE") return FALSE;
else if (sTag=="BGNW") return FALSE;
else if (sTag=="BGS") return FALSE;
else if (sTag=="BGSE") return FALSE;
else if (sTag=="BGSW") return FALSE;
else if (sTag=="BGW") return FALSE;
return TRUE;
} // fnNotGoodArea()
object fnFindSafeTransition()
{ // find safe transition
object oOb;
object oTT;
int nR=d4();
int nL=0;
object oMe=OBJECT_SELF;
if (nR<3) oOb=GetNearestObject(OBJECT_TYPE_TRIGGER,oMe,d6());
else { oOb=GetNearestObject(OBJECT_TYPE_DOOR,oMe,d6()); }
oTT=GetTransitionTarget(oOb);
while((oTT==OBJECT_INVALID||fnNotGoodArea(oTT)==TRUE)&&nL<5)
{ // look for transition
nR=d4();
if (nR<3) oOb=GetNearestObject(OBJECT_TYPE_TRIGGER,oMe,d6());
else { oOb=GetNearestObject(OBJECT_TYPE_DOOR,oMe,d6()); }
oTT=GetTransitionTarget(oOb);
nL++;
} // look for transition
if (oTT!=OBJECT_INVALID&&fnNotGoodArea(oTT)==FALSE)
{ // good area
oOb=GetNearestObject(OBJECT_TYPE_WAYPOINT,oTT,1);
return oOb;
} // good area
return OBJECT_INVALID;
} // fnFindSafeTransition()
//void main(){}