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

📄 pet_event.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "version.h"#include <stdio.h>#include <stdlib.h>#include "common.h"#include "object.h"#include "char_base.h"#include "char.h"#include "configfile.h"#include "handletime.h"#include "pet_event.h"#include "npcutil.h"#include "log.h"#include "lssproto_serv.h"// Arminius 8.14 pet talk#include <string.h>#include "npc_exchangeman.h"#include "npc_eventaction.h"#ifdef _PET_TALK//BOOL PetTalk_CheckFree( int meindex, int  toindex, char *buf);BOOL PetTalk_CheckFree( int meindex, int talker, char *buf);BOOL PetTalk_BSCheck(int meindex,int talker,char* buf);BOOL PetTalk_FreeIfCheck(int meindex,int talker,char* buf,int kosuu,int flg, int temp);BOOL PetTalk_WarpManReduce(int meindex,int talker,char *buf);BOOL PetTalk_BigSmallLastCheck(int point1,int mypoint,int flg);BOOL PetTalk_CheckTrans(int meindex,int talker,int trans,int flg);BOOL PetTalk_LevelCheck(int meindex,int talker,int level,int flg);BOOL PetTalk_CheckMyPet( int meindex, int talker, int petLv, int flg, int petid);BOOL PetTalk_ItemCheck(int meindex,int talker,int itemNo,int flg);BOOL PetTalk_CheckMyType( int meindex, int toindex, int kosuu, int flg, int Type );BOOL PetTalk_CheckPetEvent( int meindex, int toindex, char *buf);void PetTalk_RequestMain(int meindex,int talker,char *buf);BOOL PetTalk_AddItem(int meindex, int talker, char *buf);BOOL PetTalk_DelItem(int meindex,int talker,char *buf);BOOL PetTalk_RunEvent( int meindex, int talker, char *buf);BOOL PetTalk_CheckMyFloor( int meindex, int talker, char *buf, int flg);#ifdef _PET_TALKBBIBOOL PET_CheckPlayerBBI( int meindex, int charindex, int BBI, int flg);#endif#ifdef _PET_TALKPRO#elsechar *Pet_TalkGetFunStr( char *temp , char *buf, int len){	char filename[56];	char pathfile[128];	char talkfun[ 10240];	char buf1[256],buf2[256],buf3[256];	FILE *petarg;	char	*cStr=NULL; 	int talkNo=1,mark=1;	char	line[4096];	BOOL find=FALSE;	talkfun[0] ='\0';	while( getStringFromIndexWithDelim( pettalktext,"&",talkNo, buf1, sizeof( buf1) ) != FALSE){		talkNo++;		if( NPC_Util_GetStrFromStrWithDelim( buf1, "PETTEMPNO", buf2, sizeof( buf2)) == NULL  )			continue;		mark=2;		strcpy( filename,"\0");		while( getStringFromIndexWithDelim( buf2,",", mark,buf3,sizeof( buf3)) != FALSE )	{			mark ++;			if( !strcmp( buf3, temp))	{				print("\n buf2=%s",buf2);				if( getStringFromIndexWithDelim( buf2,",", 1,filename,sizeof( filename)) == FALSE )					return NULL;				find = TRUE;				break;			}		}		if( find == TRUE )			break;	}	if( !strcmp( filename, "\0") )		return NULL;	sprintf( pathfile, "%s/pettalk/%s", getNpcdir(), filename);	petarg = fopen( pathfile , "r" );	if( petarg != NULL ) {		while( fgets( line, sizeof( line), petarg ) ) {			if( strlen( talkfun) != 0 ) {				if( talkfun[strlen( talkfun) -1] != '|' ) {					strcatsafe( talkfun, sizeof( talkfun), "|");				}			}			chompex( line);			strcatsafe( talkfun, sizeof( talkfun ),  line);		}		fclose( petarg);	}else	{		return NULL;	}	talkNo = 1;	while( getStringFromIndexWithDelim( talkfun,"}",talkNo, buf, len) != FALSE)	{		talkNo++;		if( NPC_Util_GetStrFromStrWithDelim( buf, "PETTEMPNO", buf2, sizeof( buf2)) == NULL  )			continue;		if( !strcmp( temp, buf2) )		{			cStr = buf;			break;		}	}	return( cStr);}#endifvoid PET_Talkfunc( int meindex, int talkerindex, char *msg, int color){  char buf2[1024], buf3[256];  char TalkType[][16]={"TALKRUN","EVENTRUN","BOTH"};  char AllTalk[PETTALK_MAXID][1024];  int Type=0,j,i;  int talkNo=0;  BOOL FREEs=FALSE;  int buttontype = 0;  int windowtype = 0;#ifdef _PET_TALKPRO  int tPage=-1;#else  int petid=-1;  char tempNo[32], buf1[10240];#endif  int fd = getfdFromCharaIndex( talkerindex);#define RAND(x,y)   ((x-1)+1+ (int)( (double)(y-(x-1))*rand()/(RAND_MAX+1.0)) )  windowtype = WINDOW_MESSAGETYPE_MESSAGE;  buttontype = WINDOW_BUTTONTYPE_OK;  if( NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) 	{		if( NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE)			return;  }  for( i = 0 ; i < 5 ; i++ )	{  	strcpy( AllTalk[i], "\0" );  }   #ifdef _PET_TALKPRO  for( i=0;i<PETTALK_MAXID;i++)	{	  if( pettalktext[i].ID >=0 && pettalktext[i].ID == CHAR_getInt(meindex, CHAR_PETID) )	{		  if( strcmp( pettalktext[i].DATA, "\0") && strlen( pettalktext[i].DATA) > 0 )	{			  //snprintf( buf1, sizeof(buf1), pettalktext[i].DATA);			  tPage=i;			break;		  }	  }  }  if( i == PETTALK_MAXID )	  return;#else  sprintf(tempNo,"%d", CHAR_getInt(meindex, CHAR_PETID));  petid = CHAR_getInt(meindex, CHAR_PETID);  if( Pet_TalkGetFunStr( tempNo , buf1 , sizeof( buf1) ) == NULL )	{  	return;  }#endif  if( CHAR_getInt( meindex, CHAR_LV ) >= CHAR_getInt( meindex, CHAR_LIMITLEVEL)  )	{	Type = 1;  }	//设定为非主人不得与PET互动  if( strcmp( CHAR_getChar( meindex, CHAR_OWNERCDKEY), CHAR_getChar( talkerindex, CHAR_CDKEY) ) ||      strcmp( CHAR_getChar( meindex, CHAR_OWNERCHARANAME), CHAR_getChar( talkerindex, CHAR_NAME) )){#ifdef _PET_TALKPRO	if( NPC_Util_GetStrFromStrWithDelim( pettalktext[tPage].DATA, "NoPlayerMsg", buf3, sizeof( buf3)) != NULL )	{#else  	if( NPC_Util_GetStrFromStrWithDelim( buf1, "NoPlayerMsg", buf3, sizeof( buf3)) != NULL )	{#endif  	}else	{  		sprintf(buf3,"陌生人?我不认识你呀!你是坏人!");  	}  	CHAR_talkToCli( talkerindex, meindex, buf3, color);  	return;	  }  j=0;#ifdef _PET_TALKPRO	while( getStringFromIndexWithDelim( pettalktext[tPage].DATA,"OVER",talkNo, buf2, sizeof( buf2) ) != FALSE){#else	while( getStringFromIndexWithDelim( buf1,"OVER",talkNo, buf2, sizeof( buf2) ) != FALSE){#endif		talkNo++;		if( ( strstr( buf2, TalkType[Type]) == NULL ) && ( strstr( buf2, TalkType[2]) == NULL ) )continue;		if( NPC_Util_GetStrFromStrWithDelim( buf2, "FLOOR", buf3, sizeof( buf3)) != NULL )	{//判断房间号			if( PetTalk_CheckMyFloor( meindex, talkerindex, buf3, 0) == FALSE )continue;		}		if( NPC_Util_GetStrFromStrWithDelim( buf2, "PET", buf3, sizeof( buf3)) != NULL )	{//判断宠物FREE条件			if( PetTalk_CheckFree( meindex, meindex, buf3) != TRUE ) continue;		}		if( NPC_Util_GetStrFromStrWithDelim( buf2, "FREE", buf3, sizeof( buf3) ) == NULL)continue;		if( NPC_ActionPassCheck( meindex, talkerindex, buf3) == FALSE )	continue;//判断玩家FREE条件//		if( ActionNpc_CheckFree( meindex, talkerindex, buf2, 0) == FALSE ) continue; 		if( PetTalk_CheckPetEvent( meindex, talkerindex, buf2) == FALSE )continue;		FREEs = TRUE;  //条件成立		strcpy( AllTalk[j++], buf2 );		if( j > PETTALK_MAXID-1 ) break;	}	talkNo = 0;	if( FREEs == FALSE)	{	//如果全部条件都不成立		j=0;#ifdef _PET_TALKPRO		while( getStringFromIndexWithDelim( pettalktext[tPage].DATA,"OVER",talkNo, buf2, sizeof( buf2) ) != FALSE ){#else		while( getStringFromIndexWithDelim( buf1,"OVER",talkNo, buf2, sizeof( buf2) ) != FALSE ){#endif			talkNo ++;			if( strstr( buf2, "OTHER") == NULL ) continue;			if( NPC_Util_GetStrFromStrWithDelim( buf2, "TalkMsg", buf3, sizeof( buf3)) == NULL) continue;			while( getStringFromIndexWithDelim( buf3,",",j+1, AllTalk[j], sizeof( AllTalk[j]) ) != FALSE ){				j++;			}			break;		}	}  if( j > 0 )	{  	strcpy( buf2, AllTalk[ RAND( 0, (j-1) ) ] );	if( PetTalk_RunEvent( meindex, talkerindex, buf2) == FALSE )	{		sprintf( buf3,"....!");		CHAR_talkToCli( talkerindex, meindex, buf3, color);		return;	}	if( NPC_Util_GetStrFromStrWithDelim( buf2, "TalkMsg", buf3, sizeof( buf3)) == NULL)     {		//sprintf( buf3,"主人,我们去逛逛吧!");		strcpy( buf3, buf2);	}	lssproto_WN_send( fd, windowtype, buttontype, 0,		CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), buf3 );           }  }BOOL PetTalk_CheckMyFloor( int meindex, int talker, char *buf, int flg)	{	char buf1[16];	int Myfloor=-1;	Myfloor = CHAR_getInt( talker, CHAR_FLOOR);		if( strstr( buf, "!") != NULL )	{			getStringFromIndexWithDelim( buf,"!", 2, buf1, sizeof( buf1) );			if( Myfloor == atoi( buf1) )	{				return FALSE;			}		}else	{			if( Myfloor != atoi( buf) )	{				return FALSE;			}		}	return TRUE;}BOOL PetTalk_RunEvent( int meindex, int talker, char *buf){	char buf1[256];	int LimitLevel = -1;	if( Action_RunDoEventAction( meindex, talker, buf) == FALSE )		return FALSE;	if( NPC_Util_GetStrFromStrWithDelim( buf, "RandItem", buf1, sizeof( buf1)) != NULL ){		if( RAND( 0, 10) > 9 )  {			PetTalk_AddItem( meindex, talker, buf1);		}else	{			return FALSE;		}	}	if( NPC_Util_GetStrFromStrWithDelim( buf, "LimitLevel", buf1, sizeof( buf1)) != NULL ){		LimitLevel = atoi( buf1);		CHAR_setInt( meindex, CHAR_LIMITLEVEL, LimitLevel);	}	return TRUE;	}BOOL PetTalk_DelItem(int meindex,int talker,char *buf){	int i = 1, j = 1,k = 1;	char buff3[128];	char buf2[32];	int itemindex;	while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE )	{		k++;		if(strstr(buff3,"*")!=NULL){			int itemno;			int kosuu;			int id;			int cnt=0;							getStringFromIndexWithDelim(buff3,"*",1,buf2,sizeof(buf2));			itemno = atoi(buf2);			getStringFromIndexWithDelim(buff3,"*",2,buf2,sizeof(buf2));			kosuu = atoi(buf2);				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++;												LogItem(							CHAR_getChar( talker, CHAR_NAME ), /* 平乓仿   */							CHAR_getChar( talker, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称							itemindex,#else							ITEM_getInt( itemindex, ITEM_ID),  /* 失奶  丞  寞 */#endif							"WarpManDelItem(NPC收道具後传至某点)",							CHAR_getInt( talker, CHAR_FLOOR),							CHAR_getInt( talker, CHAR_X ), 							CHAR_getInt( talker, CHAR_Y ),							ITEM_getChar( itemindex, ITEM_UNIQUECODE),						ITEM_getChar( itemindex, ITEM_NAME),						ITEM_getInt( itemindex, ITEM_ID)						);						CHAR_DelItem( talker, i);						if(cnt == kosuu){							break;						}					}				}			}				}else{			/*--蓟氏分  寞及失奶  丞毛蓟请---*/			for( j = 0 ;  j < CHAR_MAXITEMHAVE ; j++){				itemindex = CHAR_getItemIndex( talker ,j);				if( ITEM_CHECKINDEX(itemindex) ){					if( atoi( buff3) == ITEM_getInt(itemindex,ITEM_ID)){						LogItem(							CHAR_getChar( talker, CHAR_NAME ), /* 平乓仿   */							CHAR_getChar( talker, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称							itemindex,#else							ITEM_getInt( itemindex, ITEM_ID),  /* 失奶  丞  寞 */#endif							"WarpManDelItem(NPC收道具後传至某点)",							CHAR_getInt( talker,CHAR_FLOOR),							CHAR_getInt( talker,CHAR_X ),							CHAR_getInt( talker,CHAR_Y ),							ITEM_getChar( itemindex, ITEM_UNIQUECODE),						ITEM_getChar( itemindex, ITEM_NAME),						ITEM_getInt( itemindex, ITEM_ID)						);						CHAR_DelItem( talker, j);					}				}			}		}	}	return TRUE;}BOOL PetTalk_AddItem(int meindex, int talker, char *buf){	int itemID,k=1,itemindex=-1;	int spaceNum=5,i;	char buff3[256], msgbuf[64], token[256];	int ret;                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){	k++;		for( i = spaceNum ; i < CHAR_MAXITEMHAVE ; i++ ){			itemindex=CHAR_getItemIndex( talker , i );			if( itemindex == -1 )	{				spaceNum = i+1;				break;			}		}                                                                                                                                                                                                                                                                                                                                      		if( i == CHAR_MAXITEMHAVE )	{			snprintf( msgbuf,sizeof( msgbuf), "主人,你的物品栏已经满了!!");			CHAR_talkToCli( talker, meindex, msgbuf,  CHAR_COLORWHITE);			return FALSE;		}  }  k=1;  while( getStringFromIndexWithDelim(buf , "," , k, buff3, sizeof(buff3)) !=FALSE ){	k++;        itemID = atoi( buff3);        if( itemID  )		itemindex = ITEM_makeItemAndRegist( itemID);		if(itemindex == -1)			continue;		ret = CHAR_addItemSpecificItemIndex( talker, itemindex);		if( ret < 0 || ret >= CHAR_MAXITEMHAVE ) {			ITEM_endExistItemsOne( itemindex);			print ("\n ret error!!");			return FALSE;		}		sprintf( token,"拿到%s",ITEM_getChar( itemindex, ITEM_NAME));		CHAR_talkToCli( talker, -1,token,CHAR_COLORWHITE);                                		CHAR_sendItemDataOne( talker, ret);		                                                                                                  }	return TRUE;	                                                                                                                                                                      }BOOL PetTalk_CheckPetEvent( int meindex, int toindex, char *buf){	char buf1[256],buf2[256];	int k = 0;	if( NPC_Util_GetStrFromStrWithDelim( buf, "EndSetFlg", buf1,sizeof( buf1) ) != NULL )	{		k=1;		while( getStringFromIndexWithDelim(buf1 , "," ,k, buf2, sizeof(buf2) ) != FALSE ){			k++;			NPC_EventSetFlg( toindex, atoi( buf2));			}	}	if( NPC_Util_GetStrFromStrWithDelim( buf, "NowSetFlg", buf1, sizeof( buf1)) != NULL) {		k=1 ;		while(getStringFromIndexWithDelim(buf1 , "," , k, buf2, sizeof(buf2))!= FALSE ){			k++;			NPC_NowEventSetFlg( toindex, atoi( buf2));		}	}	return TRUE;}void PetTalk_RequestMain(int meindex,int talker,char *buf){	int shiftbit;	char buf2[128];	if( NPC_Util_GetStrFromStrWithDelim( buf,"EventNo", buf2,sizeof( buf2) ) == NULL )	{		print("\n pet_event.c err:NOT FIND [EventNo] !!");		return;	}	shiftbit = atoi( buf2);	if( NPC_NowEventCheckFlg( talker, shiftbit) != TRUE )	{		NPC_NowEventSetFlg( talker, shiftbit);	}}BOOL PetTalk_CheckFree( int meindex, int talker, char *buf){	char buff2[256];	char buff3[128];	int i=1,j=1;	int loop=0;	while( getStringFromIndexWithDelim(buf,",",i,buff2,sizeof(buff2)) !=FALSE )	{			i++;		if(strstr(buff2,"&")!=NULL){			j=1;			loop=0;			while( getStringFromIndexWithDelim(buff2,"&",j,buff3,sizeof(buff3)) !=FALSE )	{				j++;				if(PetTalk_BSCheck(meindex,talker,buff3)==FALSE)	{					loop=1;

⌨️ 快捷键说明

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