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

📄 复件 char.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 5 页
字号:
			eventflag = 1;		if (CHAR_getInt(charaindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER)			SetFMPetVarInit(charaindex);	   	saacproto_ACFMCharLogin_send(				 acfd,	   	   CHAR_getChar(charaindex, CHAR_FMNAME),	   	   CHAR_getInt(charaindex, CHAR_FMINDEX),	   	   CHAR_getChar(charaindex, CHAR_NAME),	   	   CHAR_getChar(charaindex, CHAR_CDKEY),	   	   CHAR_getInt(charaindex, CHAR_LV), eventflag,	   	   CONNECT_getFdid(clifd)#ifdef _FM_MODIFY				 ,getServernumber()#endif				 );	}#ifdef _FMVER21	else		SetFMVarInit(charaindex);#endif		#endif	AnnounceToPlayerWN( clifd );	print("\n登陆人物名称:%s ", CHAR_getChar(charaindex, CHAR_NAME ) );		{		unsigned long ip;		char ipstr[512];		ip=CONNECT_get_userip(clifd);		sprintf(ipstr,"%d.%d.%d.%d",        	((unsigned char *)&ip)[0],        	((unsigned char *)&ip)[1],        	((unsigned char *)&ip)[2],        	((unsigned char *)&ip)[3]);		LogLogin(			CHAR_getChar( charaindex, CHAR_CDKEY),			CHAR_getChar( charaindex, CHAR_NAME),			saveindex, ipstr			);	}	return;DELETECHARDATA:	CHAR_endCharOneArray( charaindex );MAKECHARDATAERROR:	{		int i;		char cdkey[CDKEYLEN];		for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) {			if( CHAR_CHECKINDEX(ch.unionTable.indexOfPet[i] ) ) {				CHAR_endCharOneArray( ch.unionTable.indexOfPet[i] );			}		}        CONNECT_getCdkey( clifd, cdkey, sizeof(cdkey ));        saacproto_ACLock_send( acfd, cdkey, UNLOCK, CONNECT_getFdid(clifd) );  }  CONNECT_setState(clifd, WHILECANNOTLOGIN );  CONNECT_setCharaindex( clifd, -1 );	lssproto_CharLogin_send( clifd, FAILED, "Download data ok,but cannot make chara");}BOOL CHAR_charSaveFromConnectAndChar( int fd, Char* ch, BOOL unlock ){	char*  chardata;  char   cdkey[CDKEYLEN];		chardata = CHAR_makeStringFromCharData( ch );	if( chardata == "\0" )return FALSE;  CONNECT_getCdkey( fd, cdkey, sizeof(cdkey));    if(strcmp(cdkey,ch->string[CHAR_CDKEY].string)!=0){  	printf("连接:%s与账号:%s不符合,不给予存档",cdkey,ch->string[CHAR_CDKEY].string);  }#ifdef _NEWSAVE//	print("saveindex_save:%d\n",ch->data[CHAR_SAVEINDEXNUMBER]);	saacproto_ACCharSave_send( acfd, ch->string[CHAR_CDKEY].string,							   ch->string[CHAR_NAME].string,							   CHAR_makeOptionString( ch ),  chardata,							   unlock, CONNECT_getFdid(fd), ch->data[CHAR_SAVEINDEXNUMBER] );#else	saacproto_ACCharSave_send( acfd, cdkey,							   ch->string[CHAR_NAME].string,							   CHAR_makeOptionString( ch ),  chardata,							   unlock, CONNECT_getFdid(fd) );#endif	return TRUE;}BOOL CHAR_charSaveFromConnect( int fd , BOOL unlock){	Char*   ch;	int charaindex = CONNECT_getCharaindex(fd);	if( CHAR_CHECKINDEX( charaindex ) == FALSE)return FALSE;	ch = CHAR_getCharPointer( charaindex );	if( !ch )return FALSE;	return CHAR_charSaveFromConnectAndChar( fd, ch, unlock );}/*------------------------------------------------------------ * 夫弘失它玄允月凛卞  匀凶引引夫弘失它玄匹五卅中失奶  丞毛 *   允 * 娄醒 *  charaindex  int     平乓仿弁正□及奶件犯永弁旦 * 忒曰袄 *  卅仄 ------------------------------------------------------------*/static void CHAR_dropItemAtLogout( int charaindex ){	int i;	for( i=0 ; i<CHAR_MAXITEMHAVE ; i++ ){		int     itemindex;		itemindex = CHAR_getItemIndex(charaindex,i);		if( ITEM_CHECKINDEX(itemindex) == FALSE )continue;		if( ITEM_getInt(itemindex,ITEM_DROPATLOGOUT ) == TRUE ) {			{				LogItem(					CHAR_getChar( charaindex, CHAR_NAME ),					CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称					itemindex,#else		       		ITEM_getInt( itemindex, ITEM_ID ),#endif					"LogoutDel(登出後消失的道具)",					CHAR_getInt( charaindex,CHAR_FLOOR),					CHAR_getInt( charaindex,CHAR_X ), 		      		CHAR_getInt( charaindex,CHAR_Y ),					ITEM_getChar( itemindex, ITEM_UNIQUECODE),					ITEM_getChar( itemindex, ITEM_NAME),					ITEM_getInt( itemindex, ITEM_ID)				);			}			CHAR_setItemIndex( charaindex, i ,-1);	    CHAR_sendItemDataOne( charaindex, i);			ITEM_endExistItemsOne(itemindex);		}	}}BOOL _CHAR_logout( char *file, int line, int clifd, BOOL save ){	int     charindex, battleindex;	BOOL	ret = TRUE;	int	fmindexi, channel, i;	charindex = CONNECT_getCharaindex( clifd );	if( !CHAR_CHECKINDEX( charindex)) {		print( "logout err : clifd[%d] charaindex[%d] %s:%d from %s:%d \n", 				clifd, charindex, __FILE__, __LINE__, file, line);		ret = FALSE;	}	battleindex = CHAR_getWorkInt( charindex, CHAR_WORKBATTLEINDEX );	if( battleindex >= 0 ){		BATTLE_EscapeDpSend( battleindex, charindex );		CHAR_setInt( charindex, CHAR_DUELPOINT,			CHAR_getInt( charindex, CHAR_DUELPOINT )			+ CHAR_getWorkInt( charindex, CHAR_WORKGETEXP ) );		BATTLE_Exit( charindex, battleindex );	}	CHAR_dropItemAtLogout( charindex );	CHAR_DischargeParty( charindex, 0);	if(CHAR_getChar(charindex, CHAR_FMNAME) != NULL )	{		if(strlen(CHAR_getChar(charindex, CHAR_FMNAME)) > 0 &&			strlen(CHAR_getChar(charindex, CHAR_FMNAME)) < sizeof( STRING32) )		if( (CHAR_getInt(charindex, CHAR_FMINDEX) >= 0)	&&                				(strcmp(CHAR_getChar(charindex, CHAR_FMNAME), "") != 0) )	{	   		saacproto_ACFMCharLogout_send(acfd,	   		   CHAR_getChar(charindex, CHAR_FMNAME),	   		   CHAR_getInt(charindex, CHAR_FMINDEX),	   		   CHAR_getChar(charindex, CHAR_NAME),	   		   CHAR_getChar(charindex, CHAR_CDKEY),	   		   CHAR_getInt(charindex, CHAR_LV),	   		   CHAR_getWorkInt(charindex, CHAR_WORKFMINDEXI),	   		   CONNECT_getFdid(clifd));		}	}	// Robin 0606 channel		fmindexi = CHAR_getWorkInt(charindex, CHAR_WORKFMINDEXI);	channel = CHAR_getWorkInt(charindex, CHAR_WORKFMCHANNEL);	i = 0;	if( (fmindexi > 0) && (channel >= 0) && (fmindexi < FAMILY_MAXNUM) && (channel < FAMILY_MAXCHANNEL)) {		while( i < FAMILY_MAXMEMBER ) {		    if( channelMember[fmindexi][channel][i] == charindex ) {		    	channelMember[fmindexi][channel][i] = -1;		    	break;		    }		    i++;		}	}	// Robin 0707 petFollow	CHAR_pickupFollowPet( charindex, -1 );	for( i=0; i<FAMILY_MAXMEMBER; i++ ){		if ((fmindexi > 0) && (fmindexi < FAMILY_MAXNUM)){			if( familyMemberIndex[fmindexi][i] == charindex ){				familyMemberIndex[fmindexi][i] = -1;				break;			}		}	}	// Robin 0629 silent	if( CHAR_getInt( charindex, CHAR_SILENT) > 0 ){		int silent_t, login_t;		login_t = CHAR_getWorkInt(charindex, CHAR_WORKLOGINTIME);		silent_t = CHAR_getInt( charindex, CHAR_SILENT);		silent_t = silent_t - ( (int)NowTime.tv_sec-login_t);		if( silent_t<0 ) silent_t = 0;		CHAR_setInt( charindex, CHAR_SILENT, silent_t);	}#ifdef _ITEM_ADDEXP2	if( CHAR_getWorkInt( charindex, CHAR_WORKITEM_ADDEXP) > 0 ) {		// 登入时智果效果自动减90秒		CHAR_setWorkInt( charindex, CHAR_WORKITEM_ADDEXPTIME,			CHAR_getWorkInt( charindex, CHAR_WORKITEM_ADDEXPTIME) - 90 );		if( CHAR_getWorkInt( charindex, CHAR_WORKITEM_ADDEXPTIME) <= 0 ) {			CHAR_setWorkInt( charindex, CHAR_WORKITEM_ADDEXPTIME, 0);			CHAR_setWorkInt( charindex, CHAR_WORKITEM_ADDEXP, 0);		}	}	CHAR_setInt( charindex, CHAR_ADDEXPPOWER,			CHAR_getWorkInt( charindex, CHAR_WORKITEM_ADDEXP) );	CHAR_setInt( charindex, CHAR_ADDEXPTIME,			CHAR_getWorkInt( charindex, CHAR_WORKITEM_ADDEXPTIME) );#endif#ifdef _TIME_TICKET	if( check_TimeTicketMap( CHAR_getInt( charindex, CHAR_FLOOR)) ) {		CHAR_warpToSpecificPoint( charindex, 7001, 41, 6);	}#endif//VIP上线通知
#ifdef _VIP_ALL
	if(getShowVip()!=0)
		if(CHAR_getInt( charaindex,CHAR_VIPRIDE )==1){
			int i;
			int playernum = CHAR_getPlayerMaxNum();
			char *MyServerName = getGameserverID();
			char *MyGameservername = getGameservername();
			char VipMsg1[256];
			char VipMsg2[256];
			char VipMsg3[256];
			char *MyName = CHAR_getChar( charaindex,CHAR_NAME );
			char buf[80];
			time_t t;
			t=time(0);
			strcpy(buf,ctime(&t));
			buf[strlen(buf)-1]=0;

			for( i = 0 ; i < playernum ; i++) 
			{
				sprintf( VipMsg1, "全国上下,热烈欢呼尊贵的%s会员( %s )登陆%s." , MyGameservername , MyName , MyServerName );
				CHAR_talkToCli( i, -1, VipMsg1, CHAR_COLORGREEN );
				sprintf( VipMsg2, "%s精确报时: %s." , MyServerName , buf );
				CHAR_talkToCli( i, -1, VipMsg2, CHAR_COLORGREEN );
				sprintf( VipMsg3, "\%s提醒您警惕网络骗子,妥善保管游戏帐号!!" , MyGameservername );
				CHAR_talkToCli( i, -1, VipMsg3, CHAR_COLORGREEN );
			}
		}

#endif#ifdef _AUTO_PK		if(CHAR_getInt(charindex,CHAR_FLOOR)==20000 && CHAR_getInt(charindex,CHAR_AUTOPK)!=-1 ){	  	char buf[64];	  	int i,num=0,winindex;	  	int playernum = CHAR_getPlayerMaxNum();	  	sprintf(buf, "胆小鬼%s退出当前比赛!",CHAR_getChar(charindex,CHAR_NAME));			AutoPk_PKSystemTalk( buf, buf );			if(CHAR_getWorkInt( charindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE){				if(AutoPk_PKTimeGet()<=0){					for(i=0;i<playernum;i++){						if(CHAR_CHECKINDEX(i) == FALSE ) continue;						if(CHAR_getInt(i, CHAR_FLOOR) == 20000 ){							if(CHAR_getInt(i,CHAR_AUTOPK)!=-1){								if(i!=charindex)									winindex=i;								num++;							}						}					}					if(num==2){						int fl = 0, x = 0, y = 0;						CHAR_getElderPosition(CHAR_getInt(winindex, CHAR_LASTTALKELDER), &fl, &x, &y);						CHAR_warpToSpecificPoint(winindex, fl, x, y);						AutoPk_ChampionShipSet( CHAR_getChar(winindex,CHAR_CDKEY), 															CHAR_getChar(winindex,CHAR_NAME), CHAR_getInt(winindex,CHAR_AUTOPK),1);						AutoPk_ChampionShipSet( CHAR_getChar(charindex,CHAR_CDKEY), 															CHAR_getChar(charindex,CHAR_NAME), 															CHAR_getInt(charindex,CHAR_AUTOPK),2);						AutoPk_GetChampionShip();					}				}			}		}#endif	// Robin add	CHAR_setInt( charindex, CHAR_LASTLEAVETIME, (int)time(NULL));	if( save ){		CHAR_charSaveFromConnect( clifd ,TRUE);	}	ADDRESSBOOK_notifyLoginLogout(charindex,0);	CHAR_CharaDeleteHavePet( charindex);	CHAR_CharaDelete( charindex );	return ret;}/*------------------------------------------------------------ * watch奶矛件玄毛霜月井升丹井民尼永弁允月 * 娄醒 *  objindex    int             奶矛件玄毛云仇仄凶平乓仿及左皮斥尼弁玄 *                                  奶件犯永弁旦 *	index		int				奶矛件玄毛云仇仄凶平乓仿及奶件犯永弁旦 *  recvindex   int				奶矛件玄毛熬仃午月平乓仿及index *	chac		int				失弁扑亦件及潘   * 忒曰袄 		TRUE:	霜匀化中中方 *				FALSE: 	蛲   ------------------------------------------------------------*/static BOOL CHAR_sendWatchEvent_sendCheck( int objindex, int index,											int recvindex, int chac){	/* 愤坌互NPC匹锹澎手NPC及凛  仃月 */	if( OBJECT_getType( objindex) == OBJTYPE_CHARA &&		CHAR_getInt( index, CHAR_WHICHTYPE) != CHAR_TYPEPLAYER &&		CHAR_getInt(recvindex, CHAR_WHICHTYPE )		!= CHAR_TYPEPLAYER )	{		return FALSE;	}	/* 平乓仿动陆及watch 反民尼永弁  仄卞蕞 */	if( OBJECT_getType( objindex) != OBJTYPE_CHARA) {		return TRUE;	}	/*	 * 愤坌尺及汹五及    反  仄卞允月	 */	if( index == recvindex && chac == CHAR_ACTWALK ) {		return FALSE;	}	if( CHAR_getInt( recvindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) {		/* 爵    及谛卞反  蛲分井日霜耨仄卅中 */		if( CHAR_getWorkInt( recvindex,CHAR_WORKBATTLEMODE)			!= BATTLE_CHARMODE_NONE)		{			return FALSE;		}		/* 失弁扑亦件元扎  中凛 */		if( CHAR_getWorkInt( index, CHAR_WORKACTION) == -1 ) {			if( OBJECT_getType(objindex) == OBJTYPE_CHARA) {				/*   元由□  奴分匀凶日				 * 褪动陆反职及丢件田□卞汹五毛霜耨仄卅中				 */				if( CHAR_getWorkInt( index, CHAR_WORKPARTYMODE )						== CHAR_PARTY_CLIENT &&					CHAR_getWorkInt( recvindex, CHAR_WORKPARTYMODE)						!= CHAR_PARTY_NONE &&					chac == CHAR_ACTWALK )				{					int found = FALSE;					int loop;					/* 阂毛譬屯月 */					for( loop = 1; loop < CHAR_PARTYMAX; loop ++ ) {						int partycharaindex = CHAR_getPartyIndex( recvindex, loop);						/*   中凶平乓仿互愤坌及由□  奴及阂分匀凶 */						if( partycharaindex == index ) {							found = TRUE;							break;						}					}					if( found ) return FALSE;				}				/* 褪反阂及STAND毛霜耨仄卅中 */				if( CHAR_getWorkInt( index, CHAR_WORKPARTYMODE)					== CHAR_PARTY_CLIENT &&					CHAR_getWorkInt( recvindex, CHAR_WORKPARTYMODE)						== CHAR_PARTY_LEADER &&					chac == CHAR_ACTSTAND)				{					int found = FALSE;					int loop;					/* 阂毛譬屯月 */					for( loop = 1; loop < CHAR_PARTYMAX; loop ++ ) {						int partycharaindex							= CHAR_getWorkInt( recvindex,											CHAR_WORKPARTYINDEX1+loop);						/* STAND仄凶平乓仿互愤坌及由□  奴及阂分匀凶 */						if( partycharaindex == index ) {							found = TRUE;							break;						}					}					if( found ) return FALSE;				}			}		}	}	return TRUE;}void CHAR_sendWatchEvent( int objindex, int chac, int* opt,						  int optlen,BOOL myflg ){	int     i;	int j;	int     x=0,y=0,dir=0;	int     floor;	int     watchopt[32];	int     watchoptlen=0;	typedef void (*WATCHF)(int,int,CHAR_ACTION,int,int,int,int*,int);	int		index;	if( !CHECKOBJECTUSE(objindex) )return;	index = OBJECT_getIndex( objindex);

⌨️ 快捷键说明

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