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

📄 复件 char.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 5 页
字号:
			   CHAR_setInt(charaindex, CHAR_Y, yelder);	  }	}#ifdef _FIX_GAMBLENUM			{		        if( CHAR_getInt(charaindex, CHAR_GAMBLENUM) < 0){			CHAR_setInt(charaindex, CHAR_GAMBLENUM, 0);		}	}#endif#ifdef _MAP_NOEXIT	{		int exfloor=-1,ex_X=-1,ex_Y=-1;		int map_type=0;		unsigned int point;		point = MAP_getExFloor_XY( CHAR_getInt(charaindex, CHAR_FLOOR) , &map_type);		if( point > 0 )	{			if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER) >= 0 )	{				CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER),					&exfloor, &ex_X, &ex_Y);			}			if( map_type >= 0 )	{	// map_type >= 0 优先回纪录点				if( exfloor == map_type && exfloor >= 0 )	{//回纪录点				}else	{					exfloor = (point>>16)&0xffffff;					ex_X = (point>>8)&0xff;					ex_Y = (point>>0)&0xff;				}			}			if( CHECKFLOORID( exfloor) )	{	//检查房间号				CHAR_setInt(charaindex, CHAR_FLOOR, exfloor);				CHAR_setInt(charaindex, CHAR_X, ex_X);				CHAR_setInt(charaindex, CHAR_Y, ex_Y);			}		}	}#endif	if( CHAR_getInt(charaindex,CHAR_X) < 0 || CHAR_getInt(charaindex,CHAR_Y) < 0 ){		CHAR_setInt(charaindex,CHAR_X,1);		CHAR_setInt(charaindex,CHAR_Y,1);	}#ifdef _MAP_TIME	// 如果登入的地图是这些编号的话,回到入口	if(CHAR_getInt(charaindex,CHAR_FLOOR) >= 30017 && CHAR_getInt(charaindex, CHAR_FLOOR) <= 30021){		CHAR_setInt(charaindex,CHAR_FLOOR,30008);		CHAR_setInt(charaindex,CHAR_X,39);		CHAR_setInt(charaindex,CHAR_Y,38);	}#endif#ifdef _FM_METAMO	if( CHAR_getInt( charaindex , CHAR_BASEIMAGENUMBER)>=100700 && CHAR_getInt( charaindex , CHAR_BASEIMAGENUMBER)<100819		  && (CHAR_getInt( charaindex, CHAR_FMLEADERFLAG ) == FMMEMBER_NONE	|| CHAR_getInt( charaindex, CHAR_FMLEADERFLAG ) == FMMEMBER_APPLY)){		switch( CHAR_getWorkInt( charaindex, CHAR_WORKFMFLOOR) ){			case 1041:			case 2031:			case 3031:			case 4031:			case 5031:			case 6031:			case 7031:			case 8031:			case 9031:			case 10031:				break;			default:				CHAR_ReMetamo(charaindex);		}	}#endif#ifdef _AUTO_PK	int exfloor=-1,ex_X=-1,ex_Y=-1;	if( CHAR_getInt(charaindex, CHAR_FLOOR) == 20000 ){   		CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER), &exfloor, &ex_X, &ex_Y);		CHAR_setInt(charaindex, CHAR_FLOOR, exfloor);		CHAR_setInt(charaindex, CHAR_X, ex_X);		CHAR_setInt(charaindex, CHAR_Y, ex_Y);		}	CHAR_setInt(charaindex, CHAR_AUTOPK, 0);	#endif	if( CHAR_getInt(charaindex, CHAR_FLOOR) == 10032 ){   		CHAR_setInt(charaindex, CHAR_FLOOR, 10030);		CHAR_setInt(charaindex, CHAR_X, 52);		CHAR_setInt(charaindex, CHAR_Y, 36);		}		objindex = initObjectFromObjectMember(OBJTYPE_CHARA,charaindex,										  CHAR_getInt(charaindex,CHAR_X),										  CHAR_getInt(charaindex,CHAR_Y),										  CHAR_getInt(charaindex,CHAR_FLOOR));	if( objindex == -1 ){		fprint ("始化对象错误!\n");		goto DELETECHARDATA;	}	CHAR_setWorkInt( charaindex,CHAR_WORKOBJINDEX,objindex );	CONNECT_setState( clifd, LOGIN );	CONNECT_setCharaindex( clifd, charaindex );	CHAR_LoginBesideSetWorkInt( charaindex, clifd);	CHAR_complianceParameter( charaindex );	//检查人物身上	{		int i;//		char *petstring;		int ID1;		for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) {			int petindex = CHAR_getCharPet(charaindex,i);			if( CHAR_CHECKINDEX( petindex) ) {/*		if(CHAR_getInt( petindex, CHAR_FUSIONBEIT )==1			 && CHAR_getInt( petindex, CHAR_TRANSMIGRATION )<2)			CHAR_setInt( petindex, CHAR_FUSIONBEIT, 0 );		if(CHAR_getInt( petindex, CHAR_FUSIONBEIT )==1			 && CHAR_getInt( petindex, CHAR_TRANSMIGRATION )>2){			int vital=CHAR_getInt( petindex, CHAR_VITAL);			int str=CHAR_getInt( petindex, CHAR_STR);			int tough=CHAR_getInt( petindex, CHAR_TOUGH);			int dex=CHAR_getInt( petindex, CHAR_DEX);			int lv=CHAR_getInt( petindex, CHAR_LV);			int LevelUpPoint = CHAR_getInt( petindex, CHAR_ALLOCPOINT );			int work[4];			float fRand, cvitl, cstr, ctough, cdex;			float rnd=(rand()%5+95)/100.0;			float Param[4] = { 0.0, 0.0, 0.0, 0.0 };			work[3] =(( LevelUpPoint >> 24 ) & 0xFF);			work[0] = (( LevelUpPoint >> 16 ) & 0xFF);			work[1] = (( LevelUpPoint >> 8 ) & 0xFF);			work[2] = (( LevelUpPoint >> 0 ) & 0xFF);			struct _RankRandTbl{				int min;				int max;			}RankRandTbl[] = {				{ 450, 500 },				{ 470, 520 },				{ 490, 540 },				{ 510, 560 },				{ 530, 580 },				{ 550, 600 },			};			int petrank = CHAR_getInt( petindex, CHAR_PETRANK );			if( petrank < 0 || petrank > 5 ) petrank = 0;							printf("\n.........................\n");			printf("名:%s\n",CHAR_getChar( petindex, CHAR_NAME));			printf("血:%d\n",vital/15);			printf("攻:%d\n",str/80);			printf("防:%d\n",tough/80);			printf("敏:%d\n",dex/100);			printf("成:%f\n",((str/80-20.0)/lv+(tough/80-15.0)/lv+(dex/100-15.0)/lv));			printf(".........................\n");			while(((str/80-20.0)/lv+(tough/80-15.0)/lv+(dex/100-15.0)/lv)>8.5){				vital*=rnd;				str*=rnd;				tough*=rnd;				dex*=rnd;				rnd=(rand()%5+95)/100.0;			}			for(i=0;i<160;i++){				fRand = (float)RAND( RankRandTbl[petrank].min, RankRandTbl[petrank].max ) * 0.01;				cvitl += (float)work[3] * fRand + Param[0] * fRand;				cstr += (float)work[0] * fRand + Param[1] * fRand;				ctough += (float)work[1] * fRand + Param[2] * fRand;				cdex += (float)work[2] * fRand + Param[3] * fRand;			}			rnd=(cstr/80/160.0+ctough/80/160.0+cdex/100/160.0);			printf("血:%d\n",work[3]);			printf("攻:%d\n",work[0]);			printf("防:%d\n",work[1]);			printf("敏:%d\n",work[2]);			printf("成:%f\n",rnd);						if(rnd>8.5){				work[3]*=(8.5/rnd);				work[0]*=(8.5/rnd);				work[1]*=(8.5/rnd);				work[2]*=(8.5/rnd);			}			LevelUpPoint = ( work[3]<< 24) + ( work[0]<< 16) + ( work[1]<< 8) + ( work[2]<< 0);			CHAR_setInt( petindex, CHAR_ALLOCPOINT, LevelUpPoint);						CHAR_setInt( petindex, CHAR_VITAL, vital);			CHAR_setInt( petindex, CHAR_STR, str);			CHAR_setInt( petindex, CHAR_TOUGH, tough);			CHAR_setInt( petindex, CHAR_DEX, dex);						CHAR_setInt( petindex, CHAR_FUSIONBEIT, 2 );			CHAR_setInt( petindex, CHAR_TRANSMIGRATION,3 );			printf("\n.........................\n");			printf("名:%s\n",CHAR_getChar( petindex, CHAR_NAME));			printf("血:%d\n",vital/15);			printf("攻:%d\n",str/80);			printf("防:%d\n",tough/80);			printf("敏:%d\n",dex/100);			printf("成:%f\n",((str/80-20.0)/lv+(tough/80-15.0)/lv+(dex/100-15.0)/lv));			printf(".........................\n");			printf("血:%d\n",work[3]);			printf("攻:%d\n",work[0]);			printf("防:%d\n",work[1]);			printf("敏:%d\n",work[2]);		}*/	#ifdef _UNIQUE_P_I			    			    // CoolFish: 2001/10/11 Set Pet Unicode 			    CHAR_setPetUniCode(petindex);#endif#ifdef _NEWOPEN_MAXEXP				if( CHAR_getInt( petindex, CHAR_OLDEXP) > 0 || CHAR_getInt( charaindex, CHAR_OLDEXP) < 0 ){					CHAR_ChangeExp( petindex);				}#endif				ID1=CHAR_getInt( petindex, CHAR_PETID);//				petstring = CHAR_makePetStringFromPetIndex( petindex);#ifdef _REEDIT_PETBBIS				if( ID1 == 1133 ){					CHAR_setInt( petindex, CHAR_BASEIMAGENUMBER, 101578);					CHAR_setInt( petindex, CHAR_BASEBASEIMAGENUMBER, 101578);					print("PET:%s fix BBI\n", CHAR_getUseName(petindex));				}#endif				// WON ADD 修正白虎七技				if( ID1 == 777 )CHAR_setInt( petindex, CHAR_SLOT, 7);				CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, charaindex);				// 修正宠技最大值变-1  Robin 20040803				if( CHAR_getInt( petindex, CHAR_SLOT) < 0 ) {					int j;					for( j=0; j<CHAR_MAXPETSKILLHAVE; j++) {						if( CHAR_getPetSkill( petindex, j) >= 0)							CHAR_setInt( petindex, CHAR_SLOT, j+1);					}					//print(" 宠技MAX变-1改6 ");				}				CHAR_complianceParameter( petindex );#ifdef _FIX_GP_PET_SKILL	 // WON ADD 修正gp宠会落马术				if( ID1 == 1133){					int j;					for( j=0; j<CHAR_MAXPETSKILLHAVE; j++){						if( CHAR_getPetSkill( petindex, j) == 210 ){ // 落马术							CHAR_setPetSkill( petindex, j, -1);						}					}				}#endif			}		}	}	{		int i;//		char *petstring;//ttom//		char *c_ptr_index;//		char c_temp[4096];//		char c_temp1[4096];		int ID1;//		int tran_no;		BOOL b_find=FALSE;		//ttom		for( i = 0; i < CHAR_MAXPOOLPETHAVE; i ++ ) {			int petindex = CHAR_getCharPoolPet(charaindex,i);			if( CHAR_CHECKINDEX( petindex) ) {#ifdef _UNIQUE_P_I			    			    // CoolFish: 2001/10/11 Set Pet Unicode 			    CHAR_setPetUniCode(petindex);#endif#ifdef _NEWOPEN_MAXEXP				if( CHAR_getInt( petindex, CHAR_OLDEXP) > 0 ||					CHAR_getInt( charaindex, CHAR_OLDEXP) < 0 ){					CHAR_ChangeExp( petindex);				}#endif				b_find=FALSE;				ID1=CHAR_getInt( petindex, CHAR_PETID);#ifdef _REEDIT_PETBBIS				if( ID1 == 1133 ){					CHAR_setInt( petindex, CHAR_BASEIMAGENUMBER, 101578);					CHAR_setInt( petindex, CHAR_BASEBASEIMAGENUMBER, 101578);				}#endif/* 			    tran_no=CHAR_getInt( charaindex, CHAR_TRANSMIGRATION);			    petstring = CHAR_makePetStringFromPetIndex( petindex);				c_ptr_index=strstr(petstring,"name:");			    getStringFromIndexWithDelim(c_ptr_index,":",2,c_temp,sizeof(c_temp));			    c_ptr_index=c_temp;			    getStringFromIndexWithDelim(c_ptr_index,"|",1,c_temp1,sizeof(c_temp1));                                                                                                                                                                                                                                                                                                       			    if(b_find){//ttom			          CHAR_setCharPoolPet( charaindex, i, -1);			          print("\nKill pool pet  ID=%d name=%s",ID1,c_temp1);			          sprintf(c_temp2,"Kill pool pet  ID=%d name=%s",ID1,c_temp1);			          LogKill(CHAR_getChar( charaindex, CHAR_NAME ),			                  CHAR_getChar( charaindex, CHAR_CDKEY ),			                  c_temp2);			    }else{//ttom*/			    						CHAR_setWorkInt( petindex, CHAR_WORKPLAYERINDEX, charaindex);						CHAR_complianceParameter( petindex );				    //				}//ttom			}		}	}	CHAR_loginCheckUserItem( charaindex);	CHAR_complianceParameter( charaindex );#ifdef _PROFESSION_FIX_LEVEL		// WON ADD 修正职业经验值	{		int i=0;		for( i = 0 ; i < CHAR_SKILLMAXHAVE ; i ++ ){			CHAR_HaveSkill* hskill;			hskill = CHAR_getCharHaveSkill( charaindex, i );			if( hskill != NULL && hskill->use == TRUE ){				int skill_level = SKILL_getInt( &hskill->skill, SKILL_LEVEL);				if( skill_level < 10 ){					SKILL_setInt( &hskill->skill, SKILL_LEVEL, 10* 100 );				}			}		}	}#endif#ifdef _PETSKILL_BECOMEPIG	if( CHAR_getInt( charaindex, CHAR_BECOMEPIG) > -1 ){        CHAR_setInt( charaindex, CHAR_BASEIMAGENUMBER, CHAR_getInt( charaindex, CHAR_BECOMEPIG_BBI ) );	}	//change fix 处理负很大的乌力时间	else{		CHAR_setInt( charaindex, CHAR_BECOMEPIG, -1 );	}#endif	lssproto_CharLogin_send( clifd, SUCCESSFUL,"" );	per = ENCOUNT_getEncountPercentMin( charaindex,									CHAR_getInt( charaindex, CHAR_FLOOR),									CHAR_getInt( charaindex, CHAR_X),									CHAR_getInt( charaindex, CHAR_Y));	if( per != -1) {		CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MIN, per);	}	per = ENCOUNT_getEncountPercentMax( charaindex,									CHAR_getInt( charaindex, CHAR_FLOOR),									CHAR_getInt( charaindex, CHAR_X),									CHAR_getInt( charaindex, CHAR_Y));	if( per != -1) {		CHAR_setWorkInt( charaindex, CHAR_WORKENCOUNTPROBABILITY_MAX, per);	}	CHAR_setLuck( charaindex);	{		int i;		char*   statuscat[]={"C","P","I","S","D","E","F"};		for( i=0 ; i<arraysizeof(statuscat) ; i++ )			CHAR_sendStatusString( charaindex, statuscat[i] );	}	{		int		i;		char	category[3];		for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) {			snprintf( category, sizeof( category), "K%d",i);			CHAR_sendStatusString( charaindex, category );			snprintf( category, sizeof( category), "W%d",i);			CHAR_sendStatusString( charaindex, category );		}	}	{		int petarray = CHAR_getInt( charaindex, CHAR_DEFAULTPET);		if( CHAR_CHECKPETINDEX( petarray)) {			if( !CHAR_CHECKINDEX( CHAR_getCharPet( charaindex, petarray))) {				petarray = -1;			}		}else {			petarray = -1;		}		lssproto_KS_send( clifd, petarray, TRUE);	}	{		int flg = 0;		CHAR_setFlg( charaindex, CHAR_ISSHOWBATTLEMSG, 0);		CHAR_setFlg( charaindex, CHAR_ISDUEL, 0);		CHAR_setFlg( charaindex, CHAR_ISTRADECARD, 0);		if( CHAR_getFlg( charaindex, CHAR_ISPARTY)) flg |= CHAR_FS_PARTY;		if( CHAR_getFlg( charaindex, CHAR_ISDUEL)) flg |= CHAR_FS_DUEL;		if( CHAR_getFlg( charaindex, CHAR_ISPARTYCHAT)) flg |= CHAR_FS_PARTYCHAT;		if( CHAR_getFlg( charaindex, CHAR_ISTRADECARD)) flg |= CHAR_FS_TRADECARD;        // CoolFish: 2001/4/18		CHAR_setFlg( charaindex, CHAR_ISTRADE, 0);		lssproto_FS_send( clifd, flg);	}	MAP_sendArroundCharNeedFD( clifd, charaindex );	CHAR_setInt( charaindex, CHAR_LOGINCOUNT, CHAR_getInt( charaindex, CHAR_LOGINCOUNT) + 1  );	CHAR_sendCToArroundCharacter( objindex );	CHAR_sendArroundCharaData( charaindex );	CHAR_sendWatchEvent(objindex,CHAR_ACTSTAND,NULL,0,TRUE);	ADDRESSBOOK_notifyLoginLogout(charaindex,1);	CHAR_setWorkInt(charaindex,CHAR_WORKLASTATTACKCHARAINDEX,-1);	if(CHAR_getInt(charaindex,CHAR_HP) <= 0 ){		typedef int (*DYINGFUNC)(int);		DYINGFUNC   dyingfunc=NULL;		dyingfunc = (DYINGFUNC)CHAR_getFunctionPointer(charaindex, CHAR_DYINGFUNC );		CHAR_setInt(charaindex,CHAR_HP,1);    // HP 设为 1		logHack( CHAR_getWorkInt(charaindex,CHAR_WORKFD), HACK_HP);	}	if( CHAR_getInt( charaindex,CHAR_SKILLUPPOINT ) >=1 )		CHAR_Skillupsend(charaindex);	CHAR_checkEffect( charaindex);	// CoolFish: Family 2001/5/30	if ((CHAR_getChar(charaindex, CHAR_FMNAME)!=NULL) &&		(CHAR_getInt(charaindex, CHAR_FMINDEX) >= 0) &&		(strcmp(CHAR_getChar(charaindex, CHAR_FMNAME), "") != 0))	{#ifdef _FMVER21		int eventflag = 0;		// 是否符合族长得资格		if (CheckLeaderQ(charaindex) >= 0)

⌨️ 快捷键说明

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