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

📄 battle_event.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
#include "version.h"#include <string.h>#include <math.h>#include "char.h"#include "char_event.h"#include "battle.h"#include "battle_event.h"#include "configfile.h"#include "pet.h"#include "log.h"#include "lssproto_serv.h"#include "anim_tbl.h"#include "battle_magic.h"#include "util.h"#include "enemy.h"#include "pet_skill.h"#include "char_base.h"#include "item_event.h"#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能#include "profession_skill.h"#include "item.h"#include "skill.h"#endif#ifdef _PETSKILL_LER#include "magic_base.h"#endif#define DEFENSE_RATE	(0.5)#define DAMAGE_RATE		(2.0)#define CRITICAL_RATE	(1.0)#define KAWASHI_MAX_RATE (75)#define AJ_SAME	(1.0)#define AJ_UP	(1.5)#define AJ_DOWN	(0.6)#define ATTR_MAX 100#define D_ATTR (1.0/(ATTR_MAX*ATTR_MAX))#define D_16	(1.0/16)#define D_8		(1.0/8)float gKawashiPara = 0.02;float gCounterPara = 0.08;float gCriticalPara = 0.09;float gBattleDamageModyfy;int   gBattleDuckModyfy;int	 gBattleStausChange;int	 gBattleStausTurn;float gDuckPer;int gCriper;int	gBattleBadStatusTbl[BATTLE_ENTRY_MAX*2];#ifdef _OTHER_MAGICSTAUTS#ifdef _MAGICSTAUTS_RESISTchar MagicStatus[MAXSTATUSTYPE][36] = { "NULL","魔抗","铁壁","火抗","电抗","冰抗"};int MagicTbl[] = { -1, CHAR_DEFMAGICSTATUS, CHAR_MAGICSUPERWALL, CHAR_MAGICFIRE, CHAR_MAGICTHUNDER, CHAR_MAGICICE };#elsechar MagicStatus[MAXSTATUSTYPE][36] = { "NULL","魔抗","铁壁"};int MagicTbl[] = { -1, CHAR_DEFMAGICSTATUS, CHAR_MAGICSUPERWALL };#endif //_MAGICSTAUTS_RESIST#endifchar *aszStatus[] = { "全", "毒", "麻", "眠", "石", "醉", "乱", "虚", "剧", "障", "默" #ifdef _PET_SKILL_SARS			// WON ADD 毒煞蔓延					  ,"煞"#endif#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能					  ,"晕","缠","罗","爆","忘","箭","蛊","针","挑","烧","霜","电","专","火","冰","雷","炎","冻","击"#endif#ifdef _PROFESSION_ADDSKILL					  ,"抗"#endif};char *aszStatusFull[] = { "全快", "毒", "麻痹", "睡眠", "石化", "酒醉", "混乱", "虚弱", "剧毒", "魔障", "沉默" #ifdef _PET_SKILL_SARS			// WON ADD 毒煞蔓延					  ,"毒煞"#endif#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能					  ,"晕眩","缠绕","天罗","冰爆","遗忘","冰箭","嗜血蛊","一针见血","挑拨","火附体",					  "冰附体","雷附体","专注战斗","火抗","冰抗","雷抗","火附","冰附","雷附"#endif};int StatusTbl[] = { -1, CHAR_WORKPOISON,	CHAR_WORKPARALYSIS,						CHAR_WORKSLEEP,		CHAR_WORKSTONE,						CHAR_WORKDRUNK,		CHAR_WORKCONFUSION,						CHAR_WORKWEAKEN,	CHAR_WORKDEEPPOISON,						CHAR_WORKBARRIER,   CHAR_WORKNOCAST#ifdef _PET_SKILL_SARS			// WON ADD 毒煞蔓延						,CHAR_WORKSARS#endif#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能						,CHAR_WORKDIZZY,		CHAR_WORKENTWINE						,CHAR_WORKDRAGNET,		CHAR_WORKICECRACK						,CHAR_WORKOBLIVION,		CHAR_WORKICEARROW						,CHAR_WORKBLOODWORMS,	CHAR_WORKSIGN						,CHAR_WORKINSTIGATE,	CHAR_WORK_F_ENCLOSE						,CHAR_WORK_I_ENCLOSE,	CHAR_WORK_T_ENCLOSE						,CHAR_WORK_FOCUS,		CHAR_WORKRESIST_F						,CHAR_WORKRESIST_I,		CHAR_WORKRESIST_T						,CHAR_WORK_F_ENCLOSE_2,	CHAR_WORK_I_ENCLOSE_2						,CHAR_WORK_T_ENCLOSE_2#endif#ifdef _PROFESSION_ADDSKILL						,CHAR_WORKERSIST_F_I_T, CHAR_WORKWATER//水附体						,CHAR_WORKANNEX//附身						,CHAR_WORKFEAR//恐惧						,CHAR_WORKICECRACK2						,CHAR_WORKICECRACK3						,CHAR_WORKICECRACK4						,CHAR_WORKICECRACK5						,CHAR_WORKICECRACK6						,CHAR_WORKICECRACK7						,CHAR_WORKICECRACK8						,CHAR_WORKICECRACK9						,CHAR_WORKICECRACK10#endif					};int RegTbl[] = { -1, CHAR_WORKMODPOISON,	CHAR_WORKMODPARALYSIS,					 CHAR_WORKMODSLEEP,		CHAR_WORKMODSTONE,					 CHAR_WORKMODDRUNK,		CHAR_WORKMODCONFUSION,					 CHAR_WORKMODWEAKEN,	CHAR_WORKMODDEEPPOISON,					 CHAR_WORKMODBARRIER,   CHAR_WORKMODNOCAST  #ifdef _PET_SKILL_SARS			// WON ADD 毒煞蔓延					 ,CHAR_WORKMODSARS#endif#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能					 ,CHAR_WORKMODDIZZY,		CHAR_WORKMODENTWINE					 ,CHAR_WORKMODDRAGNET,		CHAR_WORKMODICECRACK					 ,CHAR_WORKMODOBLIVION,		CHAR_WORKMODICEARROW					 ,CHAR_WORKMODBLOODWORMS,	CHAR_WORKMODSIGN					 ,CHAR_WORKMODINSTIGATE,	CHAR_WORKMOD_F_ENCLOSE 					 ,CHAR_WORKMOD_I_ENCLOSE,	CHAR_WORKMOD_T_ENCLOSE					 ,CHAR_WORKMOD_FOCUS,		CHAR_WORKMODRESIST_F						 ,CHAR_WORKMODRESIST_I,		CHAR_WORKMODRESIST_T					 ,CHAR_WORKMOD_F_ENCLOSE_2,	CHAR_WORKMOD_I_ENCLOSE_2					 ,CHAR_WORKMOD_T_ENCLOSE_2					 #endif					};char *aszMagicDef[] = { "常", "吸", "反", "无" #ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能						,"陷"#endif#ifdef _PETSKILL_ACUPUNCTURE                        ,"刺"#endif};char *aszMagicDefFull[] = { "通常", "吸收", "反射", "无效化" #ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能						,"陷阱"#endif#ifdef _PETSKILL_ACUPUNCTURE						,"针刺"#endif};int MagicDefTbl[] = { -1, CHAR_WORKDAMAGEABSROB, CHAR_WORKDAMAGEREFLEC, CHAR_WORKDAMAGEVANISH #ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能						,CHAR_WORKTRAP#endif#ifdef _PETSKILL_ACUPUNCTURE                        ,CHAR_WORKACUPUNCTURE#endif};char *aszParamChange[] = { "无", "攻", "防", "早", "魅", "捕" };char *aszParamChangeFull[] = { "无", "攻击力", "防御力", "速度", "魅力", "捕获率" };int aParamChangeTbl[] = { -1, CHAR_WORKMODATTACK, CHAR_WORKMODDEFENCE,	CHAR_WORKMODQUICK, CHAR_WORKMODCHARM, CHAR_WORKMODCAPTURE };// Robin 0727 Ride Pet// 取得骑宠的indexint BATTLE_getRidePet( int charaindex ){	int petindex = -1;		if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )		return -1;	else	{		int rideIndex = CHAR_getInt( charaindex, CHAR_RIDEPET );		if( rideIndex == -1 )			return -1;		petindex = CHAR_getCharPet( charaindex, rideIndex );		if( !CHAR_CHECKINDEX( petindex ) )	return -1;		}		return petindex;}#ifdef _BACK_VERSION // 复刻版骑宠公式修改// Robin 0727 Ride Pet// 取得骑宠时的叁围  复刻版float BATTLE_adjustRidePet3A( int charaindex, int petindex, int workindex, int action ){	float	ret = CHAR_getWorkInt( charaindex, workindex );	BOOL	throwweapon = BATTLE_IsThrowWepon(CHAR_getItemIndex( charaindex, CHAR_ARM ) );		switch( workindex )	{	case CHAR_WORKATTACKPOWER : // 攻击力		if( throwweapon ) // 投掷            ret = CHAR_getWorkInt( charaindex, CHAR_WORKATTACKPOWER );//间接攻击:人物		else // 近战            ret = CHAR_getWorkInt( petindex, CHAR_WORKATTACKPOWER );//直接攻击:宠物		break;	case CHAR_WORKDEFENCEPOWER : // 防御力        ret = ( CHAR_getWorkInt( charaindex, CHAR_WORKDEFENCEPOWER ) + CHAR_getWorkInt( petindex, CHAR_WORKDEFENCEPOWER ) ) / 2;		break;	case CHAR_WORKQUICK : // 敏捷力		if( action == ATTACKSIDE )	{			if( throwweapon )	{				ret = CHAR_getWorkInt( charaindex, CHAR_WORKQUICK );			}else	{				ret = CHAR_getWorkInt( petindex, CHAR_WORKQUICK );			}		}else if( action == DEFFENCESIDE ){			ret = CHAR_getWorkInt( petindex, CHAR_WORKQUICK );		}		break;	default :		ret = CHAR_getWorkInt( charaindex, workindex );	}	//print(" adj3A_Old:%d:%d=%f ", charaindex, workindex, ret);		return	ret;}#else// 取得骑宠时的叁围  正常版float BATTLE_adjustRidePet3A( int charaindex, int petindex, int workindex, int action ){	float	ret = CHAR_getWorkInt( charaindex, workindex );	BOOL	throwweapon = BATTLE_IsThrowWepon(CHAR_getItemIndex( charaindex, CHAR_ARM ) );		switch( workindex )	{	case CHAR_WORKATTACKPOWER : // 攻击力		if( throwweapon ) // 投掷			ret = CHAR_getWorkInt( charaindex, CHAR_WORKATTACKPOWER )#ifdef _BATTLE_NEWPOWER //andy 1/24 reEdit			+ CHAR_getWorkInt( petindex, CHAR_WORKATTACKPOWER )*0.4;#else			+ CHAR_getWorkInt( petindex, CHAR_WORKATTACKPOWER )*0.2;#endif		else // 近战			ret = CHAR_getWorkInt( charaindex, CHAR_WORKATTACKPOWER )*0.8				+ CHAR_getWorkInt( petindex, CHAR_WORKATTACKPOWER )*0.8;		break;	case CHAR_WORKDEFENCEPOWER : // 防御力		ret = CHAR_getWorkInt( charaindex, CHAR_WORKDEFENCEPOWER )*0.7			+ CHAR_getWorkInt( petindex, CHAR_WORKDEFENCEPOWER )*0.7;		break;	case CHAR_WORKQUICK : // 敏捷力		if( action == ATTACKSIDE )	{			if( throwweapon )	{				ret = CHAR_getWorkInt( charaindex, CHAR_WORKQUICK )*0.8					+ CHAR_getWorkInt( petindex, CHAR_WORKQUICK )*0.2;			}else	{#ifdef _BATTLE_NEWPOWER //andy 1/24 reEdit				ret = CHAR_getWorkInt( charaindex, CHAR_WORKQUICK )*0.2					+ CHAR_getWorkInt( petindex, CHAR_WORKQUICK )*0.8;#else				ret = CHAR_getWorkInt( charaindex, CHAR_WORKQUICK )*0.5					+ CHAR_getWorkInt( petindex, CHAR_WORKQUICK )*0.5;#endif			}		}else			if( action == DEFFENCESIDE ){			ret = CHAR_getWorkInt( charaindex, CHAR_WORKQUICK )*0.1				+ CHAR_getWorkInt( petindex, CHAR_WORKQUICK )*0.9;		}		break;	default :		ret = CHAR_getWorkInt( charaindex, workindex );	}		//print(" adj3A_Now:%d:%d=%f ", charaindex, workindex, ret);	return	ret;}#endif// Robin 0727 ride Pet 落马改图void BATTLE_changeRideImage( int index ){		int itemindex = CHAR_getItemIndex(index,CHAR_ARM);		int category;		int newimagenumber;		int basebaseimagenumber			= CHAR_getInt(index,CHAR_BASEBASEIMAGENUMBER);		if( !ITEM_CHECKINDEX(itemindex) )	{			category = ITEM_FIST;		}else	{			category = ITEM_getInt(itemindex,ITEM_TYPE );		}		newimagenumber = CHAR_getNewImagenumberFromEquip(			basebaseimagenumber, category);		if( newimagenumber == -1)	{			CHAR_setInt( index, CHAR_BASEIMAGENUMBER, basebaseimagenumber);		}else	{			CHAR_setInt( index, CHAR_BASEIMAGENUMBER, newimagenumber);		}}void  BATTLE_talkToCli(	int charaindex,	char *pszBuffer,	int color){	if( getBattleDebugMsg( ) != 0		&& CHAR_getFlg( charaindex, CHAR_ISSHOWBATTLEMSG )	){		CHAR_talkToCli( charaindex, -1, pszBuffer,  color );	}}int  BATTLE_BroadCastBase(	int battleindex,	char *pszBuffer,	int color,	int flg){	int i, j, pindex;	BATTLE_ENTRY	*pEntry;	if( flg != 1 && getBattleDebugMsg( ) == 0 )return 0;	if( BATTLE_CHECKINDEX( battleindex ) == FALSE )return BATTLE_ERR_BATTLEINDEX;	for( j = 0; j < 2; j ++ ){		pEntry = BattleArray[battleindex].Side[j].Entry;		for( i = 0; i < BATTLE_ENTRY_MAX; i ++ ){			pindex = pEntry[i].charaindex;			if( CHAR_CHECKINDEX( pindex ) == FALSE )continue;			if( CHAR_getInt( pindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER )continue;			if( CHAR_getFlg( pindex, CHAR_ISSHOWBATTLEMSG ) == FALSE ) continue;			CHAR_talkToCli( pindex, -1, pszBuffer,  color );		}	}	return 0;}// Nuke 20040112 fix for performance/*int  BATTLE_BroadCast(	int battleindex,	char *pszBuffer,	int color){	return BATTLE_BroadCastBase( battleindex, pszBuffer, color, 0 );}int  BATTLE_BroadCastOn(	int battleindex,	char *pszBuffer,	int color){	return BATTLE_BroadCastBase( battleindex, pszBuffer, color, 1 );}*/#ifdef _TAKE_ITEMDAMAGEint BATTLE_ItemCrushCheck( int charaindex , int flg){//flg def 1 att 2	int EquipTbl[CHAR_EQUIPPLACENUM], itemindex;	int i, rndwork;	int Crushs=0;	//char szBuffer[256];	memset( EquipTbl, -1, sizeof( EquipTbl));	if( flg == 2 )	{		itemindex = CHAR_getItemIndex( charaindex, CHAR_ARM);		if( ITEM_CHECKINDEX( itemindex) == TRUE )	{				return CHAR_ARM;		}		return -1;	}else	{		Crushs = rand()%100;		if( Crushs < 50 )	{			rndwork = CHAR_BODY;		}else if( Crushs >= 50 && Crushs < 67 )	{			rndwork = CHAR_HEAD;		}else if( Crushs >= 67 && Crushs < 84 )	{			rndwork = CHAR_DECORATION1;		}else	{			rndwork = CHAR_DECORATION2;		}		for( i = 0; i < CHAR_EQUIPPLACENUM; i ++ ){//CHAR_ARM			itemindex = CHAR_getItemIndex( charaindex, rndwork);			if( ITEM_CHECKINDEX( itemindex) == TRUE && rndwork != CHAR_ARM ){					return rndwork;			}else {				rndwork++;				rndwork=rndwork%5;			}		}	}	return -1;}#elseint BATTLE_ItemCrushCheck( int charaindex ){	if( CHAR_getInt( charaindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ){		return FALSE;	}	if( RAND( 1, gItemCrushRate ) < CHAR_getInt( charaindex, CHAR_LV ) ){		return TRUE;	}else{		return FALSE;	}}#endif#define BREAK_NAME_WEPON 		"武器"#define BREAK_NAME_AROMER 		"防具"#define BREAK_BRACELET			"护腕"#define BREAK_MUSIC 			"乐器"#define BREAK_NECKLACE 			"头饰"#define BREAK_RING 				"戒指"#define BREAK_BELT 				"皮带"#define BREAK_EARRING 			"耳饰"#define BREAK_NOSERING 			"鼻环"#define BREAK_AMULET 			"护身符"#define BREAK_OTHER 			"道具"#ifdef _TAKE_ITEMDAMAGE

⌨️ 快捷键说明

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