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

📄 npc_transmigration.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 4 页
字号:
#include "version.h"#include <string.h>#include <math.h>#include "char.h"#include "object.h"#include "char_base.h"#include "npcutil.h"#include "lssproto_serv.h"#include "enemy.h"#include "log.h"#include "battle.h"#include "readmap.h"#include "npc_transmigration.h"#ifdef _PET_TRANS#include "npc_pettransman.h"#endifstatic void NPC_Transmigration_selectWindow( int meindex, int toindex, int num);static int NPC_TransmigrationCheck(int meindex, int talker);BOOL NPC_TransmigrationAddPet(int meindex, int talker, int petid);//楮醒及烂聒int NPC_StartpointCheck(int meindex,int talker);BOOL NPC_TransmigrationMain(int meindex, int toindex, char *buf);int NPC_TransmigrationFlg_CLS(int meindex, int toindex);BOOL NPC_TransmigrationDelPet(int meindex, int talker);BOOL NPC_TransmigrationStatus(int meindex, int toindex,int *work);BOOL NPC_TransmigratiomWarp(int meindex, int toindex, char *buf);void s_eventsetend( int charaindex, int shiftbit );#ifdef _PET_TRANSint Pet_Select;#endif/******************************************************************/BOOL NPC_TransmigrationInit( int meindex ){	/*--平乓仿及正奶皿毛涩烂--*/    CHAR_setInt( meindex , CHAR_WHICHTYPE , CHAR_TYPETRANSMIGRATION );    return TRUE;}/******************************************************************/void NPC_TransmigrationTalked( int meindex , int talkerindex , char *szMes ,int color ){#ifdef _PET_TRANS	int i,petindex;#endif		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("savepoot=%d",CHAR_getInt( talkerindex, CHAR_SAVEPOINT));//	NPC_StartpointCheck( meindex, talkerindex);#ifdef _PET_TRANS	int petNum = 0;		//检查所需(宠物/精灵) & 检查所需物品  for(i=0 ; i < CHAR_MAXPETHAVE ; i++)	{    petindex = CHAR_getCharPet( talkerindex, i);    if( petindex == -1  )        continue;    //检查宠物的 ID 是否为玛雷菲雅 1479 ID 为718    if( CHAR_getInt( petindex, CHAR_PETID) == 718#ifdef _PET_2TRANS		|| CHAR_getInt( petindex, CHAR_PETID) == 401#endif		){		  if( CHAR_getInt( talkerindex, CHAR_LV) < 80 )	{				CHAR_talkToCli( talkerindex, -1, "由于你的等级小于80,没能力进行转宠!",  CHAR_COLORWHITE);				return 0;		  }else if( CHAR_getInt( petindex, CHAR_LV) > 79 ){		 		char szPet[512];		    CHAR_setCharPet( talkerindex, i, -1);		    CHAR_endCharOneArray( petindex );		    snprintf( szPet, sizeof( szPet ), "K%d", i);		    CHAR_sendStatusString( talkerindex, szPet );		    CHAR_talkToCli( talkerindex, -1, "清除你身上非法玛雷菲雅", CHAR_COLORRED);		    return 0;		  }else	if( CHAR_getInt( petindex, CHAR_LV) == 79 ) {				if( strcmp( CHAR_getChar( petindex, CHAR_OWNERCDKEY), CHAR_getChar( talkerindex, CHAR_CDKEY) ) ||					strcmp( CHAR_getChar( petindex, CHAR_OWNERCHARANAME), CHAR_getChar( talkerindex, CHAR_NAME) ))	{					CHAR_talkToCli( talkerindex, -1, "你身上的玛雷菲雅,并不是你的啊!",  CHAR_COLORWHITE);					return 0;				}				{					int LevelUpPoint = CHAR_getInt( petindex, CHAR_ALLOCPOINT );					int work[4];					work[3] =(( LevelUpPoint >> 24 ) & 0xFF);					work[0] = (( LevelUpPoint >> 16 ) & 0xFF);					work[1] = (( LevelUpPoint >> 8 ) & 0xFF);					work[2] = (( LevelUpPoint >> 0 ) & 0xFF);					if(work[0]<15 || work[1]<15 || work[2]<15 || work[3]<15){						CHAR_talkToCli( talkerindex, petindex, "操,你太不爱惜我了,还要我帮你转宠?没门!",  CHAR_COLORWHITE);						return 0;					}				}				petNum ++;		  }		}	}		if( petNum > 1 )	{		CHAR_talkToCli( talkerindex, -1, "你怎会有那麽多玛雷菲雅呢?",  CHAR_COLORWHITE);		return 0;  }else if( petNum == 1 )	{    CHAR_setWorkInt(talkerindex,CHAR_WORKSHOPRELEVANT,1);    NPC_PetTransMan_selectWindow( meindex, talkerindex,0,-1);  }else {#endif    CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT,1);    NPC_Transmigration_selectWindow( meindex, talkerindex, 0);#ifdef _PET_TRANS  }#endif	//原转生	//CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT,1);	//NPC_Transmigration_selectWindow( meindex, talkerindex, 0);	}static void NPC_Transmigration_selectWindow( int meindex, int toindex, int num){	char token[1024];	char npcarg[NPC_UTIL_GETARGSTR_BUFSIZE];	char buf[2048];	char buf2[512];	char tmp[512];	char s_tensei[64];	int buttontype = 0;	int windowtype = 0;	int windowno = 0;	int tenseiNo = 1;	int fd = getfdFromCharaIndex( toindex);	int i = 1;	BOOL tenflg = FALSE;	char *elder[4] = {"samugiru","marinasu","jaja","karutarna"};	int point;	int ten_no;	if(NPC_Util_GetArgStr( meindex, npcarg, sizeof(npcarg))==NULL){		print("Tensei:GetArgStrErr");		return;	}  	windowtype = WINDOW_MESSAGETYPE_MESSAGE;	tenseiNo = CHAR_getInt( toindex, CHAR_TRANSMIGRATION);	tenseiNo++;	if(CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT) >= 2){		tenseiNo--;	}	 	sprintf(s_tensei,"TENSEI:%d",tenseiNo);	while(getStringFromIndexWithDelim( npcarg,"END",i,buf,sizeof( buf))	!= FALSE){		i++;		if(strstr(buf,s_tensei) != NULL) {		 tenflg = TRUE;		 break;		}	}        //ttom//        print("\nTrans meindex=%d,toindex=%d,num=%d",meindex,toindex,num);        //ttom        CONNECT_set_state_trans(fd,6);        //ttom end         	switch( num){	  case 0:	        //ttom	        //CONNECT_set_state_trans(fd,0);	        //ttom end		ten_no = NPC_TransmigrationCheck(meindex, toindex); 		if(#ifdef _TRANS_6			ten_no < 6#else			ten_no < 5#endif//_TRANS_6			&& ten_no >= 0){	  		//椭瘀弁伉失□	  		if(NPC_Util_GetStrFromStrWithDelim( buf,"startmsg", token,sizeof( token) ) == NULL)				{					print("startmsgErr");					return;				}			  	buttontype = WINDOW_BUTTONTYPE_NEXT;			  	//ttom			  	CONNECT_set_state_trans(fd,0);			  	//ttom end			  	                                                                                                                                		}else if(#ifdef _TRANS_6			ten_no == 6#else			ten_no == 5#endif//_TRANS_6			){			//鳖戏毛ㄤ荚支匀凶		  	if(NPC_Util_GetStrFromStrWithDelim( npcarg,"maxmsg", token,sizeof( token) ) == NULL)			{				print("maxmsgErr");				return;			}			buttontype = WINDOW_BUTTONTYPE_OK;		}else{			//椭瘀弁伉失仄化卅中			if(NPC_Util_GetStrFromStrWithDelim( buf,"nonemsg", token,sizeof( token) ) == NULL)			{				print("nonemsgErr");				return;			}			buttontype = WINDOW_BUTTONTYPE_OK;		}		windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_START;		  	 	 	break;	 		 	case 1:		 	if(NPC_Util_GetStrFromStrWithDelim( buf,"mainmsg", token,sizeof( token) ) == NULL)			{				print("mainmsgErr");				return;			}		  	buttontype = WINDOW_BUTTONTYPE_OKCANCEL;		  	windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_MAIN; 	 	break;	 		 	case 2:      	 	        // Robin 2001/03/05 Tensei Check			//if(!CHAR_getWorkInt(toindex,CHAR_TENSEICHECKED))  return;	 	       	 		point = NPC_StartpointCheck( meindex, toindex);	 		if(point == -1) {	 			return;	 		}	 					NPC_Util_GetStrFromStrWithDelim( npcarg,elder[point],buf2,sizeof( buf2));			if(NPC_TransmigrationMain(meindex, toindex, buf2) ==  FALSE) 			{				return;			}	 			 		sprintf( tmp, "yesmsg%d", 	 						CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT));	 			 		if(NPC_Util_GetStrFromStrWithDelim( buf,tmp, token,sizeof( token) ) == NULL)			{				print("yesmsgErr");				return;			}			CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 					CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT) +1			);	 		sprintf( tmp, "yesmsg%d", 	 						CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT));				 		if(strstr(buf, tmp) == NULL)	{				buttontype = WINDOW_BUTTONTYPE_OK;		  		windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_END; 			}else	{				buttontype = WINDOW_BUTTONTYPE_NEXT;		  		windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_END; 			}	 	break;		 	case 3:	 					/*--平□伐□玉及民尼永弁毛垫丹--*/			if(NPC_Util_GetStrFromStrWithDelim( buf,"nomsg", token,sizeof( token) ) == NULL)			{				print("nomsgErr");				return;			}		  	buttontype = WINDOW_BUTTONTYPE_OK;	  		windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_NONE; 	 			 	break;	 	case 4:	 		sprintf( tmp, "yesmsg%d", 	 						CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT));	 		if(NPC_Util_GetStrFromStrWithDelim( buf,tmp, token,sizeof( token) ) == NULL)			{				print("yesmsgErr");				return;			}			CHAR_setWorkInt( toindex, CHAR_WORKSHOPRELEVANT, 					CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT) +1			);	 		sprintf( tmp, "yesmsg%d", 	 						CHAR_getWorkInt( toindex, CHAR_WORKSHOPRELEVANT));				 		if(strstr(buf, tmp) == NULL)			{				buttontype = WINDOW_BUTTONTYPE_OK;		  		windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_END; 			}else{				buttontype = WINDOW_BUTTONTYPE_NEXT;		  		windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_END; 			}				 			break;		case 5:                        // Robin 2001/03/05 Tensei Check                        //if(!CHAR_getWorkInt(toindex,CHAR_TENSEICHECKED))  return;	 		point = NPC_StartpointCheck( meindex, toindex);	 		if(point == -1) return;			NPC_Util_GetStrFromStrWithDelim( npcarg,elder[point],buf2,sizeof( buf2));			NPC_TransmigratiomWarp(meindex, toindex, buf2);//			buttontype = WINDOW_BUTTONTYPE_OK;//	  		windowno = CHAR_WINDOWTYPE_TRANSMIGRATION_END; 			return;		break;	 		}//	makeEscapeString( token, escapedname, sizeof(escapedname));	/*-仇仇匹霜耨允月--*/	lssproto_WN_send( fd, windowtype, 					buttontype, 					windowno,					CHAR_getWorkInt( meindex, CHAR_WORKOBJINDEX),					token);}/*------------------------------------------------------------------------------------*/void NPC_TransmigrationWindowTalked( int meindex, int talkerindex, 								int seqno, int select, char *data){	int datanum = -1;	int fd = getfdFromCharaIndex( talkerindex);	if( NPC_Util_CharDistance( talkerindex, meindex ) > 2) {		return;	}       //ttom       //CONNECT_set_state_trans(fd,6);       //ttom end	datanum = atoi( data);	switch( seqno) {	  case CHAR_WINDOWTYPE_TRANSMIGRATION_START:		if( select == WINDOW_BUTTONTYPE_NEXT) {		        //ttom		        if(CONNECT_get_state_trans(fd)==0){ } else return;		        //ttom end		        NPC_Transmigration_selectWindow( meindex, talkerindex,1);			//ttom			CONNECT_set_state_trans(fd,1);			//ttom end			         		}	  	break;			  case CHAR_WINDOWTYPE_TRANSMIGRATION_MAIN:	 	if( select == WINDOW_BUTTONTYPE_OK) {	 	        //ttom	 	        if(CONNECT_get_state_trans(fd)==1){ } else return;	 	        //ttom end	 	        NPC_Transmigration_selectWindow( meindex, talkerindex, 2);	 	        //ttom	 	        CONNECT_set_state_trans(fd,2);	 	        //ttom end	 	}else if(select == WINDOW_BUTTONTYPE_CANCEL) {			NPC_Transmigration_selectWindow( meindex, talkerindex, 3);		}	    break;	  case CHAR_WINDOWTYPE_TRANSMIGRATION_END:	 	if( select == WINDOW_BUTTONTYPE_NEXT) {	 	        //ttom	 	        if(CONNECT_get_state_trans(fd)==2){ } else return;	 	         //ttom end	 	        NPC_Transmigration_selectWindow( meindex, talkerindex, 4);	 	        //ttom	 	        CONNECT_set_state_trans(fd,4);	 	        //ttom end	 	}else if( select == WINDOW_BUTTONTYPE_OK) {	 	        //ttom	 	        if(CONNECT_get_state_trans(fd)==4){ } else return;	 	        //ttom end	 	        NPC_Transmigration_selectWindow( meindex, talkerindex, 5);		}		break;		//ANDY_ADD 10/19#ifdef _PET_TRANS	case CHAR_WINDOWTYPE_PETTRANS_START:	//开始对话		if( select == WINDOW_BUTTONTYPE_NEXT) {			NPC_PetTransMan_selectWindow( meindex, talkerindex, 1, 0);		}		break;

⌨️ 快捷键说明

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