// 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(){}