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

📄 npc_transmigration.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 4 页
字号:
	case CHAR_WINDOWTYPE_PETTRANS_SELECT:	//是否让宠物转生		if( select == WINDOW_BUTTONTYPE_YES) {				NPC_PetTransMan_selectWindow( meindex, talkerindex, 2, 0);		}else	{			NPC_PetTransMan_selectWindow( meindex, talkerindex, 5, 0);		}	break;	case CHAR_WINDOWTYPE_PETTRANS_SELPET:	//选宠		if(select==WINDOW_BUTTONTYPE_CANCEL)	{			NPC_PetTransMan_selectWindow( meindex, talkerindex, 5,-1 );		}else	{			Pet_Select = datanum;				NPC_PetTransMan_selectWindow( meindex, talkerindex, 3, datanum );		}	break;	case CHAR_WINDOWTYPE_PETTRANS_MAIN1:	//确定宠物	确定/取消		if(select==WINDOW_BUTTONTYPE_YES){			NPC_PetTransMan_selectWindow( meindex, talkerindex, 4, Pet_Select);		}else	{			NPC_PetTransMan_selectWindow( meindex, talkerindex, 5, -1);		}	break;       	case CHAR_WINDOWTYPE_PETTRANS_END:	//宠物转生结束结束		CHAR_setWorkInt( talkerindex, CHAR_WORKSHOPRELEVANT, 0);	break;	#endif	}}//************************************************************//************************************************************BOOL NPC_TransmigratiomWarp(int meindex, int toindex, char *buf){	char buf2[512];	char buf3[128];	char buf4[64];	int floor=0 , x = 0, y = 0;	int i = 1;	int ret;		while(getStringFromIndexWithDelim( buf,",",i,buf2,sizeof( buf2))	!= FALSE)	{		i++;		if(strstr(buf2,"Warp") != NULL)		{			getStringFromIndexWithDelim( buf2 ,"=" ,2, buf3 ,sizeof(buf3));			//白夫失			ret = getStringFromIndexWithDelim( buf3,".",1 ,buf4 ,sizeof( buf4));			if(ret ==FALSE) return FALSE;			floor = atoi(buf4);			ret = getStringFromIndexWithDelim( buf3,".",2 ,buf4 ,sizeof( buf4));			if(ret ==FALSE) return FALSE;			x = atoi(buf4);			ret = getStringFromIndexWithDelim( buf3,".",3 ,buf4 ,sizeof( buf4));			if(ret ==FALSE) return FALSE;			y = atoi(buf4);		}	}        	//伐□皿燮及民尼永弁    if( MAP_IsValidCoordinate( floor, x, y )== FALSE ){		return FALSE;	}        //ttom        /*        {            int tenseiNo;            tenseiNo=CHAR_getInt( toindex, CHAR_TRANSMIGRATION);            CHAR_setInt( toindex,CHAR_SKILLUPPOINT,tenseiNo*10);            print("\n the set the skillpoint %d",tenseiNo*10);            CHAR_sendStatusString( toindex , "P");        }        */        //ttom                                                   	//伐□皿今六月	 CHAR_warpToSpecificPoint(toindex, floor, x, y);	return TRUE;}//************************************************************////	ㄟ“扔丞幼伙//	ㄠ“穴伉瓜旦//	ㄡ“斥乓斥乓//	ㄢ“市伙正□瓜//	≡ㄠ“巨仿□//************************************************************int NPC_StartpointCheck(int meindex,int talker){	int point;	int shift = 0;	point = CHAR_getInt( talker, CHAR_SAVEPOINT);	for(shift = 0; shift < 4 ;shift++){		if( (point & ( 1<< shift))  == ( 1<< shift)) {			return shift;		}	}	return -1;}//********************************************************////////********************************************************static int NPC_TransmigrationCheck(int meindex, int talker){	//	鳖戏椭瘀	//伊矛伙互ㄧㄟ动晓	//ㄣ勾及箪岭奶矛件玄互蔽歹匀化中月仇午	int i,j,k=0;	int ch_no[4] = {39,40,42,46};	int petindex;	int num;//	int petid[4] = {1, 2, 3, 4}; //矢永玄及    毛隙烂	int petid[4] = {693, 694, 695, 696}; //矢永玄及    毛隙烂//	int petidfinal[4] = {11, 12, 13, 14}; //矢永玄及    毛隙烂	int petidfinal[4] = {693, 694, 695, 696}; //矢永玄及    毛隙烂	// Robin 2001/03/05	//CHAR_setWorkInt(talker,CHAR_TENSEICHECKED,FALSE);#ifdef _TRANS_6	if(CHAR_getInt(	talker, CHAR_TRANSMIGRATION) >= 6){		return 6;	}#else	if(CHAR_getInt(	talker, CHAR_TRANSMIGRATION) >= 5){		return 5;	}#endif	//伊矛伙互ㄧㄟ动晓	if(CHAR_getInt( talker, CHAR_LV) < 80) return -1;	//奶矛件玄及白仿弘民尼永弁#ifdef _TRANS_6	if(CHAR_getInt(	talker, CHAR_TRANSMIGRATION) < 6){#else	if(CHAR_getInt(	talker, CHAR_TRANSMIGRATION) < 5){#endif		for(i = 0; i < 4 ;i++)			if(NPC_EventCheckFlg( talker, ch_no[i] ) == FALSE) return -1;	}	num = CHAR_getInt(talker, CHAR_TRANSMIGRATION);	if(num  < 4 ){	//隙烂矢永玄毛手匀化中月井矢永玄民尼永弁		for(i=0 ; i < CHAR_MAXPETHAVE ; i++){			petindex = CHAR_getCharPet( talker, i);			if( petindex == -1  )  continue;			//ttom			//print("petid=%d ",CHAR_getInt( petindex, CHAR_PETID));			if(CHAR_getInt( petindex, CHAR_PETID) != petid[num]) continue;//			if(CHAR_getInt( petindex, CHAR_LV) < PETLEVEL) continue;			break;		}		if(i == CHAR_MAXPETHAVE) return -1;	}else#ifdef _TRANS_6    if( num == 4 )#endif	{		for(j = 0; j < 4 ;j++){			for(i=0 ; i < CHAR_MAXPETHAVE ; i++){				petindex = CHAR_getCharPet( talker, i);				if( petindex == -1  )  continue;		//		print("petid=%d ",CHAR_getInt( petindex, CHAR_PETID));				if(CHAR_getInt( petindex, CHAR_PETID) != petidfinal[j]) continue;				k++;				break;			}		}		if(k < 4) return -1;	}#ifdef _TRANS_6	else{		/*int lasttalkelder = 2;//乌力		if( CHAR_getInt( talker, CHAR_LASTTALKELDER) == 1 )//玛丽娜丝			lasttalkelder = 112;//凯比		else if( CHAR_getInt( talker, CHAR_LASTTALKELDER) == 2 )//加加			lasttalkelder = 102;//克克尔		else if( CHAR_getInt( talker, CHAR_LASTTALKELDER) == 3 )//卡鲁它那			lasttalkelder = 34;//威伯		print("\npetid:%d",lasttalkelder);*/		//找看看有没有带2转出生宠物		for(i=0 ; i < CHAR_MAXPETHAVE ; i++){			petindex = CHAR_getCharPet( talker, i);			if( petindex == -1  )  continue;			if( CHAR_getInt( petindex, CHAR_TRANSMIGRATION) == 2 				&& ( CHAR_getInt( petindex, CHAR_PETID) == 2 				|| CHAR_getInt( petindex, CHAR_PETID) == 112				|| CHAR_getInt( petindex, CHAR_PETID) == 102				|| CHAR_getInt( petindex, CHAR_PETID) == 34 ) ) break;			//if(CHAR_getInt( petindex, CHAR_TRANSMIGRATION) != 2 || CHAR_getInt( petindex, CHAR_PETID) != lasttalkelder ) continue;				}		if(i == CHAR_MAXPETHAVE){			CHAR_talkToCli( talker,-1,"你没有带2转的出生宠哦!",CHAR_COLORWHITE);			return -1;		}		if(NPC_EventCheckFlg( talker, 63) == FALSE){ print("\nerr63");return -1;}		if(NPC_EventCheckFlg( talker, 136) == FALSE){ print("\nerr136");return -1;}		if(NPC_EventCheckFlg( talker, 175) == FALSE){ print("\nerr175");return -1;}		if(NPC_EventCheckFlg( talker, 176) == FALSE){ print("\nerr176");return -1;}		//检查有无15个魔界之门碎片		j=0;		for( i=0 ; i<CHAR_MAXITEMHAVE ; i++ ){			int itemindex;			itemindex = CHAR_getItemIndex(talker,i);			if( ITEM_CHECKINDEX(itemindex) == FALSE )continue;			if( ITEM_getInt( itemindex, ITEM_ID ) == 20613 ) {				++j;			}		}		if( j < 15 ){			CHAR_talkToCli( talker,-1,"你没有带15个魔界之门的碎片哦!",CHAR_COLORWHITE);			print("\nitem:%d",j);			return -1;		}	}#endif	// Robin 2001/03/05	//CHAR_setWorkInt(talker,CHAR_TENSEICHECKED,TRUE);	return CHAR_getInt(talker, CHAR_TRANSMIGRATION);}BOOL NPC_TransmigrationMain(int meindex, int toindex, char *buf){	int i = 1;	char buf2[128];	char buf3[64];	char buf4[32];	int item = 10;	int pet = 5;	int present = 0;	int ten_no;	int work[10];	int fd = getfdFromCharaIndex( toindex );#ifdef _ADD_POOL_ITEM			   // WON ADD 增加可寄放的道具		int tran_pool_item[5] = { 4, 4, 4, 4, 4 };		// 增加的道具寄放数	int tran_pool_pet[5] = { 2, 2, 2, 2, 2};		// 增加的宠物寄放数	int j,item_sum=0, pet_sum=0;	for(j=0; j<5 ;j++){		item_sum += tran_pool_item[j] ;					pet_sum += tran_pool_pet[j];			}	item_sum += 10;								// 限制最大的寄道具数	pet_sum  += 5;							    // 限制最大的寄宠数#endif	while(getStringFromIndexWithDelim( buf,",",i,buf2,sizeof( buf2))!= FALSE){		i++;		if(strstr(buf2,"Item") != NULL){			getStringFromIndexWithDelim( buf2 ,"=" ,2, buf3 ,sizeof(buf3));			item = atoi(buf3);		}else if(strstr(buf2,"Pet") != NULL){			getStringFromIndexWithDelim( buf2 ,"=" ,2, buf3 ,sizeof(buf3));			pet = atoi(buf3);		}else if(strstr(buf2,"Present") != NULL){			ten_no = CHAR_getInt(toindex,CHAR_TRANSMIGRATION);			ten_no++;			getStringFromIndexWithDelim( buf2 ,"=" ,2, buf3 ,sizeof(buf3));			getStringFromIndexWithDelim( buf3,".",ten_no ,buf4 ,sizeof( buf4));			present = atoi(buf4);		}	}	CHAR_setInt(toindex ,CHAR_TRANSMIGRATION,		CHAR_getInt(toindex,CHAR_TRANSMIGRATION) + 1);#ifdef _TRANS_6	if(CHAR_getInt(	toindex, CHAR_TRANSMIGRATION) > 6)		CHAR_setInt(toindex ,CHAR_TRANSMIGRATION,6);	if( CHAR_getInt(toindex,CHAR_TRANSMIGRATION) == 6 )//6转後所送的宠		present = 2546;#else	if(CHAR_getInt(	toindex, CHAR_TRANSMIGRATION) > 5)		CHAR_setInt(toindex ,CHAR_TRANSMIGRATION,5);#endif	NPC_TransmigrationStatus(meindex, toindex, work);	NPC_TransmigrationFlg_CLS(meindex, toindex);	CHAR_setInt(toindex, CHAR_LV ,1);	CHAR_setMaxExp( toindex, 0);#ifdef _TRANS_6//删除魔界之门碎片	for( i=0 ; i<CHAR_MAXITEMHAVE ; i++ ){		int itemindex;		itemindex = CHAR_getItemIndex(toindex,i);		if( ITEM_CHECKINDEX(itemindex) == FALSE )continue;		if( ITEM_getInt( itemindex, ITEM_ID ) == 20613 ) {			CHAR_DelItem( toindex, i);		}	}#endif	if(NPC_TransmigrationDelPet(meindex, toindex) == FALSE) return FALSE;	if(	NPC_TransmigrationAddPet( meindex, toindex, present)== FALSE) return FALSE;	// Robin 0718        {            int tenseiNo;            tenseiNo=CHAR_getInt( toindex, CHAR_TRANSMIGRATION);            CHAR_setInt( toindex,CHAR_SKILLUPPOINT,tenseiNo*10);            CHAR_Skillupsend( toindex );            //CHAR_setInt( toindex,CHAR_LEARNRIDE, 0);            CHAR_setInt( toindex,CHAR_RIDEPET, -1 );            CHAR_setInt( toindex , CHAR_BASEIMAGENUMBER , CHAR_getInt( toindex , CHAR_BASEBASEIMAGENUMBER) );                        //CHAR_sendStatusString( toindex , "P");        }	lssproto_WO_send(fd ,0 );	// 鳖戏夫弘毛潸月	LogTensei(		CHAR_getChar( toindex, CHAR_NAME ), /* 平乓仿   */		CHAR_getChar( toindex, CHAR_CDKEY),		"Tensei",		work[0],		CHAR_getInt(toindex,CHAR_TRANSMIGRATION),		work[1],		NPC_StartpointCheck( meindex, toindex),		item, pet,		work[2],work[3],work[4],work[5],		work[6],work[7],work[8],work[9]		);	//凳蕙	CHAR_complianceParameter( toindex );	//HP毛荚汊今六化丐仆月	CHAR_setInt(toindex, CHAR_HP, CHAR_getWorkInt(toindex, CHAR_WORKMAXHP) );	CHAR_setInt(toindex,CHAR_LASTTALKELDER, NPC_StartpointCheck(meindex,toindex));	CHAR_sendStatusString( toindex, "P" );	/*	CHAR_send_P_StatusString( toindex,								  CHAR_P_STRING_LV|CHAR_P_STRING_EXP|								  CHAR_P_STRING_NEXTEXP|								  CHAR_P_STRING_HP|CHAR_P_STRING_MAXHP|								  CHAR_P_STRING_MP|CHAR_P_STRING_MAXMP|								  CHAR_P_STRING_ATK|CHAR_P_STRING_DEF|								  CHAR_P_STRING_QUICK|CHAR_P_STRING_CHARM|								  CHAR_P_STRING_LUCK|CHAR_P_STRING_EARTH|								  CHAR_P_STRING_WATER|CHAR_P_STRING_FIRE|								  CHAR_P_STRING_WIND|CHAR_P_STRING_VITAL|								  CHAR_P_STRING_STR|CHAR_P_STRING_DEX|								  CHAR_P_STRING_TOUGH|								  CHAR_P_STRING_DUELPOINT //ttom								  );	*/				return TRUE;}static int questTbl[20] = {1,2,4,5,8,12,14,15,16,17,19,22,27,30,31,34,35,38,45,47};//*******************************************************//弁巨旦玄及醒毛醒尹月//*******************************************************int NPC_TransmigrationQuestCheck(int toindex){	int i;	int num = 0;		for(i = 0 ; i < 20; i++){		if(NPC_EventCheckFlg(toindex ,questTbl[i]) == TRUE){			num++;		}	}		return num;}//*******************************************************//*******************************************************int NPC_TransCalculation(int toindex, int para){	float quest, level, num, tmp;	float ans;	int equ;	equ = CHAR_getInt(toindex, CHAR_TRANSEQUATION);	quest = (float)(( equ >> 16 ) & 0xFFFF);	level = (float)(( equ >> 0 ) & 0xFFFF);	//tttom	//print("\n this test equ=%d,quest=%f,level=%f",equ,quest,level);	//鳖戏荚醒

⌨️ 快捷键说明

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