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

📄 char_data.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 4 页
字号:
        fclose(f);        return FALSE;    }    CHAR_invarea = allocateMemory( sizeof(CHAR_invincibleArea)                                   * CHAR_invareanum );    if( CHAR_invarea == NULL ){        fprint( "Can't allocate Memory %d\n" ,                sizeof(CHAR_invincibleArea)*CHAR_invareanum);        fclose( f );        return FALSE;    }    /* 赓渝祭 */{    int     i;    for( i = 0; i < CHAR_invareanum; i ++ ) {        int j;        CHAR_invarea[i].kind = CHAR_AREAKIND_NONE;        CHAR_invarea[i].floor = 0;        CHAR_invarea[i].area.x = 0;        CHAR_invarea[i].area.y = 0;        CHAR_invarea[i].area.width = 0;        CHAR_invarea[i].area.height = 0;        for( j = 0; j < sizeof(CHAR_invarea[i].work); j ++ ) {            CHAR_invarea[i].work[j] = -1;        }    }}    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;            int     lx,ly,rx,ry;            CHAR_AREAKIND   kind=-1;            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( "资料范围问题: %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行\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 );#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 128static EldersPosition elders[MAXELDERS]={  { 1006,15,22 },  { 2006,20,16 },	{ 3006,21,16 },  { 4006,14,20 },	{ 7770, 9,10 },};BOOL CHAR_getInitElderPosition( Char* ch,int hometown){    int     index = 0;	  int		point;    if( hometown < 0 || hometown > 3 ) {    	return FALSE;    }	index=hometown;    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];	point = point |  (1<<hometown) ;	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 ){    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 ) )

⌨️ 快捷键说明

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