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

📄 enemy.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
    if( f == NULL ){
        print( "文件打开失败\n");
        return FALSE;
    }

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

#ifdef _ENEMY_OPTIMUM // Robin 取出最大ENEMY ID
		if( getStringFromIndexWithDelim( line, ",", ENEMY_DATACHARNUM+ENEMY_ID+1,
				token, sizeof(token)) == FALSE )
			continue;
		max_enemyid = max( atoi( token), max_enemyid);
#endif

        ENEMY_enemynum++;
    }

    if( fseek( f, 0, SEEK_SET ) == -1 ){
        fprint( "寻找失败\n" );
        fclose(f);
        return FALSE;
    }

#ifdef _ENEMY_OPTIMUM
	print("\n 有效ET:%d 最大ET:%d \n", ENEMY_enemynum, max_enemyid);
	ENEMY_enemynum = max_enemyid +1;
#endif

    ENEMY_enemy = allocateMemory( sizeof(struct tagENEMY_EnemyTable)
                                   * ENEMY_enemynum );
    if( ENEMY_enemy == NULL ){
        fprint( "无法分配内存 %d\n" ,
                sizeof(struct tagENEMY_EnemyTable)*ENEMY_enemynum);
        fclose( f );
        return FALSE;
    }
    for( i = 0; i < ENEMY_enemynum; i ++ ) {
    	for( j = 0; j < ENEMY_DATAINTNUM; j ++ ) {
    		ENEMY_setInt( i,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' , ' ' );
{
        char    buf[256];
        for( i = 0; i < strlen( line); i ++) {
            if( line[i] != ' ' ) {
                break;
            }
            strcpy( buf, &line[i]);
        }
        if( i != 0 ) {
            strcpy( line, buf);
        }
}
{
        char    token[256];
        int     ret;

#ifdef _ENEMY_OPTIMUM
		if( getStringFromIndexWithDelim( line, ",", ENEMY_DATACHARNUM+ENEMY_ID+1,
				token, sizeof(token)) == FALSE )
			continue;
		enemy_readlen = atoi(token);
#endif

        ret = getStringFromIndexWithDelim( line,",",1,token,sizeof(token));
        if( ret==FALSE ){
            fprint("文件语法错误:%s 第%d行\n",filename,linenum);
            continue;
        }
        ENEMY_setChar( enemy_readlen, ENEMY_NAME, token);
        ret = getStringFromIndexWithDelim( line,",",2,token,sizeof(token));
        if( ret==FALSE ){
            fprint("文件语法错误:%s 第%d行\n",filename,linenum);
            continue;
        }
        ENEMY_setChar( enemy_readlen, ENEMY_TACTICSOPTION, token);
#ifdef _BATTLENPC_WARP_PLAYER
	    ret = getStringFromIndexWithDelim( line, ",", 3, token, sizeof(token));
        if(ret==FALSE){
            fprint("文件语法错误:%s 第%d行\n",filename,linenum);
            continue;
        }
        ENEMY_setChar( enemy_readlen, ENEMY_ACT_CONDITION, token);
#endif

#ifdef _BATTLENPC_WARP_PLAYER
#define	ENEMY_STARTINTNUM		4
#else
#define	ENEMY_STARTINTNUM		3
#endif

        for( i = ENEMY_STARTINTNUM; i < ENEMY_DATAINTNUM+ENEMY_STARTINTNUM; i ++ ) {
            ret = getStringFromIndexWithDelim( line,",",i,token,sizeof(token));
            if( ret==FALSE ){
                fprint("文件语法错误:%s 第%d行\n",filename,linenum);
                break;
            }
            ENEMY_setInt( enemy_readlen, i - ENEMY_STARTINTNUM, atoi( token));
        }
        if( i < ENEMY_DATAINTNUM+ENEMY_STARTINTNUM ) continue;
		for( i = 0; i < ENEMYTEMP_enemynum; i ++ ) {
			if( ENEMYTEMP_getInt( i, E_T_TEMPNO)== ENEMY_getInt( enemy_readlen, ENEMY_TEMPNO)){
				break;
			}
		}
		if( i == ENEMYTEMP_enemynum) {
            fprint("文件语法错误:%s 第%d行\n",filename,linenum);
			continue;
		}
		ENEMY_enemy[enemy_readlen].enemytemparray = i;
{
		int	lv_min, lv_max;
		lv_min = ENEMY_getInt( enemy_readlen, ENEMY_LV_MIN);
		lv_max = ENEMY_getInt( enemy_readlen, ENEMY_LV_MAX);
		if( lv_min == 0 ) lv_min = lv_max;
		ENEMY_setInt( enemy_readlen, ENEMY_LV_MIN, min( lv_min, lv_max));
		ENEMY_setInt( enemy_readlen, ENEMY_LV_MAX, max( lv_min, lv_max));

}

        enemy_readlen ++;
}
    }
    fclose(f);
    ENEMY_enemynum = enemy_readlen;
    print( "有效宠物数是 %d..", ENEMY_enemynum );

#if 0
    {
        for( i=0; i <ENEMY_enemynum ; i++ ){
            print( "%s ", ENEMY_getChar( i, ENEMY_NAME));
            print( "%s ", ENEMY_getChar( i, ENEMY_TACTICSOPTION));
            for( j = 0; j < ENEMY_DATAINTNUM; j ++ ) {
                print( "%d ", ENEMY_getInt( i, j));
            }
            print( "[%d]", ENEMY_enemy[i].enemytemparray);
            print( "\n");
        }
    }
#endif
    return TRUE;
}
/*------------------------------------------------------------------------
 * ENEMY_enemy及涩烂白央奶伙  心  仄
 *-----------------------------------------------------------------------*/
BOOL ENEMY_reinitEnemy( void )
{
	freeMemory( ENEMY_enemy);
	return( ENEMY_initEnemy( getEnemyfile()));
}

/*------------------------------------------------------------------------
 ENEMY_Enemy及骄侬毛襞月
 *-----------------------------------------------------------------------*/
int ENEMY_getEnemyArrayFromIndex( int groupindex, int index)
{
	if( !GROUP_CHECKINDEX( groupindex)) return -1;
	if( index < 0 || index >= CREATEPROB1 - ENEMY_ID1) return -1;
	return GROUP_group[groupindex].enemyarray[index];
}
/*------------------------------------------------------------------------
 * ENEMY_ID 井日ENEMY_Enemy及骄侬毛襞月
 *-----------------------------------------------------------------------*/
int ENEMY_getEnemyArrayFromId( int EnemyId)
{
#ifdef _ENEMY_OPTIMUM
	if( EnemyId >= 0 && EnemyId < ENEMY_enemynum )
		return	EnemyId;
#else
	int		i;
	for( i = 0; i < ENEMY_enemynum; i ++ ) {
		if( ENEMY_getInt( i, ENEMY_ID) == EnemyId) {
			return i;
		}
	}
#endif
	return -1;
}

int ENEMY_getEnemyArrayFromTempNo( int EnemyTempNo)
{
	int		i;
	for( i = 0; i < ENEMY_enemynum; i ++ ) {
		if( ENEMY_getInt( i, ENEMY_TEMPNO) == EnemyTempNo) {
			return i;
		}
	}
	return -1;
}

int ENEMY_getEnemyIdFromTempNo( int EnemyTempNo)
{
	int		i;
	for( i = 0; i < ENEMY_enemynum; i ++ ) {
		if( ENEMY_getInt( i, ENEMY_TEMPNO) == EnemyTempNo) {
			return ENEMY_getInt( i, ENEMY_ID);
		}
	}
	return -1;
}

int ENEMY_getEnemyTempNoFromId( int EnemyId)
{
#ifdef _ENEMY_OPTIMUM
	if( EnemyId >= 0 && EnemyId < ENEMY_enemynum)
		return ENEMY_getInt( EnemyId, ENEMY_TEMPNO);
#else
	int		i;
	for( i = 0; i < ENEMY_enemynum; i ++ ) {
		if( ENEMY_getInt( i, ENEMY_ID) == EnemyId) {
			return ENEMY_getInt( i, ENEMY_TEMPNO);
		}
	}
#endif
	return -1;
}

/*------------------------------------------------------------------------
 * 弘伙□皿涩烂白央奶伙毛  戈
 *-----------------------------------------------------------------------*/
BOOL GROUP_initGroup( char* filename )
{
    FILE*   f;
    char    line[256];
    int     linenum=0;
    int     group_readlen=0;
	int		i,j;

    f = fopen(filename,"r");
    if( f == NULL ){
        print( "文件打开失败\n");
        return FALSE;
    }

    GROUP_groupnum=0;

    /*  引内  躲卅垫互窒垫丐月井升丹井譬屯月    */
    while( fgets( line, sizeof( line ), f ) ){
        linenum ++;
        if( line[0] == '#' )continue;        /* comment */
        if( line[0] == '\n' )continue;       /* none    */
        chomp( line );

        GROUP_groupnum++;
    }

    if( fseek( f, 0, SEEK_SET ) == -1 ){
        fprint( "寻找失败\n" );
        fclose(f);
        return FALSE;
    }

    GROUP_group = allocateMemory( sizeof(struct tagGROUP_Table)
                                   * GROUP_groupnum );
    if( GROUP_group == NULL ){
        fprint( "无法分配内存 %d\n" ,
                sizeof(struct tagGROUP_Table)*GROUP_groupnum);
        fclose( f );
        return FALSE;
    }
	/* 赓渝祭 */
    for( i = 0; i < GROUP_groupnum; i ++ ) {
    	for( j = 0; j < GROUP_DATAINTNUM; j ++ ) {
    		GROUP_setInt( i,j,-1);
    	}
		for( j = 0; j < CREATEPROB1 - ENEMY_ID1; j ++ ) {
			GROUP_group[i].enemyarray[j] = -1;
		}
    }

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

        /*  垫毛帮溥允月    */
        /*  引内 tab 毛 " " 卞  五晶尹月    */
        replaceString( line, '\t' , ' ' );
        /* 燮  及旦矢□旦毛潸月[*/
{
        char    buf[256];
        for( i = 0; i < strlen( line); i ++) {
            if( line[i] != ' ' ) {
                break;
            }
            strcpy( buf, &line[i]);
        }
        if( i != 0 ) {
            strcpy( line, buf);
        }
}
{
        char    token[256];
        int     ret;
        int		loop;

		/* 手仄手ㄡ蘸户及伙□皿卞  匀凶凛及凶户卞赓渝祭仄化云仁 */
    	for( j = 0; j < GROUP_DATAINTNUM; j ++ ) {
    		GROUP_setInt( group_readlen,j,-1);
    	}
		for( j = 0; j < CREATEPROB1 - ENEMY_ID1; j ++ ) {
			GROUP_group[group_readlen].enemyarray[j] = -1;
		}

        /*  夫午勾户及玄□弁件毛苇月    */
        ret = getStringFromIndexWithDelim( line,",",1,token,
                                           sizeof(token));
        if( ret==FALSE ){
            fprint("文件语法错误:%s 第%d行\n",filename,linenum);
            continue;
        }
        GROUP_setChar( group_readlen, GROUP_NAME, token);

        /* 2勾  动嫦反醒袄犯□正 */
#define	GROUP_STARTINTNUM		2
        for( i = GROUP_STARTINTNUM; i < GROUP_DATAINTNUM+GROUP_STARTINTNUM; i ++ ) {
            ret = getStringFromIndexWithDelim( line,",",i,token,
                                               sizeof(token));
            if( ret==FALSE ){
                fprint("文件语法错误:%s 第%d行\n",filename,linenum);
                break;
            }
            if( strlen( token) != 0 ) {
	            GROUP_setInt( group_readlen, i - GROUP_STARTINTNUM, atoi( token));
			}
        }
        if( i < GROUP_DATAINTNUM+GROUP_STARTINTNUM ) continue;

		{
			int		enemycnt = 0;
			for( loop = ENEMY_ID1; loop < CREATEPROB1; loop ++ ) {
				if( GROUP_getInt( group_readlen, loop) != -1 ) {
					for( i = 0; i < ENEMY_enemynum; i ++ ) {
						if( ENEMY_getInt( i, ENEMY_ID)
							== GROUP_getInt( group_readlen, loop))
						{
							break;
						}
					}
					if( i == ENEMY_enemynum) {
						i = -1;
						GROUP_setInt( group_readlen, loop, -1);
					}
					else {
						enemycnt ++;
					}
					GROUP_group[group_readlen].enemyarray[loop - ENEMY_ID1] = i;
				}
			}
			if( enemycnt == 0 ) {
                fprint("团队设定中敌人尚未设定 文件:%s 第%d行\n",filename,linenum);
				continue;;
			}
            if( checkRedundancy( &GROUP_group[group_readlen].intdata[ENEMY_ID1],
            			CREATEPROB1 - ENEMY_ID1))
            {
                fprint("团队设定中敌人重复设定 文件:%s 第%d行\n",filename,linenum);
				continue;;
			}

		}


        group_readlen ++;
}
    }
    fclose(f);

    GROUP_groupnum = group_readlen;

    print( "有效遇敌组群数是 %d...", GROUP_groupnum );

#if 0

    for( i=0; i <GROUP_groupnum ; i++ ){
        int j;
        print( "%s ", GROUP_getChar( i, GROUP_NAME));
        for( j = 0; j < GROUP_DATAINTNUM; j ++ ) {
            print( "%d ", GROUP_getInt( i, j));
        }
        for( j = 0; j < 10; j ++ ) {
	        print( "[%d] ",GROUP_group[i].enemyarray[j]);
		}
        print( "\n");
    }
#endif
	return TRUE;
}
/*------------------------------------------------------------------------
 * 弘伙□皿及涩烂白央奶伙  心  仄
 *-----------------------------------------------------------------------*/
BOOL GROUP_reinitGroup( void )
{
	freeMemory( GROUP_group);
	return( GROUP_initGroup( getGroupfile()));
}

⌨️ 快捷键说明

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