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

📄 char_data.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 4 页
字号:
	}	CHAR_setWorkInt( petindex,CHAR_WORKOBJINDEX,objindex );	CHAR_setInt( petindex, CHAR_FLOOR, floor);	CHAR_setInt( petindex, CHAR_X, x);	CHAR_setInt( petindex, CHAR_Y, y);	CHAR_sendCToArroundCharacter( objindex);	return floor;}int CHAR_PetTakeLevelUp( int petindex, int lv)//强制宠物升级{	int k;	for( k = 1; k < lv; k ++ ){		CHAR_PetLevelUp( petindex );		CHAR_PetAddVariableAi( petindex, AI_FIX_PETLEVELUP );		CHAR_setInt( petindex, CHAR_LV, CHAR_getInt( petindex, CHAR_LV) +1 );	}	CHAR_complianceParameter( petindex );	return k;}int CHAR_PetLevelUp( int petindex ){	struct _RankRandTbl{		int min;		int max;	}RankRandTbl[] = {		{ 450, 500 },		{ 470, 520 },		{ 490, 540 },		{ 510, 560 },		{ 530, 580 },		{ 550, 600 },	};		float Param[4] = { 0.0, 0.0, 0.0, 0.0 };	int LevelUpPoint, petrank;	float str, vital, dex, tgh, fRand, i;	// 娄醒民尼永弁	if( CHAR_CHECKINDEX( petindex ) == FALSE )	return -1;	if( CHAR_getInt( petindex, CHAR_WHICHTYPE ) != CHAR_TYPEPET )return -1;		LevelUpPoint = CHAR_getInt( petindex, CHAR_ALLOCPOINT );		// 矢永玄及仿件弁	petrank = CHAR_getInt( petindex, CHAR_PETRANK );	if( petrank < 0 || petrank > 5 ) petrank = 0;		// 潸  	vital = (float)(( LevelUpPoint >> 24 ) & 0xFF);	str = (float)(( LevelUpPoint >> 16 ) & 0xFF);	tgh = (float)(( LevelUpPoint >> 8 ) & 0xFF);	dex = (float)(( LevelUpPoint >> 0 ) & 0xFF);		// ㄠㄟ荚ㄣ    扔奶戊夫毛蕊匀化备嫩  卞ㄠ箫允	for( i = 0; i < 10; i ++ ){		Param[RAND( 0, 3 )] += 1.0;	}		// 仿件弁卞方月  区及仿件母丞	fRand = (float)RAND( RankRandTbl[petrank].min, RankRandTbl[petrank].max )		* 0.01;		// 喃曰蕊曰禾奶件玄方曰煌遥	vital = (float)vital * fRand + Param[0] * fRand;	str = (float)str   * fRand + Param[1] * fRand;	tgh = (float)tgh   * fRand + Param[2] * fRand;	dex = (float)dex   * fRand + Param[3] * fRand;		// 煌遥	CHAR_setInt( petindex, CHAR_VITAL,		CHAR_getInt( petindex, CHAR_VITAL ) + (int)vital );	CHAR_setInt( petindex, CHAR_STR,		CHAR_getInt( petindex, CHAR_STR ) + (int)str );	CHAR_setInt( petindex, CHAR_TOUGH,		CHAR_getInt( petindex, CHAR_TOUGH ) + (int)tgh );	CHAR_setInt( petindex, CHAR_DEX,		CHAR_getInt( petindex, CHAR_DEX ) + (int)dex );			// CoolFish: 饲育家族声望更新	{		int level = CHAR_getInt(petindex, CHAR_LV);					int exp1 = 0, exp2 = 0;		if (level > 30){			char	tmpbuf[128];			int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX);#ifdef _FMVER21#else			if (CHAR_getInt(ownerindex, CHAR_FMINDEX) < 0)	return	 0;			if (CHAR_getInt(ownerindex, CHAR_FMLEADERFLAG) <= 0 )    return  0;			if (strcmp(CHAR_getChar(ownerindex, CHAR_FMNAME), "") == 0)	return	0;#endif	   	    			if (CHAR_CHECKINDEX(ownerindex)){				exp1 = CHAR_GetLevelExp( petindex, level);				exp2 = CHAR_GetLevelExp( petindex, level - 1);				 //#ifdef _PERSONAL_FAME	// Arminius 8.30: 家族个人声望//				feedpoint = (exp1 - exp2) / 20000;	// 减半//#else//				feedpoint = (exp1 - exp2) / 10000;//#endif				if ( exp1 - exp2 > 0){					int feedpoint;					// CoolFish: 2001/10/03					int fd = getfdFromCharaIndex(ownerindex);#ifdef _PERSONAL_FAME	// Arminius 8.30: 家族个人声望					CHAR_earnFame(ownerindex, exp2 / 20000);					sprintf(tmpbuf, "%d", exp2 / 20000);#endif					feedpoint=exp2 / 20000;#ifdef _FMVER21					if (CHAR_getInt(ownerindex, CHAR_FMLEADERFLAG) > 0						 && CHAR_getInt(ownerindex, CHAR_FMLEADERFLAG) != FMMEMBER_APPLY){						saacproto_ACFixFMData_send(acfd,							 CHAR_getChar(ownerindex, CHAR_FMNAME),							 CHAR_getInt(ownerindex, CHAR_FMINDEX),							 CHAR_getWorkInt(ownerindex, CHAR_WORKFMINDEXI),							 FM_FIX_FMFEED, tmpbuf,							 "",							 CHAR_getWorkInt(ownerindex, CHAR_WORKFMCHARINDEX),							 CONNECT_getFdid(fd));					}#else					saacproto_ACFixFMData_send(acfd,						CHAR_getChar(ownerindex, CHAR_FMNAME),						CHAR_getInt(ownerindex, CHAR_FMINDEX),						CHAR_getWorkInt(ownerindex, CHAR_WORKFMINDEXI),						FM_FIX_FMFEED, tmpbuf, "",						CHAR_getWorkInt(ownerindex, CHAR_WORKFMCHARINDEX), 0);#endif				}			}		}	}		return 0;}#ifdef _PET_TRANSint PETTRANS_getPetBase( int petindex, int *work, int *petrank){	int i, total=-1;	if( !CHAR_CHECKINDEX( petindex) ){		total = 0;		*petrank = 1;		for( i=0; i<4; i++)	{			work[i] = 50;			total += work[i];		}	}else{		int LevelUpPoint = CHAR_getInt( petindex, CHAR_ALLOCPOINT );		*petrank = CHAR_getInt( petindex, CHAR_PETRANK );		work[0] = (float)(( LevelUpPoint >> 24 ) & 0xFF);		work[1] = (float)(( LevelUpPoint >> 16 ) & 0xFF);		work[2] = (float)(( LevelUpPoint >> 8 ) & 0xFF);		work[3] = (float)(( LevelUpPoint >> 0 ) & 0xFF);		total = ( work[0] + work[1] + work[2] + work[3] );		if( total > 150 )	total = 150;		if( total < 0 )		total = 0;	}	return total;}#ifdef _PET_2TRANSint NPC_PetTransManGetAns( int total1, int total2, int LV, int rank, int tran )#elseint NPC_PetTransManGetAns( int total1, int total2, int LV, int rank )#endif{	int ans=0 , TransLV = 100;	float total = 0.00;	int Fx=1;	if( LV > 130 ) LV = 130;	total = ( (float)total1/100 ); // 玛蕾最高 total1=200	total = total*total*total*total*total; 	if( total < 1 ) total = 0;	else total= total*1.3; // 所以total最大=41.6 最小=0	Fx = (int)((5-rank)*1.2)+5; // rank=0~6 所以 Fx最大=11(rank=0)最小=4(rank=6)	ans = (int)total + total2 + ((LV-TransLV)/Fx); //42+150+30/11=194#ifdef _PET_2TRANS	if( tran == 0 ){		if( ans > 150 )				ans = 150;	}	else{		if( ans > 200 )				ans = 200;	}#else	if( ans > 150 )	{		ans = 150;	}#endif	print("\n ans = %d", ans);	return ans;}int PETTRANS_PetTransManStatus( int toindex, int petindex1, int petindex2){	int petrank=0,i;	int total1,total2,total,petLV,ans;	int petID,enemynum,ret=-1;	int work[4]={0,0,0,0};	int base[4]={0,0,0,0};#define RAND(x,y)   ((x-1)+1+ (int)( (double)(y-(x-1))*rand()/(RAND_MAX+1.0)) )	total1 = PETTRANS_getPetBase( petindex1, work, &petrank);	total2 = PETTRANS_getPetBase( petindex2, base, &petrank);	petLV	= CHAR_getInt( petindex2, CHAR_LV);#ifdef _PET_2TRANS	ans = NPC_PetTransManGetAns( total1, total2, petLV, petrank, CHAR_getInt( petindex2, CHAR_TRANSMIGRATION ) );#else	ans = NPC_PetTransManGetAns( total1, total2, petLV, petrank );#endif	total = total1 + (total2*4);	total2 = 0;	for( i=0; i<4; i++)	{		work[i] = work[i]*4;		total2 += work[i];	}	total = total1 + total2;	for( i=0; i<4; i++)	{		base[i] = (ans * (base[i]+work[i])) /total;	}	enemynum = ENEMY_getEnemyNum();	petID = CHAR_getInt( petindex2, CHAR_PETID);	for( i=0; i<enemynum; i++)	{		if( ENEMY_getInt(i, ENEMY_TEMPNO) == petID )			break;	}	if( i == enemynum )		return -1;	ret = GetNewPet( toindex, petindex2, i, base);	if( ret < 0 )		return -1;	return ret;}#endif#ifdef _CHIKULA_STONEvoid CHAR_AutoChikulaStone( int charaindex, int Dflg){	int Myhp, i, dnums;	if( !CHAR_CHECKINDEX( charaindex) ) return;	if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE ) return;	switch( Dflg ){	case 1:	//HP		Myhp = CHAR_getInt( charaindex, CHAR_HP);		dnums = CHAR_getWorkInt( charaindex, CHAR_WORKCHIKULAHP);		Myhp += dnums;		if( Myhp > CHAR_getWorkInt( charaindex, CHAR_WORKMAXHP) ){			Myhp = CHAR_getWorkInt( charaindex, CHAR_WORKMAXHP);		}		CHAR_setInt( charaindex, CHAR_HP, Myhp);		CHAR_complianceParameter( charaindex );		CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_HP);		for( i=0; i<CHAR_MAXPETHAVE; i++)	{			int petindex = CHAR_getCharPet( charaindex, i);			if( !CHAR_CHECKINDEX( petindex) ) continue;			Myhp = CHAR_getInt( petindex, CHAR_HP);			Myhp += dnums;			if( Myhp > CHAR_getWorkInt( petindex, CHAR_WORKMAXHP) ){				Myhp = CHAR_getWorkInt( petindex, CHAR_WORKMAXHP);			}			CHAR_setInt( petindex, CHAR_HP, Myhp);			CHAR_send_K_StatusString( charaindex, i, CHAR_K_STRING_HP|CHAR_K_STRING_AI);		}		break;	case 2://MP		Myhp = CHAR_getInt( charaindex, CHAR_MP);		dnums = CHAR_getWorkInt( charaindex, CHAR_WORKCHIKULAMP);		Myhp += dnums;		if( Myhp > CHAR_getWorkInt( charaindex, CHAR_WORKMAXMP) ){			Myhp = CHAR_getWorkInt( charaindex, CHAR_WORKMAXMP);		}		CHAR_setInt( charaindex, CHAR_MP, Myhp);		CHAR_complianceParameter( charaindex );		CHAR_send_P_StatusString( charaindex, CHAR_P_STRING_MP);		break;	}}#endifint CHAR_findSurplusPetBox( int charaindex ){	int i, remnants=0;	for( i=0; i<CHAR_MAXPETHAVE; i++){    	int petindex = CHAR_getCharPet( charaindex, i);		if( !CHAR_CHECKINDEX( petindex) ) remnants++;	}	return remnants;}#ifdef _FM_METAMOvoid CHAR_ReMetamo( int charaindex ){	int oldMetamo=CHAR_getInt( charaindex , CHAR_BASEIMAGENUMBER);	if( oldMetamo>=100700 && oldMetamo<100819){		int newMetamo;		int hbMetamo[]={			 100000,100010,100025,100035,100055,100045,			 100060,100070,100095,100090,100100,100110,			 100135,100125,100145,100150,100165,100160,			 100190,100185,100200,100210,100230,100220,		};		newMetamo=hbMetamo[(oldMetamo-100700)/5];		CHAR_setInt( charaindex , CHAR_BASEIMAGENUMBER , newMetamo );		CHAR_setInt( charaindex , CHAR_BASEBASEIMAGENUMBER , newMetamo );		CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charaindex , CHAR_WORKOBJINDEX ));		CHAR_send_P_StatusString( charaindex , CHAR_P_STRING_BASEBASEIMAGENUMBER);		CHAR_complianceParameter( charaindex );	}}#endif#ifdef _NEW_PLAYER_RIDEvoid CHAR_PlayerRide( int charaindex ){		int i,j;		int MetamoList[5][13]={		/*{ 小矮子   赛亚人  辫子男孩  酷哥   熊皮男   大个    小矮妹  熊皮妹  帽子妹  短发夹妹  手套女   辣妹    虎}, 此行为说明行 */			{ 100000, 100025, 100055, 100060, 100095, 100100, 100135, 100145, 100165, 100190, 100200, 100230, 309},	//红			{ 100005, 100030, 100050, 100065, 100085, 100115, 100120, 100140, 100170, 100195, 100210, 100225, 307},	//绿			{ 100010, 100035, 100045, 100070, 100090, 100110, 100125, 100150, 100160, 100185, 100215, 100220, 310},	//黄			{ 100015, 100020, 100040, 100075, 100080, 100105, 100130, 100155, 100175, 100180, 100205, 100235, 308},	//灰			{   331 ,   483 ,   330 ,   332 ,   483 ,   332 ,   333 ,   333 ,   331 ,   330 ,   332 ,   483 ,  0 },	//雷		};		for(i=0;i<4;i++)				for(j=0;j<12;j++)				 if(CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER) == MetamoList[i][j]){				 	  if(strstr( getPlayerRide(), "配套送虎加雷")){				 			setNewplayergivepet(3,MetamoList[i][12]);				 			setNewplayergivepet(4,MetamoList[4][j]);				 		}else if(strstr( getPlayerRide(), "配套送雷")){				 			setNewplayergivepet(4,MetamoList[4][j]);				 		}else if(strstr( getPlayerRide(), "配套送虎")){				 			setNewplayergivepet(4,MetamoList[i][12]);				 		}				 		break;				 	}}#endif#ifdef _USER_EXP_CF
BOOL LoadEXP( char* filename )
{
	FILE* fp;
	int i = 0;
	int MaxLevel=0;
	fp = fopen(filename, "r");
	if (fp == NULL)
	{
		print("无法打开文件\n");
		return FALSE;
	}

	while(1){
		char	line[64], exp[64];
		if (fgets(line, sizeof(line), fp) == NULL)	break;
		chop(line);

		if( line[0] == '#' )
			continue;
		for( i=0; i<strlen(line); i++ ){
            if( line[i] == '#' ){
			    line[i] = '\0';
		        break;
			}
		}
		//*************************************
		MaxLevel = MaxLevel + 1;
		if (MaxLevel >= 200)	break;
		easyGetTokenFromString(line, 2, exp, sizeof(exp));
		NeedLevelUpTbls[MaxLevel]=atoi(exp);
	}
	fclose(fp);
	return TRUE;
}#endif

⌨️ 快捷键说明

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