📄 char_data.c
字号:
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 + -