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

📄 battle_magic.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 5 页
字号:
				UpPoint = RAND( (power*0.9), (power*1.1) );#ifdef _MAGIC_REHPAI#else				if( per ){					UpPoint *= CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) * 0.01;				}				UpPoint *= GetRecoveryRate( toindex );#endif				workhp = CHAR_getInt( toindex, CHAR_HP );				oldhp = workhp; 				workhp += (int)UpPoint;				CHAR_setInt( toindex, CHAR_HP,				min( workhp, CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) ) );								//snprintf( szBuffer, sizeof(szBuffer), "(%s)的耐久力回复(%d)", CHAR_getUseName( toindex ), UpPoint );		    }else {				int allUpPoint;				UpPoint = RAND( (power*0.9), (power*1.1) );#ifdef _MAGIC_REHPAI				allUpPoint = UpPoint;				UpPoint = (allUpPoint * Magic_RideGetHP( toindex, ridepet, 1 ))/100;				petUpPoint = allUpPoint - UpPoint;#else						petUpPoint = UpPoint;				if( per ){					UpPoint *= CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) * 0.01;					petUpPoint *= CHAR_getWorkInt( ridepet, CHAR_WORKMAXHP ) * 0.01;									}				UpPoint *= GetRecoveryRate( toindex );				petUpPoint *= GetRecoveryRate( ridepet );#endif				allUpPoint = UpPoint + petUpPoint;#ifdef _MAGIC_REHPAI#else				UpPoint = (UpPoint * UpPoint) / allUpPoint;				petUpPoint = (petUpPoint * petUpPoint) / allUpPoint;#endif				workhp = CHAR_getInt( toindex, CHAR_HP );				oldhp = workhp;				workhp += (int)UpPoint;				CHAR_setInt( toindex, CHAR_HP,					min( workhp, CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) ) );				workhp = CHAR_getInt( ridepet, CHAR_HP );				oldhp = workhp;				workhp += (int)petUpPoint;				CHAR_setInt( ridepet, CHAR_HP,				min( workhp, CHAR_getWorkInt( ridepet, CHAR_WORKMAXHP ) ) );							//snprintf( szBuffer, sizeof(szBuffer),				//	"(%s)的耐久力回复(%d),(%s的骑宠)的耐久力回复(%d)",				//		CHAR_getUseName( toindex ),				//		UpPoint,				//		CHAR_getUseName( toindex ),				//		petUpPoint				//	);		    }		    break;		case BD_KIND_MP:			UpPoint = RAND( (power*0.9), (power*1.1) );			if( per ){				UpPoint *= CHAR_getWorkInt( toindex, CHAR_WORKMAXMP ) * 0.01;			}			workhp = CHAR_getInt( toindex, CHAR_MP );			oldhp = workhp;			workhp += (int)UpPoint;			CHAR_setInt( toindex, CHAR_MP,			min( workhp, CHAR_getWorkInt( toindex, CHAR_WORKMAXMP ) ) );			//snprintf( szBuffer, sizeof(szBuffer),			//	"(%s)的气力回复(%d)",			//		CHAR_getUseName( toindex ),			//		UpPoint			//	);			break;		}		//BATTLE_BroadCast( battleindex, szBuffer,		//	(attackNo >= 10)? CHAR_COLORGRAY : CHAR_COLORPURPLE ) ;		{			int Sign, Damage, petDamage;			Sign = (UpPoint >= 0)?(1):(0);			Damage = ABS( UpPoint );			petDamage = ABS( petUpPoint );#ifdef _NOTRIDE_			snprintf( szCommand, sizeof(szCommand),				"BD|r%X|%X|%X|d%X|", ToList[i], kind, Sign, Damage );#else			snprintf( szCommand, sizeof(szCommand),				"BD|r%X|%X|%X|d%X|p%X|", ToList[i], kind, Sign, Damage, petDamage );#endif //_NOTRIDE_			BATTLESTR_ADD( szCommand );		}		if( BattleArray[battleindex].norisk == 0		&&  CHAR_getInt( toindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET){			flg = CHAR_getWorkInt( toindex, CHAR_WORKBATTLEFLG );			if(  flg & CHAR_BATTLEFLG_RECOVERY ){			}else{				CHAR_PetAddVariableAi( toindex, AI_FIX_PETRECOVERY );				CHAR_setWorkInt( toindex, CHAR_WORKBATTLEFLG, flg | CHAR_BATTLEFLG_RECOVERY );			}		}	}	return;}#ifdef _MAGIC_REHPAIint Magic_RideGetHP( int toindex, int petindex, int flg){	int allDHp=1;	int petDHp=1;	int CharDHp=1;	int ISIZE = 100;	CharDHp	= CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) - CHAR_getInt( toindex, CHAR_HP);	petDHp	= CHAR_getWorkInt( petindex, CHAR_WORKMAXHP ) - CHAR_getInt( petindex, CHAR_HP);	allDHp = (CharDHp + petDHp);	if( allDHp <= 0 ) allDHp=1;	if( flg == 1)		return (int)((CharDHp*ISIZE)/allDHp);	else		return (int)((petDHp*ISIZE)/allDHp);}#endifint	MAGIC_Recovery_Battle( int charaindex, int toNo, int marray, int mp ){	char *magicarg;	float power;	int battleindex, attackNo, 	HealedEffect = 0, per = 0;	int range;	if( !CHAR_CHECKINDEX( charaindex) )	return FALSE;	battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );	attackNo = BATTLE_Index2No( battleindex, charaindex );#if 1	// Robin fix 防封包改Magic范围	range = MAGIC_getInt( marray, MAGIC_TARGET );	//print(" MAGIC_TARGET:%d toNo:%d ", range, toNo);	if( range == 0 && toNo != attackNo ) { // 只能对自己使用//		print("\n 改封包!MAGIC只能对自己使用!!:%s ", CHAR_getChar( charaindex, CHAR_CDKEY) );		return FALSE;	}	if( range == 1 && toNo >= 20 ) { // 只能对单体使用//		print("\n 改封包!MAGIC只能对单体使用!!:%s ", CHAR_getChar( charaindex, CHAR_CDKEY) );		return FALSE;	}#endif	// shan(对全体使用魔法的bug),修改者jinchao+2001/12/07	if( BATTLE_CHECKINDEX( battleindex ) == FALSE ) return FALSE;	magicarg = MAGIC_getChar( marray, MAGIC_OPTION );	// shan(对全体使用魔法的bug),修改者jinchao+2001/12/07	if (magicarg == "\0") return FALSE;	power =	atoi( magicarg );	if( strstr( magicarg, "%" ) ){		per = 1;	}		if( power <= 100 ){		HealedEffect = SPR_heal;	}else	if( power <= 300 ){		HealedEffect = SPR_heal2;	}else{		HealedEffect = SPR_heal3;	}	BATTLE_MultiRecovery( battleindex, attackNo, toNo,BD_KIND_HP, (int)power,  per, MAGIC_EFFECT_USER, HealedEffect );	return TRUE;}void BATTLE_MultiResAndDef( 	int battleindex, 	// 田玄伙奶件犯永弁旦	int attackNo,		// 井仃月谛  寞	int toNo,			// 井仃日木月谛  寞	int power,			// 湘  荚汊袄	int per,			// ⊙井"	int kind, 			//   芊  豢及潘  	int count, 			// 窒荚  什井	int UseEffect,		// 银丹谛及巨白尼弁玄	int RecevEffect		// 井仃日木月谛及巨白尼弁玄){	int i, toindex, charaindex, UpPoint = 0, workhp;	int ToList[SIDE_OFFSET*2+1];	//char szBuffer[256]="";	char szCommand[256];	BATTLE_MultiListDead( battleindex, toNo, ToList );	BATTLE_MagicEffect(		battleindex, 			// 田玄伙奶件犯永弁旦		attackNo, 				// 井仃月谛  寞(ㄟ  ㄠㄨ)		ToList, 				// 井仃日木月谛  寞伉旦玄(ㄟ  ㄠㄨ)		UseEffect, 				// 井仃月谛巨白尼弁玄		RecevEffect				// 井仃日木月谛巨白尼弁玄	);	charaindex = BATTLE_No2Index( battleindex, attackNo );	for( i = 0; ToList[i] != -1; i ++ ){		toindex = BATTLE_No2Index( battleindex, ToList[i] );		if( BattleArray[battleindex].type == BATTLE_TYPE_P_vs_P		&& CHAR_getInt( toindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER){			continue;		}		if( CHAR_getFlg( toindex, CHAR_ISDIE ) == FALSE ){			continue;		}		UpPoint = power;#ifdef _MAGIC_REHPAI#else		if( per ){			UpPoint *= CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) * 0.01;		}#endif		if( power == 0 ){			UpPoint = CHAR_getWorkInt( toindex, CHAR_WORKMAXHP );		}else{			UpPoint = RAND( (power*0.9), (power*1.1) );		}		UpPoint = max( 1, UpPoint );		workhp = CHAR_getInt( toindex, CHAR_HP ) + UpPoint;		CHAR_setInt( toindex, CHAR_HP,			min( workhp, CHAR_getWorkInt( toindex, CHAR_WORKMAXHP ) ) );		CHAR_setFlg( toindex, CHAR_ISDIE, 0 );		CHAR_setWorkInt( toindex, MagicDefTbl[kind], count );		//snprintf( szBuffer, sizeof(szBuffer),		//	"(%s)恢复意识",		//		CHAR_getUseName( toindex ) );		//snprintf( szBuffer, sizeof(szBuffer),		//	"(%s)将(%s)遭受(损伤%s)",		//	CHAR_getUseName( charaindex ),		//	CHAR_getUseName( toindex ),		//	aszMagicDefFull[kind]		//);		//BATTLE_BroadCast( battleindex, szBuffer,		//	(attackNo >= 10)? CHAR_COLORGRAY : CHAR_COLORPURPLE ) ;		snprintf( szCommand, sizeof(szCommand),				"BL|r%X|h%X|", ToList[i], CHAR_getInt( toindex, CHAR_HP ) );		BATTLESTR_ADD( szCommand );		if( BattleArray[battleindex].norisk == 0		 &&	BattleArray[battleindex].type == BATTLE_TYPE_P_vs_E	 ){			if( CHAR_getInt( toindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET ){				CHAR_PetAddVariableAi( toindex, AI_FIX_PETRESSURECT );			}		}	}}#ifdef _ATTACK_MAGICstatic int CharTable[4][5] ={   { 13 , 11 , 10 , 12 , 14 } ,   { 18 , 16 , 15 , 17 , 19 } ,   {  8 ,  6 ,  5 ,  7 ,  9 } ,   {  3 ,  1 ,  0 ,  2 ,  4 }};static int CharTableIdx[20][2] ={   { 3 , 2 } , { 3 , 1 } , { 3 , 3 } , { 3 , 0 } , { 3 , 4 } ,   { 2 , 2 } , { 2 , 1 } , { 2 , 3 } , { 2 , 0 } , { 2 , 4 } ,   { 0 , 2 } , { 0 , 1 } , { 0 , 3 } , { 0 , 0 } , { 0 , 4 } ,   { 1 , 2 } , { 1 , 1 } , { 1 , 3 } , { 1 , 0 } , { 1 , 4 }};typedef int ( *FUNC )( const void* , const void* );static int SortLoc( const int *pEle1 , const int *pEle2 ){   int ele1basex , ele1basey;   int ele2basex , ele2basey;   ele1basex = CharTableIdx[*pEle1][1];   ele1basey = CharTableIdx[*pEle1][0];   ele2basex = CharTableIdx[*pEle2][1];   ele2basey = CharTableIdx[*pEle2][0];   // 左上方   if( *pEle1 >= 10 )   {      if( ele1basey != ele2basey )         return ( ele1basey - ele2basey );      return ( ele1basex - ele2basex );   }   // 右下方   else   {      if( ele1basey != ele2basey )         return ( ele2basey - ele1basey );      return ( ele2basex - ele1basey );   }   return 0;}static void BATTLE_GetAttr( int charaindex , int *pAt_Fire , int *pAt_Water , int *pAt_Earth , int *pAt_Wind , int *pAt_None ){   int petindex = BATTLE_getRidePet( charaindex );   if( petindex == -1 )   {        *pAt_Fire  = CHAR_getWorkInt( charaindex , CHAR_WORKFIXFIREAT );        *pAt_Water = CHAR_getWorkInt( charaindex , CHAR_WORKFIXWATERAT );        *pAt_Earth = CHAR_getWorkInt( charaindex , CHAR_WORKFIXEARTHAT );        *pAt_Wind  = CHAR_getWorkInt( charaindex , CHAR_WORKFIXWINDAT );   }   else   {        *pAt_Fire  = ( CHAR_getWorkInt( charaindex , CHAR_WORKFIXFIREAT )                   + CHAR_getWorkInt( petindex , CHAR_WORKFIXFIREAT ) ) / 2;        *pAt_Water = ( CHAR_getWorkInt( charaindex , CHAR_WORKFIXWATERAT )                   + CHAR_getWorkInt( petindex , CHAR_WORKFIXWATERAT ) ) / 2;        *pAt_Earth = ( CHAR_getWorkInt( charaindex , CHAR_WORKFIXEARTHAT )                   + CHAR_getWorkInt( petindex , CHAR_WORKFIXEARTHAT ) ) / 2;        *pAt_Wind  = ( CHAR_getWorkInt( charaindex , CHAR_WORKFIXWINDAT )                   + CHAR_getWorkInt( petindex , CHAR_WORKFIXWINDAT ) ) / 2;   }   if( *pAt_Fire < 0 )  *pAt_Fire  = 0;   if( *pAt_Water < 0 ) *pAt_Water = 0;   if( *pAt_Earth < 0 ) *pAt_Earth = 0;   if( *pAt_Wind < 0 )  *pAt_Wind  = 0;   *pAt_None = 100 - *pAt_Fire - *pAt_Water - *pAt_Earth - *pAt_Wind;   if( *pAt_None < 0 )      *pAt_None = 0;}static void BATTLE_GetPureAttr( int charaindex , int *pAt_Fire , int *pAt_Water, int *pAt_Earth , int *pAt_Wind ){   *pAt_Fire  = CHAR_getWorkInt( charaindex , CHAR_WORKFIXFIREAT );   *pAt_Water = CHAR_getWorkInt( charaindex , CHAR_WORKFIXWATERAT );   *pAt_Earth = CHAR_getWorkInt( charaindex , CHAR_WORKFIXEARTHAT );   *pAt_Wind  = CHAR_getWorkInt( charaindex , CHAR_WORKFIXWINDAT );   if( *pAt_Fire < 0 )  *pAt_Fire  = 0;   if( *pAt_Water < 0 ) *pAt_Water = 0;   if( *pAt_Earth < 0 ) *pAt_Earth = 0;   if( *pAt_Wind < 0 )  *pAt_Wind  = 0;}int BATTLE_CalAttMagicEffect( int AttEle , int DefPosEleValue , int DefNegEleValue ){    int value;    value = ( 100 * DefPosEleValue - 100 * DefNegEleValue ) / 1000;    if( value > 10 )        return 10;    else if( value < -10 )        return -10;    return value;}int BATTLE_CalcCharaRatio( int AttEle , int charaidx ){   int petidx , charahurt , pethurt;   int charaattr[4] , petattr[4];   // 没有宠物   if( -1 == ( petidx = BATTLE_getRidePet( charaidx ) ) )      return 10;   // Nuke 20040330: Fix bug   if ( -1 == AttEle )       return 5;   BATTLE_GetPureAttr( charaidx , &charaattr[2] , &charaattr[1] , &charaattr[0], &charaattr[3] );   BATTLE_GetPureAttr( petidx , &petattr[2] , &petattr[1] , &petattr[0] , &petattr[3] );   //print("\nAttEle: %d %d %d %d %d ",AttEle, charaattr[( AttEle + 1 ) % 4], charaattr[AttEle],petattr[( AttEle + 1 ) %4] , petattr[AttEle]);   charahurt = 20 + BATTLE_CalAttMagicEffect( AttEle , charaattr[( AttEle + 1 ) % 4] , charaattr[AttEle] );

⌨️ 快捷键说明

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