battle_magic.c

来自「石器时代8.0服务端完整源代码。可以直接编译」· C语言 代码 · 共 1,963 行 · 第 1/5 页

C
1,963
字号
			    CHAR_setInt( toindex, CHAR_WATERAT, CHAR_getInt( toindex, CHAR_WATERAT )+10 );            else if( CHAR_getInt( toindex, CHAR_WINDAT ) == 100 )                CHAR_setInt( toindex, CHAR_WINDAT, CHAR_getInt( toindex, CHAR_WINDAT )-10 ),			    CHAR_setInt( toindex, CHAR_FIREAT, CHAR_getInt( toindex, CHAR_FIREAT )+10 );		    else if( CHAR_getInt( toindex, CHAR_EARTHAT ) > 0 && CHAR_getInt( toindex, CHAR_WATERAT ) > 0 )                CHAR_setInt( toindex, CHAR_EARTHAT, CHAR_getInt( toindex, CHAR_EARTHAT )+10 ),			    CHAR_setInt( toindex, CHAR_WATERAT, CHAR_getInt( toindex, CHAR_WATERAT )-10 );            else if( CHAR_getInt( toindex, CHAR_WATERAT ) > 0 && CHAR_getInt( toindex, CHAR_FIREAT ) > 0 )                CHAR_setInt( toindex, CHAR_WATERAT, CHAR_getInt( toindex, CHAR_WATERAT )+10 ),			    CHAR_setInt( toindex, CHAR_FIREAT, CHAR_getInt( toindex, CHAR_FIREAT )-10 );		    else if( CHAR_getInt( toindex, CHAR_FIREAT ) > 0 && CHAR_getInt( toindex, CHAR_WINDAT ) > 0 )                CHAR_setInt( toindex, CHAR_FIREAT, CHAR_getInt( toindex, CHAR_FIREAT )+10 ),			    CHAR_setInt( toindex, CHAR_WINDAT, CHAR_getInt( toindex, CHAR_WINDAT )-10 );            else if( CHAR_getInt( toindex, CHAR_WINDAT ) > 0 && CHAR_getInt( toindex, CHAR_EARTHAT ) > 0 )                CHAR_setInt( toindex, CHAR_WINDAT, CHAR_getInt( toindex, CHAR_WINDAT )+10 ),			    CHAR_setInt( toindex, CHAR_EARTHAT, CHAR_getInt( toindex, CHAR_EARTHAT )-10 );		}		}#endif		case BD_KIND_HP:#ifdef _TYPE_TOXICATION			if( CHAR_CanCureFlg( toindex, "HP") == FALSE ) continue;#endif		    // Robin 0728 ride Pet		    if( ridepet == -1 ) {				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;#ifdef _CHANGEITEMUSE	 // Syu ADD 调整战斗中使用料理设定		case BD_KIND_HP_MP:#ifdef _TYPE_TOXICATION			if( CHAR_CanCureFlg( toindex, "HP") == FALSE ) 				continue;#endif		    if( ridepet == -1 ) 			{				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				//	);		    }			UpPoint1 = RAND( (power1*0.9), (power1*1.1) );			if( per )			{				UpPoint1 *= CHAR_getWorkInt( toindex, CHAR_WORKMAXMP ) * 0.01;			}			workhp = CHAR_getInt( toindex, CHAR_MP );			oldhp = workhp;			workhp += (int)UpPoint1;			CHAR_setInt( toindex, CHAR_MP,			min( workhp, CHAR_getWorkInt( toindex, CHAR_WORKMAXMP ) ) );			//snprintf( szBuffer, sizeof(szBuffer),			//	"(%s)的气力回复(%d)",			//		CHAR_getUseName( toindex ),			//		UpPoint1);			break;#endif		}#ifdef _CHANGEITEMUSE	 // Syu ADD 调整战斗中使用料理设定		if ( kind == BD_KIND_HP_MP)		{			//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], BD_KIND_HP, Sign, Damage );#else				snprintf( szCommand, sizeof(szCommand),					"BD|r%X|%X|%X|d%X|p%X|", ToList[i], BD_KIND_HP, Sign, Damage, petDamage );#endif //_NOTRIDE_				BATTLESTR_ADD( szCommand );			}			{				//补气的部分				int Sign, Damage, petDamage;				Sign = (UpPoint1 >= 0)?(1):(0);				Damage = ABS( UpPoint1 );				petDamage = ABS( petUpPoint );#ifdef _NOTRIDE_				snprintf( szCommand, sizeof(szCommand),					"BD|r%X|%X|%X|d%X|", ToList[i], BD_KIND_MP, Sign, Damage );#else				snprintf( szCommand, sizeof(szCommand),					"BD|r%X|%X|%X|d%X|p%X|", ToList[i], BD_KIND_MP, Sign, Damage, petDamage );#endif //_NOTRIDE_				BATTLESTR_ADD( szCommand );			}		}		else		{			//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 );			}		}#else //_CHANGEITEMUSE		//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 );			}		}#endif //_CHANGEITEMUSE	}	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) 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;	}#ifdef _CHANGEITEMUSE	 // Syu ADD 调整战斗中使用料理设定	BATTLE_MultiRecovery( battleindex, attackNo, toNo,		BD_KIND_HP, (int)power,  per, MAGIC_EFFECT_USER, HealedEffect , 0);#else	BATTLE_MultiRecovery( battleindex, attackNo, toNo,		BD_KIND_HP, (int)power,  per, MAGIC_EFFECT_USER, HealedEffect );#endif	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 );

⌨️ 快捷键说明

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