/***************************************************************************** * FUNCTION * resolve_lines * DESCRIPTION * * PARAMETERS * paragraphEmbeddingLevel [IN] * inputString [?] * paraCount [IN] * mirrorFlag [IN] * pInput_Types [?] * pInput_Levels [?] * RETURNS * void *****************************************************************************/ void resolve_lines( U8 paragraphEmbeddingLevel, U8 *inputString, U16 paraCount, pBOOL mirrorFlag, U8 *pInput_Types, U8 *pInput_Levels) { /*----------------------------------------------------------------*/ /* Local Variables */ /*----------------------------------------------------------------*/ U16 lineCount = 0; U16 *pBreak = 0; /*----------------------------------------------------------------*/ /* Code Body */ /*----------------------------------------------------------------*/ do { /* break lines at LS */ lineCount = bidi_resolve_lines(inputString, paraCount, pBreak); /* resolve whitespace */ bidi_resolve_white_space(paragraphEmbeddingLevel, pInput_Types, pInput_Levels, lineCount); if (mirrorFlag) { get_mirror(inputString, pInput_Levels, lineCount); } /* reorder each line in place */ bidi_reorder(paragraphEmbeddingLevel, inputString, pInput_Levels, lineCount); //Changed by Yogesh 20041224 // inputString += lineCount; inputString += lineCount * BIDI_ENCODING_LENGTH; pInput_Levels += lineCount; pBreak += pBreak ? lineCount : 0; pInput_Types += lineCount; paraCount -= lineCount; } while (paraCount); }
void transport_driver(int in,int cn) { int x,y,a,oldx,oldy,nr,mirror,oldmirror; unsigned long long bit; struct transport_ppd *dat; unsigned char buf[16]; if (!cn) return; // always make sure its not an automatic call if you don't handle it dat=set_data(cn,DRD_TRANSPORT_PPD,sizeof(struct transport_ppd)); if (!dat) return; // oops... // mark new transports as seen nr=it[in].drdata[0]; if (nr!=255) { // not clan exit if (nr<0 || nr>=ARRAYSIZE(trans)) { elog("illegal transport nr %d from item %d (%s) #1",nr,in,it[in].name); log_char(cn,LOG_SYSTEM,0,"Nothing happens - BUG (%d,#1).",nr); return; } bit=1<<nr; if (!(dat->seen&bit)) { log_char(cn,LOG_SYSTEM,0,"You have reached a new transportation point."); dat->seen|=bit; } } if (ch[cn].act2==0) { buf[0]=SV_TELEPORT; *(unsigned long long*)(buf+1)=dat->seen; psend(ch[cn].player,buf,9); return; } nr=(ch[cn].act2&255)-1; mirror=(ch[cn].act2/256); if (mirror<1 || mirror>26) mirror=RANDOM(26)+1; // clan hall is target if (nr>63 && nr<64+60) { if (may_enter_clan(cn,nr-63)) { x=17+((nr-64)/12)*49; y=16+((nr-64)%12)*20; a=13; } else { x=43+((nr-64)/12)*49; y=15+((nr-64)%12)*20; a=13; } } else if (nr<64) { bit=1<<nr; if (!(dat->seen&bit)) { log_char(cn,LOG_SYSTEM,0,"You've never been to %s before. You cannot go there.",trans[nr].name); return; } if (nr==22 && !(ch[cn].flags&CF_ARCH)) { log_char(cn,LOG_SYSTEM,0,"Sorry, Arches only!"); return; } if (nr<0 || nr>=ARRAYSIZE(trans)) { //elog("illegal transport nr %d #2",nr); log_char(cn,LOG_SYSTEM,0,"Nothing happens - BUG (%d,#2).",nr); return; } x=trans[nr].x; y=trans[nr].y; a=trans[nr].a; } else { log_char(cn,LOG_SYSTEM,0,"You've confused me. (BUG #1123)"); return; } if (x<1 || x>MAXMAP-2 || y<1 || y>MAXMAP-2) { log_char(cn,LOG_SYSTEM,0,"Nothing happens - BUG (%d,%d,%d).",x,y,a); return; } oldmirror=ch[cn].mirror; ch[cn].mirror=mirror; if ((ch[cn].flags&CF_PLAYER) && a && (a!=areaID || get_mirror(a,ch[cn].mirror)!=areaM)) { if (!change_area(cn,a,x,y)) { log_char(cn,LOG_SYSTEM,0,"Nothing happens - target area server is down."); ch[cn].mirror=oldmirror; } return; } buf[0]=SV_MIRROR; *(unsigned int*)(buf+1)=ch[cn].mirror; psend(ch[cn].player,buf,5); oldx=ch[cn].x; oldy=ch[cn].y; remove_char(cn); if (!drop_char(cn,x,y,0)) { log_char(cn,LOG_SYSTEM,0,"Please try again soon. Target is busy"); drop_char(cn,oldx,oldy,0); } }