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

📄 pet_event.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
					break;				}			}			if(loop==0) {				CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, TRUE );				return TRUE;			}		}else{			if( PetTalk_BSCheck( meindex, talker, buff2) == TRUE ){				CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, TRUE );				return TRUE;			}		}	}	CHAR_setWorkInt( talker, CHAR_WORKWARPCHECK, FALSE );	return FALSE;}BOOL PetTalk_BSCheck(int meindex,int talker,char* buf){	char buff2[128];	int kosuu,temp=-1,flg=0;	char buff1[128],buff3[128];	if(strstr( buf, "-") != NULL)	{		//buff3为抓宠物ID		getStringFromIndexWithDelim( buf, "-", 2, buff3, sizeof(buff3));		temp = atoi( buff3);		getStringFromIndexWithDelim( buf, "-", 1, buff1, sizeof(buff1));		strcpy( buf, buff1);        }                         	if(strstr( buf, "<") != NULL){		getStringFromIndexWithDelim( buf, "<", 2, buff2, sizeof(buff2));		kosuu = atoi( buff2);		getStringFromIndexWithDelim( buf, "<", 1, buff2, sizeof(buff2));		if(PetTalk_FreeIfCheck( meindex, talker, buff2, kosuu, 1, temp)==TRUE){			return TRUE;		}	}else if(strstr( buf, ">") != NULL){		getStringFromIndexWithDelim( buf, ">", 2, buff2, sizeof(buff2));		kosuu = atoi(buff2);		getStringFromIndexWithDelim( buf, ">" ,1, buff2, sizeof(buff2));		if(PetTalk_FreeIfCheck( meindex, talker, buff2, kosuu, 2, temp)==TRUE){			return TRUE;		}	}else if(strstr( buf, "!" ) != NULL){		getStringFromIndexWithDelim( buf, "!=", 2, buff2, sizeof(buff2));		kosuu = atoi( buff2);		getStringFromIndexWithDelim( buf, "!=", 1, buff2, sizeof(buff2));		if(PetTalk_FreeIfCheck( meindex, talker, buff2, kosuu, 0, temp) == TRUE){			return FALSE;		}else{			return TRUE;		}	}else if(strstr( buf, "=") != NULL){		getStringFromIndexWithDelim( buf, "=", 2, buff2, sizeof(buff2));		kosuu = atoi( buff2);		getStringFromIndexWithDelim( buf, "=", 1, buff2, sizeof(buff2));		if( strstr( buf, "PET"))	{			flg = 3;		}		if(strstr( buf, "*") != NULL){			if( PetTalk_WarpManReduce( meindex, talker, buf)==TRUE){				return TRUE;			}		}else if(PetTalk_FreeIfCheck( meindex, talker, buff2, kosuu, flg, temp)==TRUE){			return TRUE;		}	}	return FALSE;}BOOL PetTalk_FreeIfCheck(int meindex,int talker,char* buf,int kosuu,int flg, int temp){	int Type = -1;	if(strcmp(buf,"LV")==0){		if(PetTalk_LevelCheck(meindex,talker,kosuu,flg)==TRUE){				return TRUE;		}	}		if( strcmp( buf, "TRANS") == 0 )	{		if( PetTalk_CheckTrans( meindex, talker, kosuu, flg) == TRUE )			return TRUE;	}	if( strcmp( buf, "PET") == 0 )	{		if( temp > 0 )	{			if( PetTalk_CheckMyPet( meindex, talker, kosuu, flg, temp) == TRUE )				return TRUE;		}else			return FALSE;	}		if(strcmp( buf, "ITEM")==0){		if(PetTalk_ItemCheck(meindex,talker,kosuu,flg)==TRUE){				return TRUE;		}	}	if(strcmp( buf, "ENDEV")==0){		if(NPC_EventCheckFlg( talker, kosuu)==TRUE){				return TRUE;		}	}	if(strcmp( buf, "NOWEV")==0){		if(NPC_NowEventCheckFlg( talker, kosuu)==TRUE){				return TRUE;		}	}	if(strcmp( buf, "HP" ) == 0 )	{		Type = 0;		if( PetTalk_CheckMyType( meindex, talker, kosuu, flg, Type ) == TRUE )	{			return TRUE;		}	}#ifdef _PET_TALKBBI    if(strcmp( buf, "BBI" ) == 0 )	{		if( PET_CheckPlayerBBI( meindex, talker, kosuu, flg)== TRUE)	{			return TRUE;		}	}#endif	return FALSE;}BOOL PetTalk_CheckMyType( int meindex, int toindex, int kosuu, int flg, int Type )	{	int MyType=0,MyMaxType=0;	switch( Type )	{	case 0:	//HP		MyType = CHAR_getInt( toindex, CHAR_HP);		MyMaxType = CHAR_getWorkInt( toindex, CHAR_WORKMAXHP);		MyMaxType = (MyMaxType * kosuu )/ 100;		if( PetTalk_BigSmallLastCheck( MyMaxType, MyType , flg ) == TRUE )	{			return TRUE;		}	break;	}	return FALSE;}BOOL PetTalk_WarpManReduce(int meindex,int talker,char *buf){	char buf2[512];	char buf3[256];	int id=0;	int i;	int itemindex;	int itemno;	int kosuu;	int cnt=0;		getStringFromIndexWithDelim(buf,"=",2,buf2,sizeof(buf2));	getStringFromIndexWithDelim(buf2,"*",1,buf3,sizeof(buf3));	itemno = atoi(buf3);	getStringFromIndexWithDelim(buf2,"*",2,buf3,sizeof(buf3));	kosuu = atoi(buf3);	for( i=0 ; i < CHAR_MAXITEMHAVE;i++ ){		itemindex=CHAR_getItemIndex( talker , i );		if( ITEM_CHECKINDEX(itemindex) ){			id=ITEM_getInt(itemindex ,ITEM_ID );			if(itemno==id){				cnt++;				if(cnt==kosuu){					return TRUE;				}			}		}	}	return FALSE;}BOOL PetTalk_LevelCheck(int meindex,int talker,int level,int flg){	int mylevel;	mylevel=CHAR_getInt(talker,CHAR_LV);	if(PetTalk_BigSmallLastCheck(level,mylevel,flg)==TRUE)	{		return TRUE;	}	return FALSE;}BOOL PetTalk_CheckTrans(int meindex,int talker,int trans,int flg){	int myTrans;	myTrans=CHAR_getInt(talker, CHAR_TRANSMIGRATION);	if( PetTalk_BigSmallLastCheck( trans, myTrans, flg ) == TRUE )	{             return TRUE;        }                   	return FALSE;}BOOL PetTalk_CheckMyPet( int meindex, int talker, int petLv, int flg, int petid){	int petsel,petindex=-1;		for(petsel=0 ; petsel < CHAR_MAXPETHAVE ; petsel++)     {		petindex = CHAR_getCharPet( talker, petsel);		if( petindex == -1  )			continue;	        if(CHAR_getInt( petindex, CHAR_PETID) !=  petid )			continue;		break;	}	if( petsel  == CHAR_MAXPETHAVE )	{		return FALSE;	}else	{	//找到条件宠		if( PetTalk_BigSmallLastCheck( petLv, CHAR_getInt( petindex, CHAR_LV), flg ) == TRUE  )			return TRUE;	}	return FALSE;                                             }BOOL PetTalk_ItemCheck(int meindex,int talker,int itemNo,int flg){	int i;	int itemindex=-1;	int id;	for( i=0;i<CHAR_MAXITEMHAVE;i++ ){		itemindex = CHAR_getItemIndex( talker , i );		if( ITEM_CHECKINDEX( itemindex) )	{			id=ITEM_getInt(itemindex ,ITEM_ID );			if( PetTalk_BigSmallLastCheck(itemNo,id,flg) == TRUE )				return TRUE;		}	}	return FALSE;}BOOL PetTalk_BigSmallLastCheck(int point1,int mypoint,int flg){	if(flg==0){		if(point1==mypoint) {			return TRUE;		}		}else if(flg==1){		if(mypoint < point1) {			return TRUE;		}	}else if(flg==2){		if(mypoint > point1) {			return TRUE;		}	}	return FALSE;}#elsevoid PET_Talkfunc(  int meindex, int talkerindex, char *msg, int color){	print("\n PET_Talkfunc(...) return; ");	return;}#endifvoid PET_CleanFreePetAll(){	int objindex;	int objmaxnum = OBJECT_getNum();	for( objindex=0; objindex<objmaxnum; objindex++)	{		if( CHECKOBJECT( objindex ) == FALSE ) continue;		PET_CleanPetdeletetime( objindex);	}}int PET_CleanPetdeletetime( int objmeindex){	int		pindex;	if( OBJECT_getType(objmeindex) != OBJTYPE_CHARA ) return 0;	pindex = OBJECT_getIndex( objmeindex);	if( CHAR_getInt( pindex, CHAR_WHICHTYPE) != CHAR_TYPEPET) return 0;	if( CHAR_getInt( pindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) {	}else if( CHAR_getWorkInt( pindex, CHAR_WORKPETFOLLOWMODE) == CHAR_PETFOLLOW_NOW ){	}else {#ifdef _PET_LOSTPET//		CHAR_CharSaveLostPet( pindex, 0);#endif		LogPet(			"系统",			"Watchfunc",			CHAR_getChar( pindex, CHAR_NAME),			CHAR_getInt( pindex, CHAR_LV),			"timeout_lost(系统清除-地上自由宠)",			CHAR_getInt( pindex, CHAR_FLOOR),			CHAR_getInt( pindex,CHAR_X ),			CHAR_getInt( pindex,CHAR_Y ),			CHAR_getChar( pindex, CHAR_UNIQUECODE)   // shan 2001/12/14		);		CHAR_CharaDelete(pindex);		return 1;	}	return 0;}void PET_CHECKFreePetIsIt( int petindex){	int petputtime, defmaxtime;	defmaxtime = getPetdeletetime();	petputtime = CHAR_getInt( petindex, CHAR_PUTPETTIME);	if( NowTime.tv_sec < ( petputtime + getPetdeletetime() ) ) return;#ifdef _PET_LOSTPET//	CHAR_CharSaveLostPet( petindex, 0);#endif	LogPet(			"系统",			"Watchfunc",			CHAR_getChar( petindex, CHAR_NAME),			CHAR_getInt( petindex, CHAR_LV),			"timeout_lost(系统清除-地上自由宠)",			CHAR_getInt( petindex, CHAR_FLOOR),			CHAR_getInt( petindex,CHAR_X ),			CHAR_getInt( petindex,CHAR_Y ),			CHAR_getChar( petindex, CHAR_UNIQUECODE)   // shan 2001/12/14		);	CHAR_CharaDelete(petindex);}#define PETFOLLOW_TIME 60*60void PET_Watchfunc( int objmeindex, int objmoveindex, CHAR_ACTION act, int x, int y, int dir,                           int* opt, int optlen ){	int		pindex;	int		petindex;	int		petputtime;		if( OBJECT_getType(objmoveindex) != OBJTYPE_CHARA ) return;	pindex = OBJECT_getIndex( objmoveindex);	if( CHAR_getInt( pindex, CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) return;	petindex = OBJECT_getIndex( objmeindex);	petputtime = CHAR_getInt( petindex, CHAR_PUTPETTIME);		if( CHAR_getInt( petindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) {			//宠邮不处理		}else if( CHAR_getWorkInt( petindex, CHAR_WORKPETFOLLOWMODE) == CHAR_PETFOLLOW_NOW ){			if( NowTime.tv_sec >= (petputtime + 60*60) ) {				int	ownerindex = CHAR_getWorkInt( petindex, CHAR_WORKPLAYERINDEX);				if( CHAR_CHECKINDEX( ownerindex) ){					if( CHAR_pickupFollowPet( ownerindex, petindex ) )	{						return;					}					CHAR_talkToCli( ownerindex, -1, "溜宠太久,宠物走失了!!", CHAR_COLORYELLOW );				}#ifdef _PET_LOSTPET				CHAR_CharSaveLostPet( petindex, 1);				LogPet(					"系统",					"Watchfunc",					CHAR_getChar( petindex, CHAR_NAME),					CHAR_getInt( petindex, CHAR_LV),					"timeout_lost(系统扣留-溜宠自由宠)",					CHAR_getInt( petindex, CHAR_FLOOR),					CHAR_getInt( petindex,CHAR_X ),					CHAR_getInt( petindex,CHAR_Y ),					CHAR_getChar( petindex, CHAR_UNIQUECODE)   // shan 2001/12/14				);				print("系统扣留-溜宠自由宠:%s\n", CHAR_getUseName( petindex));				CHAR_CharaDelete( petindex);#else				CHAR_setInt( petindex, CHAR_PUTPETTIME, NowTime.tv_sec);				CHAR_setWorkInt( petindex, CHAR_WORKPETFOLLOWMODE, CHAR_PETFOLLOW_NONE);				LogPet(					CHAR_getChar( pindex, CHAR_NAME ),					CHAR_getChar( pindex, CHAR_CDKEY ),					CHAR_getChar( petindex, CHAR_NAME),					CHAR_getInt( petindex, CHAR_LV),					"timeout_lost(溜宠太久,宠物走失))",					CHAR_getInt( pindex,CHAR_FLOOR),					CHAR_getInt( pindex,CHAR_X ),	 				CHAR_getInt( pindex,CHAR_Y ),					CHAR_getChar( petindex, CHAR_UNIQUECODE)   // shan 2001/12/14				);#endif				return;			}		}else{			PET_CHECKFreePetIsIt( petindex);		}	if( CHAR_getInt( petindex, CHAR_MAILMODE) == CHAR_PETMAIL_IDLE3 ||		CHAR_getInt( petindex, CHAR_MAILMODE) == CHAR_PETMAIL_IDLE2){		if( act == CHAR_ACTATTACK) {			if( NPC_Util_isFaceToChara( pindex,petindex,1 ) == TRUE ) {				int action[2] = { CHAR_ACTDAMAGE, CHAR_ACTGUARD};				CHAR_sendWatchEvent( objmeindex, action[RAND(0,1)], NULL,0,FALSE);				CHAR_setWorkInt( petindex, CHAR_WORKACTION, act);			}		}	}else if( CHAR_getInt( petindex, CHAR_MAILMODE) != CHAR_PETMAIL_NONE) {		;	}else if( CHAR_getWorkInt( petindex, CHAR_WORKFIXAI) >= 100 ) {		int	workpindex = CHAR_getWorkInt( petindex, CHAR_WORKPLAYERINDEX);		if( act == CHAR_ACTWALK && CHAR_CHECKINDEX( workpindex) && workpindex == pindex ){			dir = NPC_Util_GetDirCharToChar( petindex, pindex, 0);			if( dir != -1 ) {				if( CHAR_getInt( petindex, CHAR_DIR) != dir ) {					CHAR_setInt( petindex, CHAR_DIR, dir);					CHAR_sendWatchEvent( CHAR_getWorkInt( petindex, CHAR_WORKOBJINDEX),											CHAR_ACTTURN,NULL,0,TRUE);				}			}		}else if( NPC_Util_isFaceToFace( petindex, pindex, 2 ) == TRUE ) {			switch( act) {			  case CHAR_ACTATTACK:			  case CHAR_ACTDAMAGE:			  case CHAR_ACTDOWN:			  case CHAR_ACTSTAND:			  case CHAR_ACTACTIONWALK:			  case CHAR_ACTGUARD:              case CHAR_ACTACTIONSTAND:				CHAR_sendWatchEvent( objmeindex, act, NULL,0,FALSE);				CHAR_setWorkInt( petindex, CHAR_WORKACTION, act);				break;			  default:			  	break;			}		}	}else {	}	return;}#ifdef _PET_TALKBBIBOOL PET_CheckPlayerBBI( int meindex, int charindex, int BBI, int flg){	int MyBBI;	if( !CHAR_CHECKINDEX( charindex))		return FALSE;	if( BBI < 0 )		return FALSE;	MyBBI = CHAR_getInt( charindex, CHAR_BASEIMAGENUMBER);	if(flg==0){		if(BBI==MyBBI)			return TRUE;	}else if(flg==1){		if(BBI < MyBBI)			return TRUE;	}else if(flg==2){		if(BBI > MyBBI)			return TRUE;	}	return FALSE;}#endif

⌨️ 快捷键说明

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