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

📄 enemy.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 4 页
字号:
	SPR_002em,SPR_012em,SPR_022em,SPR_032em,SPR_042em,SPR_052em,	SPR_062em,SPR_072em,SPR_082em,SPR_092em,SPR_102em,SPR_112em,	SPR_003em,SPR_013em,SPR_023em,SPR_033em,SPR_043em,SPR_053em,	SPR_063em,SPR_073em,SPR_083em,SPR_093em,SPR_103em,SPR_113em,	SPR_004em,SPR_014em,SPR_024em,SPR_034em,SPR_044em,SPR_054em,	SPR_064em,SPR_074em,SPR_084em,SPR_094em,SPR_104em,SPR_114em,};/*------------------------------------------------------------------------ * ENEMY{卞仿件母丞卅    毛芨尹月 *-----------------------------------------------------------------------*/int ENEMY_RandomChange( int enemyindex, int tempno ){	int work, work2, iRet = 0;	// 仿件母丞平乓仿井升丹井民尼永弁	if( ( 564 <= tempno && tempno <= 580 )	||  ( 739 <= tempno && tempno <= 750 )	||  ( 895 <= tempno && tempno <= 906 )	){		//********************************************		// 皿伊奶乩□及涌		//********************************************		iRet = 1;	}else	// 仿件母丞平乓仿井升丹井民尼永弁	if( ( 655 <= tempno && tempno <= 720 )	||  ( 859 <= tempno && tempno <= 894 )	||  ( 907 <= tempno && tempno <= 940 )	){		//********************************************		// 矢永玄及涌		//********************************************		iRet = 2;	}else{		return 0;	}	if( iRet == 1 ){		//********************************************		//		// 皿伊奶乩□及涌仄凶衬卅及匹}箪岭手仿件母丞		//		//********************************************		// 铣手仿件母丞		CHAR_setInt( enemyindex, CHAR_BASEBASEIMAGENUMBER,			gymbody[RAND( 0, arraysizeof( gymbody ) - 1)] );		CHAR_setInt( enemyindex, CHAR_BASEIMAGENUMBER,			CHAR_getInt( enemyindex, CHAR_BASEBASEIMAGENUMBER ) );		// 箪岭反赝癫		work = ( RAND( 0, 20 ) - 10 ) * 10;		work2 = 100 - ABS( work );		CHAR_setInt( enemyindex, CHAR_EARTHAT, work );		CHAR_setInt( enemyindex, CHAR_FIREAT,  -work );		if( RAND( 0, 1 ) ){			work2 *= -1;		}		CHAR_setInt( enemyindex, CHAR_WATERAT, work2 );		CHAR_setInt( enemyindex, CHAR_WINDAT,  -work2 );		// 仿件母丞卅  湛毛  凶六月		if( DoujyouRandomWeponSet( enemyindex ) ){			//   溃  湛及桦宁反骚橘  猾毛勾仃月			CHAR_setPetSkill( enemyindex, 0, PETSKILL_NORMALATTACK );			CHAR_setPetSkill( enemyindex, 1, PETSKILL_NORMALATTACK );		}else{			//   溃  湛元扎卅中及匹  勾仃月			//   毛尥仃月			CHAR_setPetSkill( enemyindex, 0,				EnemyGymSkill[RAND( 0, arraysizeof( EnemyGymSkill ) - 1 )] );			//   毛尥仃月			CHAR_setPetSkill( enemyindex, 1,				EnemyGymSkill[RAND( 0, arraysizeof( EnemyGymSkill ) - 1 )] );		}	}else	if( iRet == 2 ){		//   溃  湛元扎卅中及匹  勾仃月		//   毛尥仃月		CHAR_setPetSkill( enemyindex, 0,			EnemyGymSkill[RAND( 0, arraysizeof( EnemyGymSkill ) - 1 )] );		//   毛尥仃月		CHAR_setPetSkill( enemyindex, 1,			EnemyGymSkill[RAND( 0, arraysizeof( EnemyGymSkill ) - 1 )] );	}	return 1;}/*------------------------------------------------------------------------ * ENEMY_enemy井日平乓仿弁正□毛综岳允月[ *-----------------------------------------------------------------------*/int ENEMY_createEnemy( int array, int baselevel ){    Char    CharNew;    int newindex;    int     *p;    int		tp[E_T_DATAINTNUM];    int		tarray, i;	int itemindex,iloop;	int		level;	int	enemyrank;    if( !ENEMY_CHECKINDEX( array)) return -1;    p = ENEMY_enemy[array].intdata;    tarray = ENEMYTEMP_getEnemyTempArray( array);	if( !ENEMYTEMP_CHECKINDEX( tarray)) return -1;//    tp = ENEMYTEMP_enemy[tarray].intdata;	// 犯□正戊疋□	for( i = 0; i < E_T_DATAINTNUM; i ++ ){	    tp[i] = ENEMYTEMP_enemy[tarray].intdata[i];	}    //     赓渝祭    memset( &CharNew, 0, sizeof( Char ) );    if( !CHAR_getDefaultChar( &CharNew,31010 ) )return -1;    /*    飓  寞    */    CharNew.data[CHAR_BASEBASEIMAGENUMBER]        = CharNew.data[CHAR_BASEIMAGENUMBER] = *(tp+E_T_IMGNUMBER);    /*  衬匹丐月午涩烂允月   */    CharNew.data[CHAR_WHICHTYPE] = CHAR_TYPEENEMY;    /*     毛壅允 */    CharNew.data[CHAR_DUELPOINT] = 0;	/* 伊矛伙毛瑁烂允月[ */	if( baselevel > 0 ){		level = baselevel;	// 伊矛伙裔烂	}else{		level = RAND( (*(p + ENEMY_LV_MIN)), (*(p+ ENEMY_LV_MAX)));	}#define		E_PAR( a)		(*(p + (a)))#define		ET_PAR( a)		(*(tp + (a)))/* 由仿丢□正隙醒井日  端及湘  由仿丢□正尺及煌遥挚 */#if 1#define		PARAM_CAL( l) 	( ( level -1)*ET_PAR( E_T_LVUPPOINT)+ ET_PAR(E_T_INITNUM)) * ET_PAR( (l))#else#define		PARAM_CAL( l) 	( (E_PAR(ENEMY_LV) -1)*ET_PAR( E_T_LVUPPOINT)+ ET_PAR(E_T_INITNUM)) * ET_PAR( (l))#endif	/* 燮内湘  喃曰蕊曰禾奶件玄卞+ㄡ毛仿件母丞匹垫丹 */	tp[E_T_BASEVITAL] += RAND( 0, 4 ) - 2;	tp[E_T_BASESTR] += RAND( 0, 4 ) - 2;	tp[E_T_BASETGH] += RAND( 0, 4 ) - 2;	tp[E_T_BASEDEX] += RAND( 0, 4 ) - 2;	/* 仇及凛鳔匹喃曰蕊曰禾奶件玄毛忡绣仄化云仁 */    CharNew.data[CHAR_ALLOCPOINT]    = ( tp[E_T_BASEVITAL] << 24 )    + ( tp[E_T_BASESTR] << 16 )    + ( tp[E_T_BASETGH] << 8 )    + ( tp[E_T_BASEDEX] << 0 );	/* 公及  }仿件母丞匹禾奶件玄毛ㄠ勿勾笛遥[仇木毛ㄠㄟ荚楞曰忒允[*/	for( i = 0; i < 10; i ++ ){		int work = RAND( 0, 3 );		if( work == 0 )tp[E_T_BASEVITAL]++;		if( work == 1 )tp[E_T_BASESTR]++;		if( work == 2 )tp[E_T_BASETGH]++;		if( work == 3 )tp[E_T_BASEDEX]++;	}    /* 由仿丢□正本永玄 */    CharNew.data[CHAR_VITAL]    = PARAM_CAL(E_T_BASEVITAL);    CharNew.data[CHAR_STR]      = PARAM_CAL(E_T_BASESTR);    CharNew.data[CHAR_TOUGH]    = PARAM_CAL(E_T_BASETGH);    CharNew.data[CHAR_DEX]      = PARAM_CAL(E_T_BASEDEX);    CharNew.data[CHAR_FIREAT]   = *(tp+ E_T_FIREAT);    CharNew.data[CHAR_WATERAT]  = *(tp+ E_T_WATERAT);    CharNew.data[CHAR_EARTHAT]  = *(tp+ E_T_EARTHAT);    CharNew.data[CHAR_WINDAT]   = *(tp+ E_T_WINDAT);    CharNew.data[CHAR_MODAI]    = *(tp+ E_T_MODAI);    CharNew.data[CHAR_VARIABLEAI]    = 0;	CharNew.data[CHAR_LV]       = level;	//CharNew.data[CHAR_LV]       = *(p+ ENEMY_LV);    CharNew.data[CHAR_SLOT]     = *(tp+ E_T_SLOT);    CharNew.data[CHAR_POISON]   = *(tp+ E_T_POISON);    CharNew.data[CHAR_PARALYSIS]= *(tp+ E_T_PARALYSIS);    CharNew.data[CHAR_SLEEP]	= *(tp+ E_T_SLEEP);    CharNew.data[CHAR_STONE]	= *(tp+ E_T_STONE);    CharNew.data[CHAR_DRUNK]	= *(tp+ E_T_DRUNK);    CharNew.data[CHAR_CONFUSION]= *(tp+ E_T_CONFUSION);	CharNew.data[CHAR_RARE]		= *(tp+ E_T_RARE);	CharNew.data[CHAR_PETID]	= *(tp + E_T_TEMPNO);	CharNew.data[CHAR_CRITIAL]	= *(tp + E_T_CRITICAL);	CharNew.data[CHAR_COUNTER]	= *(tp + E_T_COUNTER);		for( i = 0; i < CHAR_MAXPETSKILLHAVE; i ++ ) {		CharNew.unionTable.indexOfPetskill[i] = *(tp + E_T_PETSKILL1 + i);	}	enemyrank = ENEMY_getRank( array, tarray );	CharNew.data[CHAR_PETRANK]	= enemyrank;#undef	E_PAR#undef	ET_PAR#undef	PARAM_CAL	CharNew.data[CHAR_DUELPOINT] = *( p + ENEMY_DUELPOINT);	if( *( p + ENEMY_DUELPOINT) <= 0 ) {		if( *(p + ENEMY_EXP) != -1 ) {		    CharNew.data[CHAR_EXP]      = *( p+ENEMY_EXP);		}else {		    CharNew.data[CHAR_EXP]      = ENEMY_getExp( array,tarray,level, enemyrank);		}	}    strcpysafe( CharNew.string[CHAR_NAME].string,                sizeof(CharNew.string[CHAR_NAME].string),                (char *)ENEMYTEMP_enemy[tarray].chardata[E_T_NAME].string );    newindex = CHAR_initCharOneArray( &CharNew );    if( newindex < 0 ){        return -1;    }	for( iloop=0; iloop< (ENEMY_ITEMPROB10 - ENEMY_ITEM1+1)/2; iloop++){		if( *(p+ENEMY_ITEMPROB1+iloop) != 0) {#ifdef _FIX_ITEMPROB			if( RAND( 0,999) < *(p+ENEMY_ITEMPROB1+iloop)){#else			if( RAND( 0,99) < *(p+ENEMY_ITEMPROB1+iloop)){#endif				itemindex = ITEM_makeItemAndRegist(  *(p+ENEMY_ITEM1+iloop) );				CHAR_setItemIndex( newindex, CHAR_STARTITEMARRAY +iloop, itemindex);				ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, newindex );		        ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX,-1);			}		}	}	{ int style, wepon = -1;		style = (*(p + ENEMY_STYLE));		switch( style ){		case 1:		wepon = 0;break;	//   		case 2:		wepon = 100;break;  // 轺徇		case 3:		wepon = 200;break;	// 键		case 4:		wepon = 400;break;	// 菰		case 5:		wepon = 500;break;	// 皮□丢仿件		case 6:		wepon = 700;break;  // 髑仆檗		case 7:		wepon = 600;break;	// 髑仆  		default:break;		}		if( wepon >= 0 ){			itemindex = ITEM_makeItemAndRegist( wepon ) ;			CHAR_setItemIndex( newindex, CHAR_ARM, itemindex );			ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, newindex );	        ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX,-1);		}	}	ENEMY_RandomChange( newindex, *( p+ENEMY_ID) );    CHAR_complianceParameter( newindex );	CHAR_setInt( newindex, CHAR_HP, CHAR_getWorkInt( newindex, CHAR_WORKMAXHP));	CHAR_setWorkInt( newindex, CHAR_WORKTACTICS, *(p+ENEMY_TACTICS));	CHAR_setWorkChar( newindex, CHAR_WORKBATTLE_TACTICSOPTION,                		ENEMY_enemy[array].chardata[ENEMY_TACTICSOPTION].string );#ifdef _BATTLENPC_WARP_PLAYER		CHAR_setWorkChar( newindex, CHAR_WORKBATTLE_ACT_CONDITION,                		ENEMY_enemy[array].chardata[ENEMY_ACT_CONDITION].string );#endif	CHAR_setWorkInt( newindex, CHAR_WORK_PETFLG, *(p+ENEMY_PETFLG));	CHAR_setWorkInt( newindex, CHAR_WORKMODCAPTUREDEFAULT, *(tp + E_T_GET));#ifdef _ENEMY_FALLGROUND	{		int i=0;		for( i=0;i<arraysizeof( ridePetTable);i++)	{						if( CHAR_getInt( newindex, CHAR_BASEBASEIMAGENUMBER) == ridePetTable[i].rideNo )	{				CHAR_setInt( newindex, CHAR_BASEBASEIMAGENUMBER, ridePetTable[i].charNo );				CHAR_setInt( newindex, CHAR_BASEIMAGENUMBER, ridePetTable[i].rideNo );				break;			}		}	}#endif#ifdef _PETSKILL_BECOMEFOX //将媚惑术中招时间清除为-1     CHAR_setWorkInt( newindex, CHAR_WORKFOXROUND, -1 ); #endif    return newindex;}#define RANDOMENEMY_TOP		945#define RANDOMENEMY_END		956static int RandomHuman945[] = {739,742,745,748};static int RandomPet946[] = {859,860,861,868,869,870,881,882,883,884};static int RandomPet964[] = {859,860,861,868,869,870,881,882,883,884};static int RandomHuman947[] = {740,743,746,749};static int RandomPet948[] = {864,871,872,873,885,886,889,890,891,892,893,894};static int RandomPet965[] = {864,871,872,873,885,886,889,890,891,892,893,894};static int RandomHuman949[] = {741,744,747,750};static int RandomPet950[] = {862,863,865,866,867,874,875,876,877,878,879,880};static int RandomPet966[] = {862,863,865,866,867,874,875,876,877,878,879,880};static int RandomHuman951[] = {895,898,901,904};static int RandomPet952[] = {912,913,914,915,916,917,918,919,920,928};static int RandomPet967[] = {912,913,914,915,916,917,918,919,920,928};static int RandomHuman953[] = {896,899,902,905};static int RandomPet954[] = {929,930,931,932,933,934,935,936,937,938,939,940};static int RandomPet968[] = {929,930,931,932,933,934,935,936,937,938,939,940};static int RandomHuman955[] = {897,900,903,906};static int RandomPet956[] = {907,908,909,910,911,921,922,923,924,925,926,927};static int RandomPet969[] = {907,908,909,910,911,921,922,923,924,925,926,927};typedef struct {	int num;	int *pTbl;	int arraysize;}RANDOMENEMY;static RANDOMENEMY RandomEnemyTbl[] = {	{ 945, RandomHuman945, arraysizeof( RandomHuman945 ) },	{ 946, RandomPet946,	arraysizeof( RandomPet946 ) },	{ 947, RandomHuman947, arraysizeof( RandomHuman947 ) },	{ 948, RandomPet948, arraysizeof( RandomPet948 ) },	{ 949, RandomHuman949, arraysizeof( RandomHuman949 ) },	{ 950, RandomPet950, arraysizeof( RandomPet950 ) },	{ 951, RandomHuman951, arraysizeof( RandomHuman951 ) },	{ 952, RandomPet952, arraysizeof( RandomPet952 ) },	{ 953, RandomHuman953, arraysizeof( RandomHuman953 ) },	{ 954, RandomPet954, arraysizeof( RandomPet954 ) },	{ 955, RandomHuman955, arraysizeof( RandomHuman955 ) },	{ 956, RandomPet956, arraysizeof( RandomPet956 ) },	{ 964, RandomPet964, arraysizeof( RandomPet964 ) },	{ 965, RandomPet965, arraysizeof( RandomPet965 ) },	{ 966, RandomPet966, arraysizeof( RandomPet966 ) },	{ 967, RandomPet967, arraysizeof( RandomPet967 ) },	{ 968, RandomPet968, arraysizeof( RandomPet968 ) },	{ 969, RandomPet969, arraysizeof( RandomPet969 ) },};/*------------------------------------------------------------ * 衬    涩烂及摹    寞互  溃卅袄卅日仿件母丞卞涩烂允月 ------------------------------------------------------------*/int ENEMY_RandomEnemyArray( int e_array, int *pNew ){	int i = 0, randwork, work;//	RANDOMENEMY *pRandomEnemy;	*pNew = -1;	// 仇及  区反仿件母丞	if(		( RANDOMENEMY_TOP <= e_array && e_array <= RANDOMENEMY_END )	||	( 964 <= e_array && e_array <= 969 )	){		// 升及母立□井譬屯月		for( i = 0; i < arraysizeof( RandomEnemyTbl ); i ++ ){			if( RandomEnemyTbl[i].num == e_array ){				break;			}		}		//   区毛译尹化中凶日巨仿□匹  仃月		if( i >= arraysizeof( RandomEnemyTbl ) ) return 0;		// 仿件母丞涩烂		randwork = RAND( 0, RandomEnemyTbl[i].arraysize - 1 );		//     井日蕙仄中  寞毛潸  		work = RandomEnemyTbl[i].pTbl[randwork];		*pNew = ENEMY_getEnemyArrayFromId( work );		return 1;	}else{		// 窒仪手卅中		return 0;	}}int *ENEMY_getEnemy( int charaindex, int x, int y){    int     i;    int		array;    int		g_array;    int		e_array;    int     found = 0;    int		work[ENEMY_INDEXTABLEMAXSIZE];    int		wr[ENEMY_INDEXTABLEMAXSIZE];    int		createenemynum;    int		enemyentrymax;    int		entrymax;    int		r_max;    int		groupid;	int		bigcnt;	int		loopcounter;    array = ENCOUNT_getEncountAreaArray( CHAR_getInt( charaindex, CHAR_FLOOR),x,y);	if( array == -1 ) return NULL;    enemyentrymax = ENCOUNT_getCreateEnemyMaxNumFromArray( array);    if( enemyentrymax == -1 ) {    	return NULL;    }    for( i = 0 ; i < ENEMY_INDEXTABLEMAXSIZE; i ++ ) {        work[i] = -1;		wr[i] = -1;        ENEMY_indextable[i] = -1;    }	r_max= 0;	for( i = 0; i < ENCOUNT_GROUPMAXNUM; i ++ ){		if( ENCOUNT_getGroupIdFromArray( array, i ) != - 1 ) {			int		itemid;			groupid = ENCOUNT_getGroupIdFromArray( array, i);			g_array = GROUP_getGroupArray( groupid);            itemid = GROUP_getInt( g_array, GROUP_APPEARBYITEMID);            if( itemid != -1 ) {            	int		j;            	for( j = 0; j < CHAR_MAXITEMHAVE; j ++ ) {            		int itemindex = CHAR_getItemIndex( charaindex, j);            		if( ITEM_CHECKINDEX( itemindex)) {            			if( ITEM_getInt( itemindex, ITEM_ID) == itemid){            				break;            			}            		}            	}            	if( j == CHAR_MAXITEMHAVE ) continue;            }            itemid = GROUP_getInt( g_array, GROUP_NOTAPPEARBYITEMID);            if( itemid != -1 ) {            	int		j;            	for( j = 0; j < CHAR_MAXITEMHAVE; j ++ ) {            		int itemindex = CHAR_getItemIndex( charaindex, j);            		if( ITEM_CHECKINDEX( itemindex)) {            			if( ITEM_getInt( itemindex, ITEM_ID) == itemid){            				break;            			}            		}            	}            	if( j != CHAR_MAXITEMHAVE ) continue;            }			work[found] = i;            wr[found] = ENCOUNT_getGroupProbFromArray( array, i);            r_max += wr[found];			found ++;		}	}	r_max --;	if( found <= 0 ) return NULL;	{

⌨️ 快捷键说明

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