Exemple #1
0
/*****************************************************************************
 * 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);
}
Exemple #2
0
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);
	}
}