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

📄 battle_event.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 5 页
字号:
	battleindex = CHAR_getWorkInt( defindex, CHAR_WORKBATTLEINDEX );	if( react == BATTLE_MD_REFLEC ){		if( BATTLE_IsThrowWepon( CHAR_getItemIndex( attackindex, CHAR_ARM ) ) == FALSE ){			*pRefrect = BATTLE_MD_REFLEC;		}else{			*pRefrect = BATTLE_MD_NONE;		}	}else{	}#ifdef _PETSKILL_ACUPUNCTURE    if( react == BATTLE_MD_ACUPUNCTURE ){        if( BATTLE_IsThrowWepon( CHAR_getItemIndex( attackindex, CHAR_ARM ) ) == FALSE ){			*pRefrect = BATTLE_MD_ACUPUNCTURE;		}else{			*pRefrect = BATTLE_MD_NONE;		}	}#endif	if( react == BATTLE_MD_ABSROB ){		hp = CHAR_getInt( defindex, CHAR_HP );		if( defpet == -1 ) {			hp += damage;		}else {			pethp = CHAR_getInt( defpet, CHAR_HP );			playerdamage = (damage*petquick)/(defquick+petquick) +1 ;			petdamage = damage - playerdamage +1 ;			hp += playerdamage;			pethp += petdamage;					}		work = CHAR_getWorkInt( defindex, CHAR_WORKDAMAGEABSROB ) - 1;		CHAR_setWorkInt( defindex, CHAR_WORKDAMAGEABSROB, max( work, 0 ) );		*pRefrect = BATTLE_MD_ABSROB;	}else	if( *pRefrect == BATTLE_MD_REFLEC ){		hp = CHAR_getInt( attackindex, CHAR_HP );		if( attackpet == -1 ) {			hp -= damage;		}else {			pethp = CHAR_getInt( attackpet, CHAR_HP );			defquick = CHAR_getWorkInt( attackindex, CHAR_WORKDEFENCEPOWER );			petquick = CHAR_getWorkInt( attackpet, CHAR_WORKDEFENCEPOWER );			if( pethp > 0 ) {				playerdamage = (damage*petquick)/(defquick+petquick) +1;				petdamage = damage - playerdamage +1 ;				hp -= playerdamage;				pethp -= petdamage;			}else				hp -= damage;		}		work = CHAR_getWorkInt( defindex, CHAR_WORKDAMAGEREFLEC ) - 1;		CHAR_setWorkInt( defindex, CHAR_WORKDAMAGEREFLEC, max( work, 0 ) );		defindex = attackindex;		defpet = attackpet;	}else#ifdef _PETSKILL_ACUPUNCTURE	if( *pRefrect == BATTLE_MD_ACUPUNCTURE ){ //针刺外皮				if( damage%2 != 0 )			damage+=1;        playerdamage = damage;		//先扣被攻击方的血,因为之後的动作都是对攻击方做的		hp = CHAR_getInt( defindex, CHAR_HP );		if( attackpet == -1 ) {			hp -= damage;			if(hp<0)hp=0;			maxhp = CHAR_getWorkInt( defindex, CHAR_WORKMAXHP );	        CHAR_setInt( defindex, CHAR_HP, min( hp, maxhp ) );		}else {			pethp = CHAR_getInt( defpet, CHAR_HP );			defquick = CHAR_getWorkInt( defindex, CHAR_WORKDEFENCEPOWER );			petquick = CHAR_getWorkInt( defpet, CHAR_WORKDEFENCEPOWER );			if( pethp > 0 ) {				playerdamage = (damage*petquick)/(defquick+petquick) +1;				petdamage = damage - playerdamage +1 ;				if(playerdamage%2 != 0) playerdamage+=1;				if(petdamage%2 != 0) petdamage+=1;				hp -= playerdamage;				pethp -= petdamage;				if(hp<0)hp=0;				maxhp = CHAR_getWorkInt( defindex, CHAR_WORKMAXHP );	            CHAR_setInt( defindex, CHAR_HP, min( hp, maxhp ) );				if( pethp < 0 )	pethp = 0;		        petmaxhp = CHAR_getWorkInt( defpet, CHAR_WORKMAXHP );		        CHAR_setInt( defpet, CHAR_HP, min( pethp, petmaxhp ) );			}else{				hp -= damage;				if(hp<0)hp=0;				maxhp = CHAR_getWorkInt( defindex, CHAR_WORKMAXHP );	            CHAR_setInt( defindex, CHAR_HP, min( hp, maxhp ) );			}		}		//Change 2003/08/22		if( (damage) >= CHAR_getWorkInt( defindex, CHAR_WORKMAXHP ) * 1.2 + 20 ){            int DefSide=0,i;			int defNo = BATTLE_Index2No( battleindex, defindex );			CHAR_setWorkInt( defindex, CHAR_WORKULTIMATE, 0 );            			//死亡的宠物改为休息			if( defNo >= SIDE_OFFSET ){		       i = defNo - SIDE_OFFSET;		       DefSide = 1;			}else{		       i = defNo;			}        	i = defNo-DefSide*SIDE_OFFSET;  		    BattleArray[battleindex].Side[DefSide].Entry[i].flg |= BENT_FLG_ULTIMATE;		}		//针刺外皮技能回合数设为0		CHAR_setWorkInt( defindex, CHAR_WORKACUPUNCTURE, 0);		//if( CHAR_getWorkInt( defindex, CHAR_WORKSLEEP ) > 0 )//检查有无昏睡	    //    CHAR_setWorkInt( defindex, CHAR_WORKSLEEP, 0);        //扣攻击方的血		hp = CHAR_getInt( attackindex, CHAR_HP );		if( attackpet == -1 ) {			hp -= damage/2;		}else {			pethp = CHAR_getInt( attackpet, CHAR_HP );			defquick = CHAR_getWorkInt( attackindex, CHAR_WORKDEFENCEPOWER );			petquick = CHAR_getWorkInt( attackpet, CHAR_WORKDEFENCEPOWER );			if( pethp > 0 ) {				playerdamage = (damage*petquick)/(defquick+petquick) +1;				petdamage = damage - playerdamage +1 ;				if(playerdamage%2 != 0) playerdamage+=1;				if(petdamage%2 != 0) petdamage+=1;				hp -= playerdamage/2;				pethp -= petdamage/2;			}else				hp -= damage/2;		}				playerdamage /= 2;       		defindex = attackindex;		defpet = attackpet;		}else#endif	if( react == BATTLE_MD_VANISH ){		hp = CHAR_getInt( defindex, CHAR_HP );		if( defpet != -1 )			pethp = CHAR_getInt( defpet, CHAR_HP );		work = CHAR_getWorkInt( defindex, CHAR_WORKDAMAGEVANISH ) - 1;		CHAR_setWorkInt( defindex, CHAR_WORKDAMAGEVANISH, max( work, 0 ) );		*pRefrect = BATTLE_MD_VANISH;		//andy_log		print("*pRefrect = BATTLE_MD_VANISH !!\n");	}else{		hp = CHAR_getInt( defindex, CHAR_HP );		if( defpet == -1 ) {			hp -= damage;		}else {			pethp = CHAR_getInt( defpet, CHAR_HP );			if( pethp > 0 ) {				//andy_edit 2002/07/31				defquick = defquick>0?defquick:1;				petquick = petquick>0?petquick:1;				playerdamage = (damage*petquick)/(defquick+petquick)+ 1;				//playerdamage = (damage*petquick)/(defquick+petquick) +1;				petdamage = damage - playerdamage +1;				hp -= playerdamage;				pethp -= petdamage;				//print(" def_damage:%d ridepet_damage:%d ", (damage*petquick)/(defquick+petquick), damage - playerdamage);			}else				hp -= damage;		}		*pRefrect = 0;	}	if( hp < 0 ){		addpoint = -hp;		hp = 0;	}	maxhp = CHAR_getWorkInt( defindex, CHAR_WORKMAXHP );	CHAR_setInt( defindex, CHAR_HP, min( hp, maxhp ) );	if( defpet != -1 ) {		if( pethp < 0 )	pethp = 0;		petmaxhp = CHAR_getWorkInt( defpet, CHAR_WORKMAXHP );		CHAR_setInt( defpet, CHAR_HP, min( pethp, petmaxhp ) );		// Robin 0804		if( pethp <= 0 ) {			CHAR_setInt( defindex, CHAR_RIDEPET, -1 );			BATTLE_changeRideImage( defindex );			CHAR_setWorkInt( defindex, CHAR_WORKPETFALL, 1 );			print(" defpet_die! ");		}	}		if( (damage) >= maxhp * 1.2 + 20 ){		IsUltimate = 2;	}else{		if( addpoint > 0 ){			addpoint += CHAR_getWorkInt( defindex, CHAR_WORKULTIMATE );			CHAR_setWorkInt( defindex, CHAR_WORKULTIMATE, addpoint );			if( addpoint >= maxhp * 1.2 + 20 )IsUltimate = 1;		}	}	if( BattleArray[battleindex].type == BATTLE_TYPE_P_vs_P ){	}	if( IsUltimate ){		CHAR_setWorkInt( defindex, CHAR_WORKULTIMATE, 0 );	}	if( playerdamage < 0 ) playerdamage = 0;	if( petdamage < 0 ) petdamage = 0;	*pDamage = playerdamage;	*pPetDamage = petdamage;	return IsUltimate;}#endif// Robin 0910 RidePetDebugint BATTLE_DamageSub2( int attackindex, int defindex, int *pDamage, int *pPetDamage, int *pRefrect ){	int hp, addpoint = 0, maxhp, IsUltimate = 0, react, work, battleindex;	int damage, playerdamage, petdamage;	int attackpet, defpet;	int pethp = 0, petmaxhp = 0;	damage = *pDamage;	petdamage = *pPetDamage;	playerdamage = *pDamage;	if( damage <= 0 )return 0;		attackpet = BATTLE_getRidePet( attackindex );	defpet = BATTLE_getRidePet( defindex );	if( *pRefrect != -1 ){		react = BATTLE_GetDamageReact( defindex );	}else{		react = BATTLE_MD_NONE;	}	if( react == BATTLE_MD_REFLEC ){		if( BATTLE_IsThrowWepon( CHAR_getItemIndex( attackindex, CHAR_ARM ) ) == FALSE ){			*pRefrect = BATTLE_MD_REFLEC;		}else{			*pRefrect = BATTLE_MD_NONE;		}	}	if( react == BATTLE_MD_ABSROB ){		hp = CHAR_getInt( defindex, CHAR_HP );		hp += playerdamage;		if( defpet != -1 ) {			pethp = CHAR_getInt( defpet, CHAR_HP );			pethp += petdamage;		}		work = CHAR_getWorkInt( defindex, CHAR_WORKDAMAGEABSROB ) - 1;		CHAR_setWorkInt( defindex, CHAR_WORKDAMAGEABSROB, max( work, 0 ) );		*pRefrect = BATTLE_MD_ABSROB;	}else	if( *pRefrect == BATTLE_MD_REFLEC ){		hp = CHAR_getInt( attackindex, CHAR_HP );		hp -= playerdamage;		if( attackpet != -1 ) {			pethp = CHAR_getInt( attackpet, CHAR_HP );			if( pethp > 0 ) {				pethp -= petdamage;			}		}		work = CHAR_getWorkInt( defindex, CHAR_WORKDAMAGEREFLEC ) - 1;		CHAR_setWorkInt( defindex, CHAR_WORKDAMAGEREFLEC, max( work, 0 ) );		defindex = attackindex;		defpet = attackpet;	}else	if( react == BATTLE_MD_VANISH ){		hp = CHAR_getInt( defindex, CHAR_HP );		if( defpet != -1 )			pethp = CHAR_getInt( defpet, CHAR_HP );		work = CHAR_getWorkInt( defindex, CHAR_WORKDAMAGEVANISH ) - 1;		CHAR_setWorkInt( defindex, CHAR_WORKDAMAGEVANISH, max( work, 0 ) );		*pRefrect = BATTLE_MD_VANISH;	}else{		hp = CHAR_getInt( defindex, CHAR_HP );		hp -= playerdamage;		if( defpet != -1 ){			pethp = CHAR_getInt( defpet, CHAR_HP );			if( pethp > 0 ) {				pethp -= petdamage;				//print(" def_damage:%d ridepet_damage:%d ", (damage*petquick)/(defquick+petquick), damage - playerdamage);			}		}		*pRefrect = 0;	}	if( hp < 0 ){		addpoint = -hp;		hp = 0;	}	maxhp = CHAR_getWorkInt( defindex, CHAR_WORKMAXHP );	CHAR_setInt( defindex, CHAR_HP, min( hp, maxhp ) );			if( defpet != -1 ) {		if( pethp < 0 )	pethp = 0;		petmaxhp = CHAR_getWorkInt( defpet, CHAR_WORKMAXHP );		CHAR_setInt( defpet, CHAR_HP, min( pethp, petmaxhp ) );				// Robin 0804		if( pethp <= 0 ) {			CHAR_setInt( defindex, CHAR_RIDEPET, -1 );			BATTLE_changeRideImage( defindex );			CHAR_setWorkInt( defindex, CHAR_WORKPETFALL, 1 );			print(" defpet_die! ");		}	}		if( (damage) >= maxhp * 1.2 + 20 ){		IsUltimate = 2;	}else{		if( addpoint > 0 ){			addpoint += CHAR_getWorkInt( defindex, CHAR_WORKULTIMATE );			CHAR_setWorkInt( defindex, CHAR_WORKULTIMATE, addpoint );			if( addpoint >= maxhp * 1.2 + 20 )IsUltimate = 1;		}	}	battleindex = CHAR_getWorkInt( defindex, CHAR_WORKBATTLEINDEX );	if( BattleArray[battleindex].type == BATTLE_TYPE_P_vs_P ){	}	if( IsUltimate ){		CHAR_setWorkInt( defindex, CHAR_WORKULTIMATE, 0 );	}	//*pDamage = damage;	*pDamage = playerdamage;	*pPetDamage = petdamage;	return IsUltimate;}void BATTLE_DamageSubCale(	int attackindex,	int defindex,	int *pDamage,	int *pPetDamage){	int pethp;	int damage, playerdamage, petdamage;	int attackpet, defpet;	int defquick = 0, petquick = 0;	damage = *pDamage;	petdamage = *pPetDamage;	playerdamage = damage;	attackpet = BATTLE_getRidePet( attackindex );	defpet = BATTLE_getRidePet( defindex );	defquick = CHAR_getWorkInt( defindex, CHAR_WORKDEFENCEPOWER );	defquick = ( defquick < 1)?1:defquick;	if( defpet != -1 ) {		petquick = CHAR_getWorkInt( defpet, CHAR_WORKDEFENCEPOWER );		petquick = ( petquick < 1)?1:petquick;		pethp = CHAR_getInt( defpet, CHAR_HP );		if( pethp > 0 ) {			playerdamage = (damage*petquick)/(defquick+petquick);			petdamage = damage - playerdamage;			if( damage > 0 && playerdamage < 1 )				playerdamage = 1;		}	}	*pDamage = playerdamage;	*pPetDamage = petdamage;}int BATTLE_Attack( int battleindex, int attackNo, int defNo ){	char szBuffer[512]="";	char szCommand[1024];	int damage = 0, petdamage = 0, attackindex, toindex, ultimate = 0,		defindex, react = 0, statusDefNo, opt = 0;	int flg = 0, iWork, par, perStatus, i, DefSide = 0, Guardian = -1;	BOOL iRet = TRUE;	int suitpoison=30;//基本中毒%	attackindex = BATTLE_No2Index( battleindex, attackNo );	defindex = toindex = BATTLE_No2Index( battleindex, defNo );	if( CHAR_CHECKINDEX( attackindex ) == FALSE )	return FALSE;	if( CHAR_CHECKINDEX( defindex ) == FALSE )		return FALSE;#ifdef _PETSKILL_RETRACE    Battle_Attack_ReturnData_x.Battle_Attack_ReturnData = 0;#endif	if( gWeponType == ITEM_BOW ){		if( toindex < 0	|| CHAR_getInt( toindex, CHAR_HP ) <= 0 ){			snprintf( szCommand, sizeof( szCommand ), "r%X|f0|d0|", defNo );			BATTLESTR_ADD( szCommand );			return FALSE;		}	}	if( CHAR_getInt( toindex, CHAR_HP ) <= 0 )	return FALSE;	if( CHAR_getInt( attackindex, CHAR_HP ) <= 0 )	return FALSE;	// 光、镜、守	if( BATTLE_GetDamageReact( attackindex ) > 0 )		iRet = FALSE;	else if( BATTLE_GetDamageReact( defindex ) > 0 )	iRet = FALSE;	// 攻击模式	iWork = BATTLE_AttackSeq( attackindex, toindex, &damage, &Guardian, opt );	if( Guardian >= 0 )		defindex = BATTLE_No2Index( battleindex, Guardian );	if( gDamageDiv != 0.0 && damage > 0 ){		damage /= gDamageDiv;		if( damage <= 0 )	damage = 1;	}	par = BATTLE_AttrAdjust( attackindex, defindex, 100 );	react = 0;	ultimate = BATTLE_DamageSub( attackindex, defindex, &damage, &petdamage, &react );	if( react == BATTLE_MD_REFLEC ){		defindex = attackindex

⌨️ 快捷键说明

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