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

📄 npc_newnpcman.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 3 页
字号:
NPC_NEWNPCMAN_MAN,NPC_NEWNPCMAN_END,};enum	{	NEWNPC_START = 1,	NEWNPC_MAN,	NEWNPC_END,};enum {	NPC_WORK_INDEX = CHAR_NPCWORKINT1,	NPC_WORK_WORKTYPE = CHAR_NPCWORKINT2,	NPC_WORK_CURRENTTIME = CHAR_NPCWORKINT3,};BOOL CHECK_YEARPET( int toindex);static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg);int NPC_NewNpcManDelPet(int meindex,int talker, int petsel);BOOL NPC_NewNpcManAddPet(int meindex, int talker, int petid);//可换四种宠static	int Re_Pet[4];// shanchar uStr[128]="";BOOL NPC_NewNpcManInit( int meindex ){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];	char buf1[256],buf2[256];	int k=1;	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL)	{		print("GambleBank:GetArgStrErr");		return FALSE;	}	if( NPC_Util_GetStrFromStrWithDelim( npcarg, "REPET", buf1, sizeof( buf1)) == NULL )	{		return FALSE;	}	while( getStringFromIndexWithDelim(buf1, ",", k, buf2, sizeof(buf2)) != FALSE )	{		Re_Pet[k-1] = atoi( buf2);		if( Re_Pet[k-1] < 0 )			return FALSE;		k++;		if( (k-1) >= arraysizeof( Re_Pet) )			break;	}    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_NEWNPCMAN );	CHAR_setInt( meindex, CHAR_LOOPINTERVAL, NEWNPCMAN_STANDBY);	CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);	CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);	return TRUE;}void NPC_NewNpcManLoop( int meindex){	//test	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];	char buf1[256],buf2[256];	int k=1;	int fulltime = NEWNPCMAN_WAITTIME;	if( (CHAR_getWorkInt( meindex, NPC_WORK_CURRENTTIME) + fulltime) > NowTime.tv_sec )		return;	CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);	CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);	//test	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL)	{		print("GambleBank:GetArgStrErr");		return;	}	if( NPC_Util_GetStrFromStrWithDelim( npcarg, "REPET", buf1, sizeof( buf1)) == NULL )	{		return;	}	while( getStringFromIndexWithDelim(buf1, ",", k, buf2, sizeof(buf2)) != FALSE )	{		Re_Pet[k-1] = atoi( buf2);		if( Re_Pet[k-1] < 0 )			return;		k++;		if( (k-1) >= arraysizeof( Re_Pet) )			break;	}	//test end}void NPC_NewNpcManTalked( int meindex , int talkerindex , char *msg , int color ){	char buf1[256];	if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {    		return;	}	if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {		if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return;	}    	if( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) >= 0 )	{			sprintf( buf1,"%s","我正忙着呢!");			print("\n NPC_WORK_INDEX = %d ", CHAR_getWorkInt( meindex , NPC_WORK_INDEX));			CHAR_talkToCli( talkerindex, meindex, buf1,  CHAR_COLORYELLOW);		return;	}else	{		CHAR_setWorkInt( meindex , NPC_WORK_INDEX, talkerindex);		print("\n start : NPC_WORK_INDEX = talkerindex");		CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);		NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_START, 0);	}}static void NPC_NewNpcMan_selectWindow( int meindex, int toindex, int num, int flg){	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];	char token[256];	char token_str[][56]={"ERROR_MSG","START_MSG","END_MSG","ERROR_ALL"};	int buttontype = 0, windowtype = 0, windowno = 0;	int fd = getfdFromCharaIndex( toindex);	int petno = 718, petid =1479;	int type_str = 0;	windowtype = WINDOW_MESSAGETYPE_MESSAGE;		if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg)) == NULL)	{		print("GambleBank:GetArgStrErr");		CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);		return ;	}	if( CHAR_getWorkInt( meindex , NPC_WORK_INDEX) != toindex )	{		sprintf( token,"%s","我正忙着呢!");		CHAR_talkToCli( toindex, meindex, token,  CHAR_COLORYELLOW);		return;	}	CHAR_setWorkInt( meindex, NPC_WORK_CURRENTTIME, NowTime.tv_sec);	print("\n switch( num=%d)", num);	switch( num)	{	case NEWNPC_START:		type_str = 1;		buttontype = WINDOW_BUTTONTYPE_OKCANCEL;		windowno = NPC_NEWNPCMAN_START;		break;	case NEWNPC_MAN:		{			if( CHECK_YEARPET( toindex) == TRUE )	{				type_str = 1;				windowtype = WINDOW_MESSAGETYPE_PETSELECT;				buttontype = WINDOW_BUTTONTYPE_CANCEL;				windowno = NPC_NEWNPCMAN_MAN;			}else	{				type_str = 3;				buttontype = WINDOW_BUTTONTYPE_OK;				windowno = NPC_NEWNPCMAN_END;				CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);			}		}	break;	case NEWNPC_END:		type_str = 0;		if( flg <= CHAR_MAXPETHAVE && flg >= 0 )	{			petno = flg;			if( ( petid = NPC_NewNpcManDelPet( meindex, toindex, petno)) >= 0 )	{				if( NPC_NewNpcManAddPet( meindex, toindex, petid) == TRUE )	{					type_str = 2;				}			}		}		CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);		buttontype = WINDOW_BUTTONTYPE_OK;		windowno = NPC_NEWNPCMAN_END;		break;	}	if(NPC_Util_GetStrFromStrWithDelim( npcarg, token_str[ type_str], token,sizeof( token) ) == NULL) {		print("token_str[%d] err !", type_str);		CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);		return;	}	lssproto_WN_send( fd, windowtype, buttontype, windowno,		CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX), token);}void NPC_NewNpcManWindowTalked( int meindex, int talkerindex, int seqno, int select, char *data){	if( CHAR_getInt( talkerindex , CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ) {    		return;	}	if(NPC_Util_isFaceToFace( meindex ,talkerindex , 2) == FALSE) {		if(NPC_Util_isFaceToChara( talkerindex, meindex, 1) == FALSE) return;	}    	print("\n seqno=%d, select=%d", seqno, select);	switch( seqno)	{	case NPC_NEWNPCMAN_START:		if( select != WINDOW_BUTTONTYPE_YES && select != WINDOW_BUTTONTYPE_OK )	{			CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);			return;		}		if(select==WINDOW_BUTTONTYPE_CANCEL)	{			CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);		}else	{			NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_MAN, -1);		}	break;	case NPC_NEWNPCMAN_MAN:		{			int petnum;			petnum = atoi( data)-1;			print("\n petnum=%d", petnum);			if(select==WINDOW_BUTTONTYPE_CANCEL)	{				CHAR_setWorkInt( meindex , NPC_WORK_INDEX, -1);			}else	{				NPC_NewNpcMan_selectWindow( meindex, talkerindex, NEWNPC_END, petnum);			}		}		break;	case NPC_NEWNPCMAN_END:		break;	}}int NPC_NewNpcManDelPet(int meindex,int talker, int petsel){	int defpet;	int fd = getfdFromCharaIndex( talker );	char msgbuf[64], szPet[128];	int k=0;	int petindex=-1;	petindex = CHAR_getCharPet( talker, petsel);	if( !CHAR_CHECKINDEX(petindex) )		return -1;	for( k=0;k<arraysizeof( Re_Pet); k++)	{		if( CHAR_getInt( petindex, CHAR_PETID) == Re_Pet[k] )			break;	}	if( k == arraysizeof( Re_Pet) )	{		return -1;	}else	{		print("\n FIND [%d,%d] & DEL !!", k, Re_Pet[k]);	}	if( CHAR_getWorkInt( CONNECT_getCharaindex( fd), CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE )		return -1;	defpet = CHAR_getInt( talker, CHAR_DEFAULTPET);	if(defpet == petsel)	{		CHAR_setInt( talker, CHAR_DEFAULTPET, -1);		lssproto_KS_send( fd, -1, TRUE);	}	snprintf( msgbuf,sizeof( msgbuf), "交出%s。", CHAR_getChar( petindex, CHAR_NAME));		// shan	if(CHAR_getChar( petindex, CHAR_UNIQUECODE)!=NULL){		strncpy(uStr, CHAR_getChar( petindex, CHAR_UNIQUECODE), sizeof( STRING32));	}else{		strncpy(uStr, "Pet_Unicode_null", sizeof( STRING32));	}		CHAR_talkToCli( talker, -1, msgbuf,  CHAR_COLORWHITE);				LogPet(					CHAR_getChar( talker, CHAR_NAME ),					CHAR_getChar( talker, CHAR_CDKEY ),					CHAR_getChar( petindex, CHAR_NAME),					CHAR_getInt( petindex, CHAR_LV),					"TenseiDel",					CHAR_getInt( talker,CHAR_FLOOR),					CHAR_getInt( talker,CHAR_X ),					CHAR_getInt( talker,CHAR_Y ),					CHAR_getChar( petindex, CHAR_UNIQUECODE)				);	CHAR_setCharPet( talker, petsel, -1);	CHAR_endCharOneArray( petindex );	snprintf( szPet, sizeof( szPet ), "K%d", petsel);	CHAR_sendStatusString( talker, szPet );	return Re_Pet[k];}BOOL NPC_NewNpcManAddPet(int meindex, int talker, int petid){	int	ret;	char msgbuf[64];	int	enemynum;	int	i,j;	int petindex, petindex2;	//检查宠物栏是否有空位	for( i = 0 ;i < CHAR_MAXPETHAVE ; i++) {		petindex = CHAR_getCharPet( talker, i);		if( petindex == -1  )			break;	}    if( i == CHAR_MAXPETHAVE )      {		snprintf( msgbuf,sizeof( msgbuf), "宠物已满!!");		CHAR_talkToCli( talker, -1, msgbuf,  CHAR_COLORWHITE);		return FALSE;	}	enemynum = ENEMY_getEnemyNum();	for( i = 0; i < enemynum; i ++ ) {		//if( ENEMY_getInt( i, ENEMY_ID ) == petid )		if( ENEMY_getInt( i, ENEMY_TEMPNO ) == petid )	{			print("\n ADD FIND [%d,%d]", i, ENEMY_getInt( i, ENEMY_TEMPNO ));			break;		}	}	if( i == enemynum )		return FALSE;	ret = ENEMY_createPetFromEnemyIndex( talker, i);	for( i = 0; i < CHAR_MAXPETHAVE; i ++ )	{		if( CHAR_getCharPet( talker, i ) == ret )			break;	}	if( i == CHAR_MAXPETHAVE )		i = 0;	if( CHAR_CHECKINDEX( ret ) == TRUE ){		CHAR_setMaxExpFromLevel( ret, CHAR_getInt( ret, CHAR_LV ));	}		petindex2 = CHAR_getCharPet(talker, i);	if( !CHAR_CHECKINDEX( petindex2) )		return FALSE;	snprintf( msgbuf,sizeof( msgbuf), "拿到%s。", CHAR_getChar(petindex2,CHAR_NAME));	CHAR_talkToCli( talker, -1, msgbuf,  CHAR_COLORWHITE);	for(j = 0; j < CHAR_MAXPETHAVE; j++){		petindex = CHAR_getCharPet(talker, j);		if( !CHAR_CHECKINDEX( petindex) )			continue;		CHAR_complianceParameter( petindex );		snprintf( msgbuf, sizeof( msgbuf ), "K%d", j );		CHAR_sendStatusString( talker, msgbuf );		snprintf( msgbuf, sizeof( msgbuf ), "W%d", j );		CHAR_sendStatusString( talker, msgbuf );	}	// shan	CHAR_setChar(petindex2, CHAR_UNIQUECODE, uStr);		LogPet(		CHAR_getChar( talker, CHAR_NAME ),		CHAR_getChar( talker, CHAR_CDKEY ),		CHAR_getChar( petindex2, CHAR_NAME),		CHAR_getInt( petindex2, CHAR_LV),		"TenseiGet",		CHAR_getInt( talker,CHAR_FLOOR),		CHAR_getInt( talker,CHAR_X ),		CHAR_getInt( talker,CHAR_Y ),		CHAR_getChar( petindex2, CHAR_UNIQUECODE)	);	return TRUE;}BOOL CHECK_YEARPET( int toindex){			int i,k,petindex=-1;			for( i=0;i<CHAR_MAXPETHAVE;i++)	{				petindex = CHAR_getCharPet( toindex, i);				if( !CHAR_CHECKINDEX(petindex) )					continue;				for( k=0;k<arraysizeof( Re_Pet); k++)	{					if( CHAR_getInt( petindex, CHAR_PETID) == Re_Pet[k] )	{						print("\n check yearpet find it");						return TRUE;					}				}			}			return FALSE;}#endif*/#endif

⌨️ 快捷键说明

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