⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 char_data.c.bak

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 BAK
📖 第 1 页 / 共 4 页
字号:
            ret = getStringFromIndexWithDelim( line, " ", 1, token, sizeof(token));
            if( ret==FALSE ){
                fprint("Syntax Error file:%s line:%d\n",filename,linenum);
                continue;
            }else{
                static struct CHAR_charareakindtbl
                {
                    char*   idstring;
                    CHAR_AREAKIND   kind;
                }CHAR_areakindtbl[]={
                    {"INV",  CHAR_INVAREA,},
                    {"ITM",  CHAR_CANNOTDROPAREA,},
                    {"MAG",  CHAR_CANNOTMAGICAREA,},
                };
                int i;
                for( i=0 ; i<arraysizeof(CHAR_areakindtbl) ; i++ )
                    if( strcmp( token,CHAR_areakindtbl[i].idstring )==0 ){
                        kind = CHAR_areakindtbl[i].kind;
                        break;
                    }
                if( kind == -1 ){
                    print( "\n资料范围问题: %d...",linenum );
                    continue;
                }
            }

            CHAR_invarea[invreadlen].kind = kind;
            ret = getStringFromIndexWithDelim( line, " ", 2, token, sizeof(token));
            if( ret==FALSE ){
                fprint("哪件秩序错误:%s 第%d行\n",filename,linenum);
                continue;
            }else
                CHAR_invarea[invreadlen].floor = atoi( token );

            ret = getStringFromIndexWithDelim( line, " ", 3, token, sizeof(token));
            if( ret ==FALSE){
                fprint("文件秩序错误:%s 第%d行:%d\n", filename, linenum);
                continue;
            }else
                getFourIntsFromString( token,&lx,&ly,&rx,&ry );

            if( lx > rx )swap(lx,rx);
            if( ly > ry )swap(ly,ry);

            CHAR_invarea[invreadlen].area.x = lx;
            CHAR_invarea[invreadlen].area.y = ly;
            CHAR_invarea[invreadlen].area.width = rx-lx;
            CHAR_invarea[invreadlen].area.height= ry-ly;
            invreadlen ++;
        }
    }
    fclose(f);
    CHAR_invareanum = invreadlen;
    print( "有效不可战斗有效数是 %d...", CHAR_invareanum );
#if 0
{
	int		i,j;
    for( i=0; i <CHAR_invareanum ; i++ ) {
		if( CHAR_invarea[i].kind == CHAR_CANNOTMAGICAREA ) {
            print( "fl[%d](%d,%d)-(%d,%d)\n",
               CHAR_invarea[i].floor,
               CHAR_invarea[i].area.x,CHAR_invarea[i].area.y,
               CHAR_invarea[i].area.width,
               CHAR_invarea[i].area.height );
			for( j = 0; j < sizeof( CHAR_invarea[i].work); j ++ ) {
				if( CHAR_invarea[i].work[j] == -1 )break;
				print( "mag[%d] ", CHAR_invarea[i].work[j]);
			}
			print( "\n");
		}
	}
}
#endif
#ifdef DEBUG
    {
        int i;
        for( i=0; i <CHAR_invareanum ; i++ )
            print( "kind(%d) %d(%d,%d)-(%d,%d)\n",
                   CHAR_invarea[i].kind,
                   CHAR_invarea[i].floor,
                   CHAR_invarea[i].area.x,CHAR_invarea[i].area.y,
                   CHAR_invarea[i].area.width,
                   CHAR_invarea[i].area.height );
    }
#endif /*DEBUG*/

    return TRUE;
}

BOOL CHAR_isInvincibleArea( int floor , int x, int y )
{
    int     i;
    for( i=0 ; i<CHAR_invareanum ; i++ )
        if( CHAR_invarea[i].kind == CHAR_INVAREA
            && CHAR_invarea[i].floor == floor
            && CoordinateInRect( &CHAR_invarea[i].area,x,y ) )
            return TRUE;
    return FALSE;
}

BOOL CHAR_isCannotMagicArea( int floor , int x, int y, int magicnum )
{
    int     i;
    for( i=0 ; i<CHAR_invareanum ; i++ ) {
        if( CHAR_invarea[i].kind == CHAR_CANNOTMAGICAREA
            && CHAR_invarea[i].floor == floor
            && CoordinateInRect( &CHAR_invarea[i].area,x,y ) )
        {
            int     j;
            for( j = 0;
                j < sizeof(CHAR_invarea[i].work) &&
                CHAR_invarea[i].work[j] != -1;
                j ++ )
            {
                if( CHAR_invarea[i].work[j] == magicnum ) {
                    return TRUE;
                }
            }
        }
    }
    return FALSE;
}

typedef struct tagCHAR_appearposition
{
    int     floor;
    int     x,y;
}CHAR_appearposition;
CHAR_appearposition*    CHAR_appear;
int                     CHAR_appearnum;

BOOL CHAR_initAppearPosition( char* filename )
{
    FILE*   f;
    char    line[256];
    int     linenum=0;
    int     appearreadlen=0;

    f = fopen(filename,"r");
    if( f == NULL ){
        errorprint;
        return FALSE;
    }

    CHAR_appearnum=0;
    while( fgets( line, sizeof( line ), f ) ){
        linenum ++;
        if( line[0] == '#' )continue;        /* comment */
        if( line[0] == '\n' )continue;       /* none    */
        chomp( line );

        CHAR_appearnum++;
    }

    if( fseek( f, 0, SEEK_SET ) == -1 ){
        fprint( "Seek Error\n" );
        fclose(f);
        return FALSE;
    }

    CHAR_appear = allocateMemory( sizeof(CHAR_appearposition)
                                   * CHAR_appearnum );
    if( CHAR_appear == NULL ){
        fprint( "Can't allocate Memory %d\n" ,
                sizeof(CHAR_appearposition)*CHAR_appearnum);
        fclose( f );
        return FALSE;
    }
{
    int     i;
    for( i = 0; i < CHAR_appearnum; i ++ ) {
        CHAR_appear[i].floor = 0;
        CHAR_appear[i].x = 0;
        CHAR_appear[i].y = 0;

    }
}
    linenum = 0;
    while( fgets( line, sizeof( line ), f ) ){
        linenum ++;
        if( line[0] == '#' )continue;        /* comment */
        if( line[0] == '\n' )continue;       /* none    */
        chomp( line );
        replaceString( line, '\t' , ' ' );
        deleteSequentChar( line, " " );
        if( line[0] == ' ' )continue;

        {
            char    token[256];
            int     ret;

            /*  夫午勾户及玄□弁件毛苇月    */
            ret = getStringFromIndexWithDelim( line," ",1,token,
                                               sizeof(token));
            if( ret==FALSE ){
                fprint("Syntax Error file:%s line:%d\n",filename,linenum);
                continue;
            }
            CHAR_appear[appearreadlen].floor = atoi(token);
            ret = getStringFromIndexWithDelim( line," ",2,token,
                                               sizeof(token));
            if( ret==FALSE ){
                fprint("Syntax Error file:%s line:%d\n",filename,linenum);
                continue;
            }

            CHAR_appear[appearreadlen].x = atoi( token );

            ret = getStringFromIndexWithDelim( line," ",3,token,
                                               sizeof(token));
            if( ret ==FALSE){
                fprint("Syntax Error file:%s line:%d\n",filename,linenum);
                continue;
            }

            CHAR_appear[appearreadlen].y = atoi( token );

            appearreadlen ++;
        }
    }
    fclose(f);

    CHAR_appearnum = appearreadlen;

    print( "有效显示位置范围数是 %d..", CHAR_appearnum );
#ifdef DEBUG

    {
        int i;
        for( i=0; i <CHAR_appearnum ; i++ )
            print( "Appear fl[%d] x[%d] y[%d]\n",
                   CHAR_appear[i].floor,
                   CHAR_appear[i].x,
                   CHAR_appear[i].y );
    }
#endif
    return TRUE;
}

BOOL CHAR_isAppearPosition( int floor, int *x, int *y)
{
    int i;
    for( i = 0; i < CHAR_appearnum; i ++ ) {
        if( CHAR_appear[i].floor == floor ) {
            *x = CHAR_appear[i].x;
            *y = CHAR_appear[i].y;
            return( TRUE);
        }
    }
    return( FALSE);
}

BOOL CHAR_isCannotDropArea( int floor , int x, int y )
{
    int     i;
    for( i=0 ; i<CHAR_invareanum ; i++ )
        if( CHAR_invarea[i].kind == CHAR_CANNOTDROPAREA
            && CHAR_invarea[i].floor == floor
            && CoordinateInRect( &CHAR_invarea[i].area,x,y ) )
            return TRUE;
    return FALSE;
}

typedef struct tagEldersPosition
{
    int     floor;
    int     x;
    int     y;
}EldersPosition;

#define MAXELDERS 128
static EldersPosition elders[MAXELDERS]=
{
    { 1006,15,22 },
    { 2006,20,16 },
	{ 3006,21,16 },
    { 4006,14,20 },
	{ 7770, 9,10 },
#ifdef _DELBORNPLACE //Syu ADD 6.0 统一出生於新手村
//	{  815,42,34 },
#endif

};

BOOL CHAR_getInitElderPosition( Char* ch,int hometown)
{
    int     index = 0;
	int		point;
#ifdef _DELBORNPLACE //Syu ADD 6.0 统一出生於新手村
	if( getMuseum() )
		index = hometown;
#else
    if( hometown < 0 || hometown > 3 ) {
    	return FALSE;
    }
	index=hometown;
#endif
    if( index >= arraysizeof( elders ) ){
 		return FALSE;
    }

    ch->data[CHAR_FLOOR] = elders[index].floor;
    ch->data[CHAR_X] = elders[index].x;
    ch->data[CHAR_Y] = elders[index].y;
	ch->data[CHAR_LASTTALKELDER] = index;
	point = ch->data[CHAR_SAVEPOINT];


#ifdef _DELBORNPLACE //Syu ADD 6.0 统一出生於新手村
	if( getMuseum() ) {
		ch->data[CHAR_FLOOR] = 815;
		ch->data[CHAR_X] = 29;
		ch->data[CHAR_Y] = 40;
		ch->data[CHAR_LASTTALKELDER] = 35;
		// point = point |  (1<<35) ;
		point = point |  (1<<hometown) ;
	}
	else {
		point = point |  (1<<hometown) ;
	}
#else
	point = point |  (1<<hometown) ;
#endif

#ifdef _MUSEUM
	if( getMuseum() ) {
		ch->data[CHAR_FLOOR] = 9000;
		ch->data[CHAR_X] = 40;
		ch->data[CHAR_Y] = 40;
	}
#endif

	ch->data[CHAR_SAVEPOINT] = point;

	if( MAP_checkCoordinates( ch->data[CHAR_FLOOR], ch->data[CHAR_X],
									ch->data[CHAR_Y] ) == FALSE ){
		return FALSE;
	}

    return TRUE;
}

/*------------------------------------------------------------
 * 巨伙母□及桦赭毛  月
 * 娄醒
 *  elderindex      int     巨伙母□奶件犯永弁旦
 *  fl              int*    白夫失毛熬仃潸月桦赭
 *  x               int*    x毛熬仃潸月桦赭
 *  y               int*    y毛熬仃潸月桦赭
 * 娄醒
 *  岳    TRUE(1)
 *  撩    FALSE(0)
 ------------------------------------------------------------*/
BOOL CHAR_getElderPosition( int elderindex, int* fl, int* x, int* y )
{
	    if( elderindex<0 || arraysizeof(elders)<=elderindex )return FALSE;

    *fl = elders[elderindex].floor;
    *x  = elders[elderindex].x;
    *y  = elders[elderindex].y;
    return TRUE;
}
/*------------------------------------------------------------
 * 赢  NPC互愤坌及赓渝祭及午五卞}赢    卞踏五仇戈及分[
 * 公及凶户及奶件正□白尼奶旦
 * 娄醒
 *  index   int 左□田□匹 撩  仄凶日FALSE 毛井尹允
 *  fl      int 匏  及树  
 *  x       int
 *  y       int
 * NPC及伙□民件井日银歹木月及分[
 ------------------------------------------------------------*/
BOOL CHAR_ElderSetPosition( int elderindex ,int fl,int x ,int y)
{
    if( elderindex < ELDERINDEXSTART ||
        elderindex >= MAXELDERS ){
        return FALSE;
    }

    elders[elderindex].floor = fl;
    elders[elderindex].x = x;
    elders[elderindex].y = y;
    return TRUE;
}


void CHAR_setInitValues( Char* ch )
{

#ifndef _PROFESSION_SKILL			// WON ADD 人物职业技能

    static int CHAR_titleindextbl[] ={ 0,1,2,3,4,5,6 };
    int     elderindex;
    int     i;
    BOOL    magician=FALSE;
    BOOL    priest=FALSE;

    elderindex = ch->data[CHAR_LASTTALKELDER];
    if( 0 <= elderindex
        && elderindex < arraysizeof( CHAR_titleindextbl ) )
        ch->indexOfHaveTitle[0] = CHAR_titleindextbl[elderindex];


    for( i=0 ; i<CHAR_SKILLMAXHAVE ; i++ ){
        static struct addIteTbl
        {
            int itemid[2];
        }additemtbl[SKILL_NUM] = {
            {   {  17, -1}   },
            {   {  -1, -1}   },
            {   {  -1, -1}   },
            {   {  17, -1}   },
            {   {  17, -1}   },
            {   {  17, -1}   },
            {   {  17, -1}   },
            {   {  17, -1}   },
            {   {  17, -1}   },
            {   {  17, -1}   },
            {   {  -1, -1}   }, 
            {   {  17, -1}   },
            {   { 601, -1}   },
            {   { 101, -1}   },
            {   { 201, -1}   },
            {   { 300, -1}   },
            {   { 400, -1}   },
            {   { 501, -1}   },
            {   {  17, -1}   },
        };

        if( ch->haveSkill[i].use ){
            int     j;
            int     skindex=ch->haveSkill[i].skill.data[SKILL_IDENTITY];

            for( j=0 ; j<arraysizeof( additemtbl[0].itemid ); j++ )
                CHAR_addItemToChar( ch, additemtbl[skindex].itemid[j] );

            if( skindex == SKILL_MERCHANT )
                ch->data[CHAR_GOLD] = 20;

            if( skindex == SKILL_MAGICIAN )
                magician = TRUE;
            else if( skindex == SKILL_PRIEST )
                priest = TRUE;

        }
    }

    if( magician || priest ) CHAR_addItemToChar( ch, 802 );

#endif
}


#if 1
static int EnemyExpTbl[]={
0,			//  0
2,			//  1
4,			//  2
6,			//  3
8,			//  4
10,			//  5
12,			//  6
14,			//  7
16,			//  8
18,			//  9
20,			// 10
26,			// 11
32,			// 12
38,			// 13
44,			// 14
50,			// 15
60,			// 16
70,			// 17
80,			// 18
90,			// 19
100,		// 20
115,		// 21
130,		// 22
145,		// 23

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -