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

📄 battle_event.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
		if( (rad = (rand()%100)) > duck1 ){			return FALSE;		}else	{//回避			return TRUE;		}	}	return FALSE;}#endif#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能int BATTLE_check_profession_duck( int charaindex, int per ){	int SDuck=0;	if( (SDuck=CHAR_getWorkInt( charaindex, CHAR_WORK_P_DUCK)) > 0 ){		int duck1 = CHAR_getWorkInt( charaindex, CHAR_WORKMOD_P_DUCK);				per = per * ( 100 + duck1 ) / 100;	}			return per;}#endifint BATTLE_GetDamageReact( int charaindex ){	if( CHAR_getWorkInt( charaindex, CHAR_WORKDAMAGEVANISH ) > 0 ){		return BATTLE_MD_VANISH;	}	if( CHAR_getWorkInt( charaindex, CHAR_WORKDAMAGEABSROB ) > 0 ){		return BATTLE_MD_ABSROB;	}	if( CHAR_getWorkInt( charaindex, CHAR_WORKDAMAGEREFLEC ) > 0 ){		return BATTLE_MD_REFLEC;	}#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能	if( CHAR_getWorkInt( charaindex, CHAR_WORKTRAP ) > 0 ){	//陷阱			return BATTLE_MD_TRAP;	}#endif#ifdef _PETSKILL_ACUPUNCTURE	if( CHAR_getWorkInt( charaindex, CHAR_WORKACUPUNCTURE ) > 0 ){	//针刺外皮	    //print("\n针刺:BATTLE_GetDamageReact");	 	return BATTLE_MD_ACUPUNCTURE;	}#endif	return 0;}int BATTLE_DamageSub( int attackindex, int defindex, int *pDamage, int *pPetDamage, int *pRefrect ){	int hp = 0, addpoint = 0, maxhp, IsUltimate = 0, react, work, battleindex;	int damage, playerdamage, petdamage;	int attackpet, defpet;	int pethp = 0, petmaxhp = 0;	int defquick = 0, petquick = 0;		damage = *pDamage;	petdamage = *pPetDamage;	playerdamage = damage;	if( damage <= 0 )return 0;#ifdef _PETSKILL_SHOWMERCY   	if( CHAR_getInt( defindex, CHAR_HP ) - damage <= 0 		&& CHAR_getWorkInt(attackindex, CHAR_WORKBATTLECOM1) == BATTLE_COM_S_SHOWMERCY ){	    damage = CHAR_getInt( defindex, CHAR_HP ) - 1;		*pDamage = damage;		playerdamage = damage;	}#endif	attackpet = BATTLE_getRidePet( attackindex );	defpet = BATTLE_getRidePet( defindex );	if( defpet != -1 ) {		defquick = CHAR_getWorkInt( defindex, CHAR_WORKDEFENCEPOWER );		petquick = CHAR_getWorkInt( defpet, CHAR_WORKDEFENCEPOWER );	}	if( *pRefrect != -1 ){		react = BATTLE_GetDamageReact( defindex );	}else{		react = BATTLE_MD_NONE;		}	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 _PROFESSION_SKILL			// WON ADD 人物职业技能	if( react == BATTLE_MD_TRAP ){		if( BATTLE_IsThrowWepon( CHAR_getItemIndex( attackindex, CHAR_ARM ) ) == FALSE )			*pRefrect = BATTLE_MD_TRAP;		else			*pRefrect = BATTLE_MD_NONE;	}#endif#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 ){#ifdef _PETSKILL_BATTLE_MODEL		if(CHAR_getWorkInt(defindex,CHAR_NPCWORKINT1) == BATTLE_COM_S_BATTLE_MODEL){			work = CHAR_getWorkInt( defindex, CHAR_WORKDAMAGEREFLEC ) - 1;			CHAR_setWorkInt( defindex, CHAR_WORKDAMAGEREFLEC, max( work, 0 ) );			hp = CHAR_getInt(defindex,CHAR_HP);			pethp = CHAR_getInt(defpet,CHAR_HP);		}		else#endif		{			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 _PROFESSION_SKILL			// WON ADD 人物职业技能	if( *pRefrect == BATTLE_MD_TRAP ){		//陷阱	#ifdef _PETSKILL_BATTLE_MODEL		if(CHAR_getWorkInt(defindex,CHAR_NPCWORKINT1) == BATTLE_COM_S_BATTLE_MODEL){			CHAR_setWorkInt( defindex, CHAR_WORKTRAP, 0 );			CHAR_setWorkInt( defindex, CHAR_WORKMODTRAP, 0 );			hp = CHAR_getInt(defindex,CHAR_HP);			pethp = CHAR_getInt(defpet,CHAR_HP);		}		else#endif		{			int value=0;			value = CHAR_getWorkInt( defindex, CHAR_WORKMODTRAP );			damage = value;						playerdamage = damage;						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;			}						CHAR_setWorkInt( defindex, CHAR_WORKTRAP, 0 );			CHAR_setWorkInt( defindex, CHAR_WORKMODTRAP, 0 );						defindex = attackindex;			defpet = attackpet;			}	}else#endif#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);#ifdef _PETSKILL_BATTLE_MODEL		if(CHAR_getWorkInt(defindex,CHAR_NPCWORKINT1) != BATTLE_COM_S_BATTLE_MODEL)#endif		{			//扣攻击方的血			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 ){	}#ifdef _PETSKILL_LER// 雷尔不能被打飞	if(CHAR_getInt(defindex,CHAR_BASEBASEIMAGENUMBER) == 101813 ||		 CHAR_getInt(defindex,CHAR_BASEBASEIMAGENUMBER) == 101814) IsUltimate = 0;#endif	if( IsUltimate ){		CHAR_setWorkInt( defindex, CHAR_WORKULTIMATE, 0 );	}	if( playerdamage < 0 ) playerdamage = 0;	if( petdamage < 0 ) petdamage = 0;	*pDamage = playerdamage;	*pPetDamage = petdamage;	return IsUltimate;}#ifdef _PETSKILL_FIREKILL //火线猎杀专用int BATTLE_DamageSub_FIREKILL( 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;	int defquick = 0, petquick = 0;	damage = *pDamage;	petdamage = *pPetDamage;	playerdamage = damage;	if( damage <= 0 )return 0;	attackpet = BATTLE_getRidePet( attackindex );	defpet = BATTLE_getRidePet( defindex );	if( defpet != -1 ) {		defquick = CHAR_getWorkInt( defindex, CHAR_WORKDEFENCEPOWER );		petquick = CHAR_getWorkInt( defpet, CHAR_WORKDEFENCEPOWER );	}	if( *pRefrect != -1 ){		react = BATTLE_GetDamageReact( defindex );	}else{		react = BATTLE_MD_NONE;		}	react = BATTLE_MD_NONE;		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 _PROFESSION_SKILL			// WON ADD 人物职业技能	if( react == BATTLE_MD_TRAP ){		if( BATTLE_IsThrowWepon( CHAR_getItemIndex( attackindex, CHAR_ARM ) ) == FALSE )			*pRefrect = BATTLE_MD_TRAP;		else			*pRefrect = BATTLE_MD_NONE;	}#endif#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 += 

⌨️ 快捷键说明

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