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