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

📄 复件 char.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 5 页
字号:
		"core_Dying",       /*  CHAR_DYINGFUNC */		"core_PlayerTalked",/*  CHAR_TALKEDFUNC */		"",                 /*  CHAR_PREATTACKEDFUNC    */		"",                 /*  CHAR_POSTATTACKEDFUNC    */		"",                 /*  CHAR_OFFFUNC    */		"",                 /*  CHAR_LOOKEDFUNC */		"",                 /*  CHAR_ITEMPUTFUNC    */		"",                 /*  CHAR_SPECIALTALKEDFUNC    */		"",                 /*  CHAR_WINDOWTALKEDFUNC    */#ifdef _USER_CHARLOOPS		"",					//	CHAR_LOOPFUNCTEMP1,		"",					//	CHAR_LOOPFUNCTEMP2,		"",					//CHAR_BATTLEPROPERTY,#endif	};	for( i = 0; i < CHAR_FUNCTABLENUM; i ++ ) {		strcpysafe( ch->charfunctable[i].string,					sizeof( ch->charfunctable[i]),					tmp[i]);	}}void CHAR_loginAddItem( int charaindex ){/*	int emptyindex, itemindex, id;	int itemID[10]={	20128, 20130, 20171, 20176, 20296,					20287, 20288, 20289, 20290, 20291};	{		int trn_num=0;		trn_num=CHAR_getInt(charaindex,CHAR_TRANSMIGRATION);		CHAR_setInt( charaindex, CHAR_MAXPOOLITEMHAVELIMIT, 10 + (trn_num * 4) )	;			CHAR_setInt( charaindex, CHAR_MAXPOOLPETHAVELIMIT , 5 + (trn_num * 2) );	}	while( 1){		emptyindex = CHAR_findEmptyItemBox( charaindex );		if( emptyindex == -1 ) break;		id = rand()%10;		itemindex = ITEM_makeItemAndRegist( itemID[id] );		if( !ITEM_CHECKINDEX( itemindex) ) break;		CHAR_setItemIndex( charaindex, emptyindex, itemindex);		ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, charaindex);		ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1);		//andy_log		print("@:%d.", emptyindex);	}	while( 1){		emptyindex = CHAR_findEmptyPoolItemBox( charaindex );		if( emptyindex == -1 ) break;		id = rand()%10;		itemindex = ITEM_makeItemAndRegist( itemID[id] );		if( !ITEM_CHECKINDEX( itemindex) ) break;		CHAR_setPoolItemIndex( charaindex, emptyindex, itemindex);		ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, charaindex);		ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1);		//andy_log		print("&:%d.", emptyindex);	}*/}void CHAR_loginCheckUserItem( int charaindex){	typedef void (*ATTACHFUNC)(int,int);	int i, itemindex;	for( i=0; i<CHAR_STARTITEMARRAY; i++){ //检查装备中道具		int ti;		itemindex = CHAR_getItemIndex( charaindex , i );		if( !ITEM_CHECKINDEX( itemindex)){			continue;		}		ITEM_setItemUniCode( itemindex);		if( (i == ITEM_getEquipPlace( charaindex, itemindex )) ||			i == CHAR_DECORATION1 || i == CHAR_DECORATION2 ){			char category[256];			ATTACHFUNC atf;			atf=(ATTACHFUNC)ITEM_getFunctionPointer(itemindex,ITEM_ATTACHFUNC);			if( atf )	atf( charaindex, itemindex );			if( ITEM_canuseMagic( itemindex)) {				snprintf( category, sizeof( category), "J%d",i);				CHAR_sendStatusString( charaindex, category );			}		}else{			if( (ti = CHAR_findEmptyItemBox( charaindex )) == -1 ) continue;			CHAR_setItemIndex( charaindex , i, -1);			CHAR_setItemIndex( charaindex , ti, itemindex);		}			}	for( i = CHAR_STARTITEMARRAY ; i < CHAR_MAXITEMHAVE ; i++ ){ //检查携带道具		itemindex = CHAR_getItemIndex( charaindex , i );		if( !ITEM_CHECKINDEX( itemindex)) continue;		ITEM_setItemUniCode( itemindex);	}	//检查寄放店道具	for( i = 0 ; i < CHAR_MAXPOOLITEMHAVE ; i++ ){		itemindex = CHAR_getPoolItemIndex( charaindex , i );		if( !ITEM_CHECKINDEX( itemindex) ) continue;		ITEM_setItemUniCode( itemindex);	}	// WON ADD 修正道具的设定问题	if(!NPC_EventCheckFlg( charaindex,134)){		for (i = 0; i < CHAR_MAXITEMHAVE; i ++) {			itemindex = CHAR_getItemIndex(charaindex, i);			fix_item_bug(charaindex, itemindex);		}			for (i = 0; i < CHAR_MAXPOOLITEMHAVE; i++) {			itemindex = CHAR_getPoolItemIndex(charaindex, i);			fix_item_bug(charaindex, itemindex);		}		NPC_EventSetFlg(charaindex, 134);	}}void CHAR_LoginBesideSetWorkInt( int charaindex, int clifd){	CHAR_setWorkInt( charaindex, CHAR_WORKPARTYMODE, CHAR_PARTY_NONE);	CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX1, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX2, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX3, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX4, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKPARTYINDEX5, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKTRADEMODE, CHAR_TRADE_FREE);	CHAR_setWorkInt( charaindex, CHAR_WORKFMINDEXI, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKFMCHANNEL, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKFMCHANNELQUICK, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKFMFLOOR, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKFMDP, 0);	CHAR_setWorkInt( charaindex, CHAR_WORKFMPKFLAG, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKFMSETUPFLAG, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKFMMANINDEX, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKFMCHARINDEX, -1);		CHAR_setWorkInt( charaindex, CHAR_WORKBATTLEFLAG, -1);	CHAR_setWorkInt( charaindex, CHAR_WORK_PET0_STAT, 0);	CHAR_setWorkInt( charaindex, CHAR_WORK_PET1_STAT, 0);	CHAR_setWorkInt( charaindex, CHAR_WORK_PET2_STAT, 0);	CHAR_setWorkInt( charaindex, CHAR_WORK_PET3_STAT, 0);	CHAR_setWorkInt( charaindex, CHAR_WORK_PET4_STAT, 0);	CHAR_setWorkInt( charaindex, CHAR_WORKACTION, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKEFFECT, -1);	CHAR_setWorkInt( charaindex, CHAR_WORKFD, clifd);	if( CHAR_getInt( charaindex, CHAR_SILENT) > 100000000 )		CHAR_setInt( charaindex, CHAR_SILENT, 0);	CHAR_setWorkInt( charaindex, CHAR_WORKLOGINTIME, (int)NowTime.tv_sec);	CHAR_setWorkInt( charaindex, CHAR_WORKTALKCOUNT, 0 );	CHAR_setWorkInt( charaindex, CHAR_WORKTALKTIME, (int)NowTime.tv_sec);	CHAR_setWorkInt( charaindex, CHAR_WORKPETFOLLOW, -1);#ifdef _ITEM_ADDEXP	//vincent 经验提升	CHAR_setWorkInt(charaindex,CHAR_WORKITEM_ADDEXP, 0);	CHAR_setWorkInt(charaindex,CHAR_WORKITEM_ADDEXPTIME, 0);#endif#ifdef _NEWOPEN_MAXEXP	if( CHAR_getInt( charaindex, CHAR_OLDEXP) > 0 || CHAR_getInt( charaindex, CHAR_OLDEXP) < 0 ){		CHAR_ChangeExp( charaindex);	}#endif#ifdef _PETSKILL_BECOMEFOX    CHAR_setWorkInt( charaindex, CHAR_WORKFOXROUND, -1 );#endif#ifdef _MAP_TIME	CHAR_setWorkInt(charaindex,CHAR_WORK_MAP_TIME,0);	#endif#ifdef _ITEM_ADDEXP2	CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXP,			CHAR_getInt( charaindex, CHAR_ADDEXPPOWER) );	CHAR_setWorkInt( charaindex, CHAR_WORKITEM_ADDEXPTIME ,			CHAR_getInt( charaindex, CHAR_ADDEXPTIME) );#endif}BOOL CHAR_CheckProfessionEquit( int toindex){	int i, j, itemindex, newindex;	int FixItem[16]={		2028,2029,2030,2031,2032,2033,2034,2035,		2036,2037,2038,2039,2040,2041,2042,2043	};	CHAR_HaveSkill *pSkil;	if(!NPC_EventCheckFlg( toindex, 149)){		for (i = 0; i < CHAR_MAXITEMHAVE; i ++) {			itemindex = CHAR_getItemIndex( toindex, i);			if( !ITEM_CHECKINDEX( itemindex)) continue;			for( j=0; j<16; j++){				if( ITEM_getInt( itemindex, ITEM_ID) == FixItem[j] ){					CHAR_setItemIndex( toindex, i, -1 );					ITEM_endExistItemsOne( itemindex);					newindex = ITEM_makeItemAndRegist( FixItem[j]);					if( !ITEM_CHECKINDEX( newindex) ) break;					CHAR_setItemIndex( toindex , i, newindex);					ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, toindex);					ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1);					CHAR_sendItemDataOne( toindex, i);				}			}		}			for (i = 0; i < CHAR_MAXPOOLITEMHAVE; i++){			int itemindex = CHAR_getPoolItemIndex(toindex, i);			if( !ITEM_CHECKINDEX( itemindex)) continue;			for( j=0; j<16; j++){				if( ITEM_getInt( itemindex, ITEM_ID) == FixItem[j] ){					CHAR_setPoolItemIndex( toindex, i, -1);					ITEM_endExistItemsOne( itemindex);					newindex = ITEM_makeItemAndRegist( FixItem[j]);					if( !ITEM_CHECKINDEX( newindex) ) break;					CHAR_setPoolItemIndex( toindex , i, newindex);					ITEM_setWorkInt( itemindex, ITEM_WORKCHARAINDEX, toindex);					ITEM_setWorkInt( itemindex, ITEM_WORKOBJINDEX, -1);				}			}		}		NPC_EventSetFlg( toindex, 149);	}	if( NPC_EventCheckFlg( toindex, 156) ) return TRUE;	NPC_EventSetFlg( toindex, 156);	return TRUE;}static void CHAR_setLuck( int charaindex);void CHAR_login( int clifd, char* data, int saveindex ){	int charaindex,objindex;	Char    ch;	int per;//	char c_temp2[4096];	if( CHAR_makeCharFromStringToArg( data , &ch ) == FALSE ){		fprint ("制作人物错误!\n");		goto MAKECHARDATAERROR;	}	CHAR_setCharFuncTable( &ch);	charaindex =  CHAR_initCharOneArray( &ch );	if( charaindex == -1 ){		fprint ("制作人物错误!\n");		CHAR_endCharData(&ch);		goto MAKECHARDATAERROR;	}#ifdef _NEWSAVE	CHAR_setInt( charaindex, CHAR_SAVEINDEXNUMBER, saveindex);	print("存档装载索引:%d\n", CHAR_getInt( charaindex, CHAR_SAVEINDEXNUMBER) );#endif	char cdkey[16];	CONNECT_getCdkey( clifd, cdkey, sizeof( cdkey ));	if(strcmp(cdkey,CHAR_getChar( charaindex, CHAR_CDKEY))!=0){//		print( "修正人物账号%s=>%s\n",CHAR_getChar( charaindex, CHAR_CDKEY),cdkey);//		CHAR_setChar( charaindex, CHAR_CDKEY, cdkey);			print( "账号%s与档案人物账号%s不相同",cdkey,CHAR_getChar( charaindex, CHAR_CDKEY));			goto DELETECHARDATA;	}	printf("\ncharaindex:%d\n",charaindex);	if( CHAR_getFlg( charaindex, CHAR_ISDIE)){		print( "?data? ISDIE flg is standing.\n");		CHAR_setFlg( charaindex, CHAR_ISDIE, FALSE);	}#ifndef _FIX_UNNECESSARY	// Arminius 7.9 airplane logout	if( CHAR_getWorkInt( charaindex, CHAR_WORKPARTYMODE) == CHAR_PARTY_CLIENT ) {		int oyaindex = CHAR_getWorkInt( charaindex, CHAR_WORKPARTYINDEX1);		if( CHAR_CHECKINDEX( oyaindex)) {			if (CHAR_getInt( oyaindex, CHAR_WHICHTYPE ) == CHAR_TYPEBUS) {				if ((CHAR_getInt( oyaindex, CHAR_BASEIMAGENUMBER) !=100355) &&					(CHAR_getInt( oyaindex, CHAR_BASEIMAGENUMBER) !=100461))	{					if(CHAR_getWorkInt(oyaindex,CHAR_NPCWORKINT5)==1) {					  if( CHAR_getInt( charaindex, CHAR_LASTTALKELDER)>=0){						int fl,x,y;						CHAR_getElderPosition( CHAR_getInt( charaindex, CHAR_LASTTALKELDER), &fl, &x, &y );						CHAR_setInt(charaindex,CHAR_FLOOR,fl);						CHAR_setInt(charaindex,CHAR_X,x);						CHAR_setInt(charaindex,CHAR_Y,y);					  }					}				}			}		}	}#endif// Nuke 20040420: CHECK MAX POINT#if 1   {  	    int lv,vi,str,tou,dx,skup,trn,teq,quest,level,total,max;    float table[]={437,490,521,550,578,620,888}; //各转最高点数(减10)    //float table[]={620,660,700,740,780,820}; //各转最高点数(减10)    lv = CHAR_getInt(charaindex,CHAR_LV);  	vi = CHAR_getInt(charaindex,CHAR_VITAL);		str = CHAR_getInt(charaindex,CHAR_STR);		tou = CHAR_getInt(charaindex,CHAR_TOUGH);		dx = CHAR_getInt(charaindex,CHAR_DEX);    trn = CHAR_getInt(charaindex,CHAR_TRANSMIGRATION);    teq = CHAR_getInt(charaindex,CHAR_TRANSEQUATION);    skup = CHAR_getInt(charaindex,CHAR_SKILLUPPOINT);    quest=(teq >> 16)& 0xFF;    level=teq & 0xFFF;    total=(vi+str+tou+dx)/100+skup;//    max=(trn==0)?(lv-1)*3+20+10: // 0转447//      (lv-1)*3+table[trn-1]/12.0+quest/4.0+(level-trn*85)/4.0+10+1+10+trn*10;/*		print("升级点数:%d\n",(lv-1)*getSkup());		print("继承点术:%f\n",(table[trn-1]/12.0));		print("历史任务:%f\n",quest/4.0);		print("历史等级:%f\n",(level-trn*85)/4.0);		print("历史等级:%d/%d\n",level,trn*85);		print("转前祝福:%d\n",getTransPoint(trn));		print("误差1点:%d\n",1);		print("转後祝福:%d\n",getTransPoint(trn));		print("转生红利:%d\n",trn*10);*/#ifdef _REVLEVEL	if (strcmp(getRevLevel(),"是")==0){		if(trn>=getChartrans()){			if(lv>getMaxLevel()){				lv=getMaxLevel();				print("[%s:%s]lv:%d->%d",								CHAR_getChar(charaindex,CHAR_CDKEY),							  CHAR_getChar(charaindex,CHAR_NAME),							  CHAR_getInt(charaindex,CHAR_LV),								getMaxLevel());			}		}else if(lv>getYBLevel()){			lv=getYBLevel();			print("[%s:%s]lv:%d->%d",							CHAR_getChar(charaindex,CHAR_CDKEY),						  CHAR_getChar(charaindex,CHAR_NAME),						  CHAR_getInt(charaindex,CHAR_LV),							getMaxLevel());		}		CHAR_setInt(charaindex,CHAR_LV,lv);	}#endif		float jxds=(level-trn*85)/4.0;		if(jxds<0)jxds=0;#ifdef _SKILLUPPOINT_CF		max=(trn==0)?getTransPoint(trn)+(lv-1)*getSkup()+20:			getTransPoint(trn)+(lv-1)*getSkup()+table[trn-1]/12.0+quest/4.0+jxds+getTransPoint(trn)+ trn*10+1;#else    max=(trn==0)?(lv-1)*3+20+10: // 0转447      (lv-1)*3+table[trn-1]/12.0+quest/4.0+(level-trn*85)/4.0+10+1+10+trn*10;#endif/* 1转以上=升级点数+继承点术+历史任务+历史等级+转前祝福+误差1点+转後祝福+转生红利 *///	if (trn==6) max=max-20; /* 六转时没有转前祝福与转後祝福 */#ifdef _REVLEVEL  if (total>max && strcmp(getPoint(),"否")==0)#else	if (total>max )#endif  {	  print("\n重调点数[%s:%s]:%d->%d ",	  		CHAR_getChar(charaindex,CHAR_CDKEY),			  CHAR_getChar(charaindex,CHAR_NAME),	  		total,max);    CHAR_setInt(charaindex,CHAR_VITAL,1000);    CHAR_setInt(charaindex,CHAR_STR,0);    CHAR_setInt(charaindex,CHAR_TOUGH,0);    CHAR_setInt(charaindex,CHAR_DEX,0);    CHAR_setInt(charaindex,CHAR_SKILLUPPOINT,max-10);  }	// 补足六转点数不足之玩家/*	if ((trn==6) && (total < max))	{   		print("\n补足点数[%s:%s]:%d->%d ",		  CHAR_getChar(charaindex,CHAR_CDKEY),		  CHAR_getChar(charaindex,CHAR_NAME),		  total,max);		CHAR_setInt(charaindex,CHAR_SKILLUPPOINT,			CHAR_getInt(charaindex,CHAR_SKILLUPPOINT)+(max-total));	}*/  }#endif	{		int EQ_BBI=-1, EQ_ARM=-1, EQ_NUM=-1, EQ_BI=-1, CH_BI=-1;		CH_BI = CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER);				EQ_BBI = CHAR_getInt( charaindex, CHAR_BASEBASEIMAGENUMBER);		if(CH_BI != EQ_BBI){			EQ_ARM = CHAR_getItemIndex(charaindex,CHAR_ARM);			EQ_NUM=ITEM_FIST;			if ( ITEM_CHECKINDEX( EQ_ARM))	{				EQ_NUM=ITEM_getInt(EQ_ARM,ITEM_TYPE);			}				EQ_BI=CHAR_getNewImagenumberFromEquip( EQ_BBI, EQ_NUM);				if( CHAR_getInt( charaindex, CHAR_RIDEPET) == -1 )	{	//非骑宠				if( EQ_BI != CH_BI )	{					print("\n 非骑宠形象 %d [%d=>%d]", charaindex,						CHAR_getInt( charaindex, CHAR_BASEIMAGENUMBER),						EQ_BI );					CHAR_setInt( charaindex, CHAR_BASEIMAGENUMBER, EQ_BI);				}			}		}	}	{	  int x,y;	  if( CHAR_isAppearPosition( CHAR_getInt( charaindex, CHAR_FLOOR),&x, &y ))	{	  	int flelder, xelder, yelder;			CHAR_getElderPosition(CHAR_getInt(charaindex, CHAR_LASTTALKELDER),	  			&flelder, &xelder, &yelder);			   CHAR_setInt(charaindex, CHAR_FLOOR, flelder);			   CHAR_setInt(charaindex, CHAR_X, xelder);

⌨️ 快捷键说明

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