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

📄 battle_event.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 5 页
字号:
			level = 3;		}		if( level != crushlevel && defs < 70 )	{			ITEM_setInt( itemindex, ITEM_CRUSHLEVEL, level);//			for( i = 0; i < arraysizeof( ItemBreakPos ); i ++ ){//				work = ITEM_getInt( itemindex, ItemBreakPos[i] );//				if( work <= 0 )continue;//				work *=0.95;//				ITEM_setInt( itemindex, ItemBreakPos[i], work );//			}			sprintf( szBuffer, "%s是%s的。",			ITEM_getChar( itemindex, ITEM_NAME ), aszCrushTbl[level] );			CHAR_talkToCli( charaindex, -1, szBuffer, CHAR_COLORRED);			//更改道具说明//			buf1 = ITEM_getChar( itemindex, ITEM_SECRETNAME);//			if( strstr( buf1, "(") != 0 )	{//				char buf5[256];//				if( getStringFromIndexWithDelim( buf1,"(",1, buf5, sizeof( buf5)) != FALSE )	{//					sprintf( buf1, buf5);//				}//			}//			sprintf( buf2, "%s(%s)", buf1, aszCrushTbl[level]);//			ITEM_setChar( itemindex, ITEM_SECRETNAME, buf2);		}	}   	CHAR_sendItemDataOne( charaindex, ItemEquip );	CHAR_complianceParameter( charaindex );	CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_ATK | CHAR_P_STRING_DEF 		| CHAR_P_STRING_QUICK | CHAR_P_STRING_CHARM );	return TRUE;}#elseint BATTLE_ItemCrush( int charaindex ){	int EquipTbl[CHAR_EQUIPPLACENUM], i, itemindex, rndwork, type;	int work, crushlevel, j, ItemEquip;	char szBuffer[256]="";	int	ItemBreakPos[] = {	    ITEM_ATTACKNUM_MIN,    	ITEM_ATTACKNUM_MAX,	    ITEM_MODIFYATTACK,    	ITEM_MODIFYDEFENCE,	    ITEM_MODIFYQUICK,    	ITEM_MODIFYHP,	    ITEM_MODIFYMP,    	ITEM_MODIFYLUCK,	    ITEM_MODIFYCHARM,    	ITEM_MODIFYAVOID,	};	for( j = 0, i = 0; i < CHAR_EQUIPPLACENUM; i ++ ){		itemindex = CHAR_getItemIndex( charaindex, i );		if( ITEM_CHECKINDEX( itemindex ) == TRUE		&& ITEM_getInt( itemindex, ITEM_MERGEFLG ) == 1	){			EquipTbl[j] = i;			j ++;		}	}	if( j == 0 )return FALSE;	rndwork = RAND( 0, j-1 );	ItemEquip = EquipTbl[rndwork];	itemindex = CHAR_getItemIndex( charaindex, ItemEquip );	if( ITEM_CHECKINDEX( itemindex ) == FALSE )return FALSE;	crushlevel = ITEM_getInt( itemindex, ITEM_CRUSHLEVEL );	if( crushlevel > 1 ) return FALSE;	{		if( crushlevel == 1 ){			sprintf( szBuffer, "CrushLv2(毁坏道具Lv2)" );		}else{			sprintf( szBuffer, "CrushLv1(毁坏道具Lv1)" );		}		LogItem(			CHAR_getChar( charaindex, CHAR_NAME ),			CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称			itemindex,#else   			ITEM_getInt( itemindex, ITEM_ID ),#endif			szBuffer,	       	CHAR_getInt( charaindex,CHAR_FLOOR),			CHAR_getInt( charaindex,CHAR_X ),        	CHAR_getInt( charaindex,CHAR_Y ),			ITEM_getChar( itemindex, ITEM_UNIQUECODE),					ITEM_getChar( itemindex, ITEM_NAME),					ITEM_getInt( itemindex, ITEM_ID)		);	}	/*{ int battleindex, bid;		//sprintf( szBuffer, "(%s)的(%s)是(%s)\n",		//	CHAR_getUseName( charaindex ),		//	ITEM_getChar( itemindex, ITEM_NAME ),		//	aszCrushTbl[crushlevel] );		battleindex = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEINDEX );		bid = BATTLE_Index2No( battleindex, charaindex );		//BATTLE_BroadCast( battleindex, szBuffer,			(bid >= 10)? CHAR_COLORGRAY : CHAR_COLORPURPLE ) ;	}*/	type = ITEM_getInt( itemindex, ITEM_TYPE );	szBuffer[0] = 0;	switch( type ){	case ITEM_FIST:	case ITEM_AXE:	case ITEM_CLUB:	case ITEM_SPEAR:	case ITEM_BOW:	case ITEM_BOOMERANG:	case ITEM_BOUNDTHROW:	case ITEM_BREAKTHROW:		sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_NAME_WEPON );		break;	case ITEM_HELM:	case ITEM_ARMOUR:		sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_NAME_AROMER );		break;	case ITEM_BRACELET:	sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_BRACELET );break;	case ITEM_MUSIC:	sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_MUSIC );break;	case ITEM_NECKLACE:	sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_NECKLACE );break;	case ITEM_RING:		sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_RING );break;	case ITEM_BELT:		sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_BELT );break;	case ITEM_EARRING:	sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_EARRING );break;	case ITEM_NOSERING:	sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_NOSERING );break;	case ITEM_AMULET:	sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_AMULET );break;	case ITEM_OTHER:	sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_OTHER );break;	default:		sprintf( szBuffer, "%s%s", aszCrushTbl[crushlevel], BREAK_OTHER );break;		break;	}	ITEM_setChar( itemindex, ITEM_SECRETNAME, szBuffer );	for( i = 0; i < arraysizeof( ItemBreakPos ); i ++ ){		work = ITEM_getInt( itemindex, ItemBreakPos[i] );		if( work <= 0 )continue;		if( crushlevel == 1 ){			work = 1;		}else{			work /= 2;			if( work < 1 ) work = 1;		}		ITEM_setInt( itemindex, ItemBreakPos[i], work );	}   	CHAR_sendItemDataOne( charaindex, ItemEquip );	ITEM_setInt( itemindex, ITEM_CRUSHLEVEL, crushlevel + 1 );	CHAR_complianceParameter( charaindex );	CHAR_send_P_StatusString( charaindex,		CHAR_P_STRING_ATK		| CHAR_P_STRING_DEF		| CHAR_P_STRING_QUICK		| CHAR_P_STRING_CHARM );	return TRUE;}#endif#ifdef _TAKE_ITEMDAMAGEstatic int BATTLE_ItemCrushSeq( int attackindex, int charaindex, int Damages){	int iRet = FALSE;	int crushindex=-1, crushpower;	int flg=0;//flg def 1 att 2	flg=1;	if( ( crushindex = BATTLE_ItemCrushCheck( charaindex, flg) ) >= 0 ) {		if( CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ){			crushpower = CHAR_getWorkInt( attackindex, CHAR_WORKATTACKPOWER);			BATTLE_ItemCrush( charaindex, crushindex, Damages, flg);		}	}	flg=2;	if( ( crushindex = BATTLE_ItemCrushCheck( attackindex, flg) ) >= 0 )	{		if( CHAR_getInt( attackindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ){			crushpower = CHAR_getWorkInt( charaindex, CHAR_WORKDEFENCEPOWER);			BATTLE_ItemCrush( attackindex, crushindex, Damages, flg);		}	}		return iRet;}#elsestatic int BATTLE_ItemCrushSeq( int charaindex ){	char szWork[256];	int iRet = FALSE;	if( BATTLE_ItemCrushCheck( charaindex ) == TRUE ){		if( BATTLE_ItemCrush( charaindex ) == TRUE ){			sprintf( szWork, "BK|%s的\t装备受到损伤。",				CHAR_getUseName( charaindex ) );			strcat( szBadStatusString, szWork );			iRet = TRUE;		}	}	return iRet;}#endif//回避判定static BOOL BATTLE_DuckCheck(	int attackindex,	int defindex){	int flg = FALSE;	int  Df_Dex, At_Dex, Df_Luck = 0;	float per, Work, wari, Big, Small;	gDuckPer = 0;	if( CHAR_getWorkInt( defindex, CHAR_WORKBATTLECOM1 ) == BATTLE_COM_GUARD ){		return FALSE;	}	if( BATTLE_GetDamageReact( defindex ) > 0 ){		return FALSE;	}	if( BATTLE_CanMoveCheck( defindex ) == FALSE ){		return FALSE;	}	if( CHAR_getWorkInt( defindex, CHAR_WORKBATTLEFLG ) & CHAR_BATTLEFLG_NODUCK ){		return FALSE;	}	if( CHAR_getWorkInt( defindex, CHAR_WORKBATTLEFLG ) & CHAR_BATTLEFLG_ABIO ){		return FALSE;	}#ifdef _PETSKILL_SETDUCK	if( BATTLE_CheckMySkillDuck( defindex ) == TRUE ){		return TRUE;	}#endif	At_Dex = CHAR_getWorkInt( attackindex, CHAR_WORKFIXDEX );	Df_Dex = CHAR_getWorkInt( defindex, CHAR_WORKFIXDEX );	if( CHAR_getInt( defindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){		Df_Luck = CHAR_getWorkInt( defindex, CHAR_WORKFIXLUCK );	}	if( CHAR_getInt( attackindex, CHAR_WHICHTYPE ) == CHAR_TYPEENEMY	&&  CHAR_getInt( defindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET	){		At_Dex *= 0.8;	}else	if( CHAR_getInt( attackindex, CHAR_WHICHTYPE ) != CHAR_TYPEENEMY	&&  CHAR_getInt( defindex, CHAR_WHICHTYPE ) == CHAR_TYPEPET	){		Df_Dex *= 0.8;	}else	if( CHAR_getInt( attackindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER	&&  CHAR_getInt( defindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER	){		At_Dex *= 0.6;	}else	if( CHAR_getInt( attackindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER	&&  CHAR_getInt( defindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER	){		Df_Dex *= 0.6;	}	if( Df_Dex >= At_Dex ){		Big = Df_Dex;		Small = At_Dex;		wari = 1.0;	}else{		Big = At_Dex;		Small = Df_Dex;		if( Big <= 0 ){			wari = 0.0;		}else{			wari = Small / Big;		}	}	if( CHAR_getWorkInt( defindex, CHAR_WORKBATTLECOM1 ) == BATTLE_COM_JYUJYUTU	){		gKawashiPara = 0.027;	}else{		gKawashiPara = 0.02;	}	Work = ( Big - Small ) / gKawashiPara;	if( Work <= 0 ) Work = 0;	per = (float)( sqrt( (double)Work ) );	per *= wari;	per += Df_Luck;	per += gBattleDuckModyfy;	if( CHAR_getWorkInt( attackindex, CHAR_WORKDRUNK )  > 0 ){		per += RAND( 20, 30 );	}	if( gWeponType == ITEM_BOW ){		per += 20;	}	if( CHAR_getWorkInt( defindex, CHAR_WORKBATTLECOM1 ) == BATTLE_COM_S_NOGUARD ){		per += CHAR_GETWORKINT_HIGH( defindex, CHAR_WORKBATTLECOM3 );	}	if( gWeponType == ITEM_BOW ){		per += 20;	}	per *= 100;	if( per > KAWASHI_MAX_RATE*100 ) per = KAWASHI_MAX_RATE*100; 	if( per <= 0 ) per = 1;	gDuckPer = per * 0.01;#ifdef _EQUIT_HITRIGHT	if( CHAR_getInt( attackindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER ){		int AddHit = CHAR_getWorkInt( attackindex, CHAR_WORKHITRIGHT);		per -= RAND( AddHit*0.8, AddHit*1.2);		per = ( per < 0 )?0:per;	}#endif#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能	per = BATTLE_check_profession_duck( defindex, per );#endif	if( RAND( 1, 10000 ) <= per ){		flg = TRUE;#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能		// 回避技能升级		if( (CHAR_getInt( defindex, CHAR_WHICHTYPE ) == CHAR_TYPEPLAYER) ){			PROFESSION_SKILL_LVEVEL_UP( defindex, "PROFESSION_AVOID" );		} #endif	}else{		flg = FALSE;	}	return flg;}static int	BATTLE_AttrCalc(		int My_Fire,		int My_Water,		int My_Earth,		int My_Wind,		int My_None,		int Vs_Fire,		int Vs_Water,		int Vs_Earth,		int Vs_Wind,		int Vs_None){	int iRet = 0;	My_Fire = My_Fire * Vs_None * AJ_UP			+ My_Fire * Vs_Fire * AJ_SAME			+ My_Fire * Vs_Water * AJ_DOWN			+ My_Fire * Vs_Earth * AJ_SAME			+ My_Fire * Vs_Wind * AJ_UP;	My_Water = My_Water * Vs_None * AJ_UP			+ My_Water * Vs_Fire * AJ_UP			+ My_Water * Vs_Water * AJ_SAME			+ My_Water * Vs_Earth * AJ_DOWN			+ My_Water * Vs_Wind * AJ_SAME;	My_Earth = My_Earth * Vs_None * AJ_UP			+ My_Earth  * Vs_Fire * AJ_SAME			+ My_Earth * Vs_Water * AJ_UP			+ My_Earth * Vs_Earth * AJ_SAME			+ My_Earth * Vs_Wind * AJ_DOWN;	My_Wind = My_Wind * Vs_None * AJ_UP			+ My_Wind  * Vs_Fire * AJ_DOWN			+ My_Wind * Vs_Water * AJ_SAME			+ My_Wind * Vs_Earth * AJ_UP			+ My_Wind * Vs_Wind * AJ_SAME;	My_None = My_None * Vs_None * AJ_SAME			+ My_None * Vs_Fire * AJ_DOWN			+ My_None * Vs_Water * AJ_DOWN			+ My_None * Vs_Earth * AJ_DOWN			+ My_None * Vs_Wind * AJ_DOWN;	iRet = (My_Fire + My_Water + My_Earth + My_Wind + My_None) ;	return (iRet * D_ATTR);}static void BATTLE_GetAttr( int charaindex, int *T_pow ){#ifdef _BATTLE_NEWPOWER#else	int petindex = BATTLE_getRidePet( charaindex );        if( petindex == -1 ){#endif		T_pow[0] = CHAR_getWorkInt( charaindex, CHAR_WORKFIXEARTHAT );		T_pow[1] = CHAR_getWorkInt( charaindex, CHAR_WORKFIXWATERAT );		T_pow[2] = CHAR_getWorkInt( charaindex, CHAR_WORKFIXFIREAT );		T_pow[3] = CHAR_getWorkInt( charaindex, CHAR_WORKFIXWINDAT );/*		*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 );*/#ifdef _BATTLE_NEWPOWER#else	}else	{    // Robin 0727 when Ride Pet#endif#ifdef _BATTLE_NEWPOWER#else		T_pow[0] = ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXEARTHAT )			+ CHAR_getWorkInt( petindex, CHAR_WORKFIXEARTHAT )) /2;		T_pow[1] = ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXWATERAT )			+ CHAR_getWorkInt( petindex, CHAR_WORKFIXWATERAT )) /2;		T_pow[2] = ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXFIREAT )			+ CHAR_getWorkInt( petindex, CHAR_WORKFIXFIREAT )) /2;		T_pow[3] = ( CHAR_getWorkInt( charaindex, CHAR_WORKFIXWINDAT )			+ CHAR_getWorkInt( petindex, CHAR_WORKFIXWINDAT )) /2;/*		*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;*/	}#endif#ifdef _SUIT_TWFWENDUM	T_pow[0] = (T_pow[0]+CHAR_getWorkInt( charaindex, CHAR_WORK_EA ))>100?100:(T_pow[0]+CHAR_getWorkInt( charaindex, CHAR_WORK_EA ));	T_pow[1] = (T_pow[1]+CHAR_getWorkInt( charaindex, CHAR_WORK_WR ))>100?100:(T_pow[1]+CHAR_getWorkInt( charaindex, CHAR_WORK_EA ));	T_pow[2] = (T_pow[2]+CHAR_getWorkInt( charaindex, CHAR_WORK_FI ))>100?100:(T_pow[2]+CHAR_getWorkInt( charaindex, CHAR_WORK_EA ));	T_pow[3] = (T_pow[3]+CHAR_getWorkInt( charaindex, CHAR_WORK_WI ))>100?100:(T_pow[3]+CHAR_getWorkInt( charaindex, CHAR_WORK_EA ));#endif	{		int i, renum=ATTR_MAX;		for( i=0; i<4; i++)	{			if( T_pow[ i] < 0 ) T_pow[ i] = 0;			renum -= T_pow[ i];		}		if( renum < 0 ) renum = 0;		T_pow[ 4] = renum;	}/*	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 = ATTR_MAX - *pAt_Fire - *pAt_Water - *pAt_Earth - *pAt_Wind;	if( *pAt_None < 0 )*pAt_None = 0;*/}float BATTLE_FieldAttAdjust(	int battleindex,

⌨️ 快捷键说明

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