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

📄 enemy.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 4 页
字号:
        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 );    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){	int		i;	for( i = 0; i < ENEMY_enemynum; i ++ ) {		if( ENEMY_getInt( i, ENEMY_ID) == EnemyId) {			return i;		}	}	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){	int		i;	for( i = 0; i < ENEMY_enemynum; i ++ ) {		if( ENEMY_getInt( i, ENEMY_ID) == EnemyId) {			return ENEMY_getInt( i, ENEMY_TEMPNO);		}	}	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 );	return TRUE;}/*------------------------------------------------------------------------ * 弘伙□皿及涩烂白央奶伙  心  仄 *-----------------------------------------------------------------------*/BOOL GROUP_reinitGroup( void ){	freeMemory( GROUP_group);	return( GROUP_initGroup( getGroupfile()));}/*------------------------------------------------------------------------ * GROUP_ID 井日GROUP_Group及骄侬毛襞月 *-----------------------------------------------------------------------*/int GROUP_getGroupArray( int groupid){	int		i;	for( i = 0; i < GROUP_groupnum; i ++ ) {		if( GROUP_getInt( i, GROUP_ID) == groupid) {			return i;		}	}	return -1;}/*------------------------------------------------------------------------ * 潸  烦董袄毛综岳允月[ *-----------------------------------------------------------------------*/static int ENEMY_getExp( int array,int tarray, int level, int rank ){	int		ret;	int		*p;    int		*tp;    float		ranknum = 0.0;	float		alpha;    struct 	{    	int		num;    	float	rank;    }ranktbl[] = {    	{ 100, 2.5},    	{ 95, 2.0},    	{ 90, 1.5},    	{ 85, 1.0},    	{ 80, 0.5},    	{ 0, 0.0},    };    level --;    if( level < 0 || level >= arraysizeof( enemybaseexptbl)) return 0;    p  = ENEMY_enemy[array].intdata;    tp = ENEMYTEMP_enemy[tarray].intdata;	// 仿件弁井日    毛潸  	if( rank < 0 || rank > 5 ) rank = 0;	ranknum = ranktbl[rank].rank;	alpha = (   *( tp + E_T_CRITICAL) + *( tp + E_T_COUNTER)   + *(tp + E_T_GET)			  + *( tp + E_T_POISON)   + *( tp + E_T_PARALYSIS) + *(tp + E_T_SLEEP)			  + *( tp + E_T_STONE)    + *( tp + E_T_DRUNK)     + *(tp + E_T_CONFUSION)			) / 100.0			+ *( tp + E_T_RARE);	/* EXP>湘  EXP≈-  仿件弁≈汐  ←伊矛伙×*/	//return enemybaseexptbl[*(p+ENEMY_LV)] + (ranknum + alpha)*(*(tp+ENEMY_LV));	ret = enemybaseexptbl[level] + (ranknum + alpha)*(level+1);	return ( ret < 1 ) ? 1 : ret;}int ENEMY_getRank( int array, int tarray ){    int     *p;    int		*tp;    int		paramsum;	int		i;	int		ranknum;    struct 	{    	int		num;    	float	rank;    }ranktbl[] = {    	{ 100, 2.5}, //总成长率 >= 100 petrank=0    	{ 95, 2.0},    	{ 90, 1.5},    	{ 85, 1.0},    	{ 80, 0.5},    	{ 0, 0.0},    };    p  = ENEMY_enemy[array].intdata;    tp = ENEMYTEMP_enemy[tarray].intdata;	/* 仿件弁毛煌遥允月 */	/* 仇及  及酷  反酷  踏毛辅哔及仪[ */	paramsum  = *( tp + E_T_BASEVITAL) +		   		*( tp + E_T_BASESTR) +		   		*( tp + E_T_BASETGH) +		   		*( tp + E_T_BASEDEX);	ranknum = 0;	// 犯白巧伙玄反ㄟ	for( i = 0; i < arraysizeof( ranktbl); i ++ ) {		if(  paramsum >= ranktbl[i].num ) {			ranknum = i;			break;		}	}	return ranknum;}//*********************************************************// 仿件母丞卅  //*********************************************************static int EnemyGymSkill[] = {	PETSKILL_GUARDBREAK, 			// ㄢ“布□玉旰仄(3)	PETSKILL_CONTINUATIONATTACK1, 	// ㄠㄟ“  粮  猾(10)	PETSKILL_CONTINUATIONATTACK2, 	// ㄠㄠ“  粮  猾(11)	PETSKILL_CONTINUATIONATTACK3, 	// ㄠㄡ“  粮  猾(12)	PETSKILL_CHARGE1,				// ㄢㄟ“民乓□斥ㄠ(30)	PETSKILL_CHARGE2,				// ㄢㄠ“民乓□斥ㄡ(31)	PETSKILL_MIGHTY1,				// ㄣㄟ“域猾  诮(40)	PETSKILL_MIGHTY2,				// ㄣㄠ“域猾  诮(41)	PETSKILL_POWERBALANCE1,			// ㄤㄟ“    及讽ㄠ(50)	PETSKILL_POWERBALANCE2,			// ㄤㄠ“    及讽ㄡ(51)	PETSKILL_POWERBALANCE3,			// ㄤㄡ“    及讽ㄢ(52)	PETSKILL_POISON_ATTACK1,		// ㄥㄟ“    猾(60)	PETSKILL_POISON_ATTACK2,		// ㄥㄠ“    猾(61)	PETSKILL_STONE,					// ㄧㄟ“檗祭  猾(80)	PETSKILL_CONFUSION_ATTACK,		// ㄨㄟ“渔刭  猾(90)	PETSKILL_DRUNK_ATTACK,			// ㄠㄟㄟ“听办  猾(100)	PETSKILL_SLEEP_ATTACK,			// ㄠㄠㄟ“戽曰  猾(110)	PETSKILL_NOGUARD1,				// ㄠㄤㄟ“用□布□玉ㄠ(150)	PETSKILL_NOGUARD2,				// ㄠㄤㄠ“用□布□玉ㄡ(151)	PETSKILL_NOGUARD3,				// ㄠㄤㄡ“用□布□玉ㄢ(152)#ifdef _PSKILL_FALLGROUND	PETSKILL_FALLGROUND,			//落马术#endif#ifdef _SKILL_DAMAGETOHP	PETSKILL_DAMAGETOHP,		//嗜血技#endif#ifdef _Skill_MPDAMAGE	PETSKILL_MPDAMAGE,		//MP伤害#endif#ifdef _SKILL_WILDVIOLENT_ATT    PETSKILL_WILDVIOLENTATTACK,   //(540)狂暴攻击  vincent add 2002/05/16#endif#ifdef _SKILL_SPEEDY_ATT    PETSKILL_SPEEDYATTACK,        //(541)疾速攻击  vincent add 2002/05/16#endif#ifdef _SKILL_GUARDBREAK2    PETSKILL_GUARDBREAK2,         //(542)破除防御2 vincent add 2002/05/20#endif#ifdef _SKILL_SACRIFICE    PETSKILL_SACRIFICE,           //(543)救援      vincent add 2002/05/30#endif#ifdef _SKILL_WEAKEN      PETSKILL_WEAKEN,              //(544)救援      vincent add 2002/07/11#endif#ifdef _SKILL_DEEPPOISON      PETSKILL_DEEPPOISON,          //(545)救援      vincent add 2002/07/16#endif#ifdef _SKILL_BARRIER      PETSKILL_BARRIER,             //(546)魔障      vincent add 2002/07/16#endif#ifdef _SKILL_ROAR     PETSKILL_ROAR,                //(548)大吼      vincent add 2002/07/11#endif#ifdef _SKILL_REFRESH    PETSKILL_REFRESH,           //(550)救援      vincent add 2002/08/08#endif#ifdef _VARY_WOLF	PETSKILL_VARY,#endif#ifdef _PETSKILL_SETDUCK	PETSKILL_SETDUCK,#endif#ifdef _MAGICPET_SKILL	PETSKILL_SETMAGICPET,#endif#ifdef _PETSKILL_BECOMEPIG    PETSKILL_BECOMEPIG,#endif#ifdef _PETSKILL_BATTLE_MODEL		PETSKILL_BATTLE_MODEL,#endif};static int gymbody[] = {	SPR_001em,SPR_011em,SPR_021em,SPR_031em,SPR_041em,SPR_051em,	SPR_061em,SPR_071em,SPR_081em,SPR_091em,SPR_101em,SPR_111em,

⌨️ 快捷键说明

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