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

📄 addressbook.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#define __ADDRESSBOOK_C_#include "version.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <strings.h>#include "addressbook.h"#include "char.h"#include "handletime.h"#include "buf.h"#include "net.h"#include "lssproto_serv.h"#include "saacproto_cli.h"#include "object.h"#include "battle.h"#include "configfile.h"#include "npcutil.h"#include "pet.h"#include "petmail.h"#include "log.h"/*裔烂丢永本□斥及  赢赢今[票匹烂聒允月  侬  及赢今反 仇木动票卞允月仇午*/#define ADDRESSBOOK_FIXEDMESSAGE_MAXLEN  128/* 愤坌及蟆卞簿手中卅井匀凶及匹}失玉伊旦皮永弁卞馨笛匹五卅井匀凶   午五及裔烂丢永本□斥 */#define ADDRESSBOOK_CANTADD "那里没有任何人。"#define ADDRESSBOOK_CANTADD2 "无法交换名片。"/* 簿井毛笛尹月仇午互匹五凶午五}笛尹方丹午仄凶谛卞霜耨允月丢永本□斥*/#define ADDRESSBOOK_ADDED "和%s交换名片 。"/* 簿井卞涌毛创尹日木凶日 */#define ADDRESSBOOK_BEINGADDED "和%s交换名片 。"/* 巨件玄伉互中匀天中分匀凶午五及丢永本□斥 */#define ADDRESSBOOK_MYTABLEFULL "名片匣已满。"/* 锹澎及巨件玄伉互中匀天中分匀凶午五及丢永本□斥 */#define ADDRESSBOOK_HISTABLEFULL "对方的名片匣已满。"/* 丢永本□斥毛霜耨允月及卞岳  仄凶午五 */#define ADDRESSBOOK_SENT  "送信给%s 。"/* 丢永本□斥毛霜耨允月及卞撩  仄凶午五 */#define ADDRESSBOOK_UNSENT  "无法送信给%s 。"/* 簿井毛创尹方丹午仄凶互}湃卞创尹化中凶   */#define ADDRESSBOOK_ALREADYADDED  "已经和%s交换过名片了。 "/*   铜毛域  读卞  丹橇谪   */#define ADDRESSBOOK_GIVEADDRESS  "从%s得到名片。"/*   铜毛域  读卞丐仆月橇谪   */#define ADDRESSBOOK_TAKEADDRESS1  "给%s自己的名片。"/*   铜毛域  读卞丐仆月橇谪   */#define ADDRESSBOOK_TAKEADDRESS2  "因为%s想要名片,所以将名片给他了。"#define	ADDRESSBOOK_RETURNED1	\"从%s寄来信件,但由於没有%s的名片又将信件退回。"#define	ADDRESSBOOK_RETURNED2	\"寄信件给%s,但由於%s 没有名片,所以信件又被退回来了。"#define	PETMAIL_RETURNED1	\"%s不在这个世界里,所以无法寄送信件给他。"/* static匹银丹迕[  五中袄手*/char ADDRESSBOOK_returnstring[25*128];static int ADDRESSBOOK_findBlankEntry( int cindex );static BOOL ADDRESSBOOK_makeEntryFromCharaindex( int charaindex,												 ADDRESSBOOK_entry* ae);/*------------------------------------------------------------ * 失玉伊旦皮永弁及丢永本□斥毛霜耨允月 * MSG皿夫玄戊伙井日勾井歹木月[ * * 支月仇午反}connection井日cdkey匹腹绸仄化}平乓仿  手 * 甲永玄仄凶日} MSG_send允月[公及午五卞}愤坌及树  互 * 锹澎及伉旦玄卞卅井匀凶日窒手仄卅中午中丹仇午分[ * 娄醒 *  cindex  int     平乓仿及index *  aindex  int     失玉伊旦皮永弁及index *  text    char*   霜耨允月  侬   *  color   int     缙 * 忒曰袄 * 左件仿奶件及平乓仿卞丢永本□斥毛霜耨仄凶日TRUE , * 左白仿奶件卞瓒  仄凶日FALSE毛井尹允 ------------------------------------------------------------*/BOOL ADDRESSBOOK_sendMessage( int cindex, int aindex, char* text , int color ){	int 	i ;	char 	tmpmsg[256];	char	textbuffer[2048];	char	*mycd;	char 	*mycharaname = CHAR_getChar(cindex,CHAR_NAME );	struct  tm tm1;	ADDRESSBOOK_entry *ae;	int     playernum = CHAR_getPlayerMaxNum();	if( !CHAR_CHECKINDEX(cindex) )return FALSE;	ae = CHAR_getAddressbookEntry( cindex , aindex );	if( ae == NULL )return FALSE;	//getcdkeyFromCharaIndex(cindex, mycd,sizeof(mycd) );	mycd = CHAR_getChar( cindex, CHAR_CDKEY);     	memcpy( &tm1, localtime( (time_t *)&NowTime.tv_sec), sizeof( tm1));    snprintf( textbuffer, sizeof( textbuffer),     		"%2d/%02d %2d:%02d|%s|-1",     		tm1.tm_mon +1, tm1.tm_mday, tm1.tm_hour, tm1.tm_min,    		text);		/*   扔□田□  卞中月凛 */	for( i = 0 ; i < playernum ; i ++){		if( CHAR_CHECKINDEX( i) &&			strcmp( CHAR_getChar( i, CHAR_CDKEY), ae->cdkey) == 0 &&			strcmp( CHAR_getChar( i, CHAR_NAME), ae->charname) == 0 )		{			/*			 * CDKEY 手 平乓仿  手域谯仄凶[公及平乓仿弁正及			 * 失玉伊旦皮永弁卞愤坌及树  互丐月井譬屯化}			 * 绣箕仄凶日}MSG允月[			 */			int index_to_my_info = 					ADDRESSBOOK_getIndexInAddressbook( i , 														mycd, mycharaname);			int		fd;			if( index_to_my_info < 0 ){				/*				 * 锹澎互愤坌毛坫壅仄化仄引匀化月[				 * 域杀  谛卞]丢□伙互  凶午分仃骚襞允月[				 */				//snprintf( tmpmsg, sizeof( tmpmsg), 				//		  ADDRESSBOOK_RETURNED1,				//			ae->charname				//			);				//CHAR_talkToCli( CONNECT_getCharaindex(i), -1, 				//				tmpmsg , CHAR_COLORYELLOW );				snprintf( tmpmsg, sizeof( tmpmsg), 						  ADDRESSBOOK_RETURNED2,							CHAR_getChar( i, CHAR_NAME),							CHAR_getChar( i, CHAR_NAME));				/* 霜曰潜卞手丢永本□斥 */				CHAR_talkToCli( cindex, -1, 								tmpmsg , CHAR_COLORYELLOW );				return FALSE;			}						fd = getfdFromCharaIndex( i);			if( fd != -1 ) {				lssproto_MSG_send( fd , index_to_my_info , textbuffer , color );				/* 夫弘午曰 */				printl( LOG_TALK, "CD=%s\tNM=%s\tT=%s" , mycd, mycharaname, textbuffer );						}			snprintf( tmpmsg , sizeof( tmpmsg),ADDRESSBOOK_SENT,					  ae->charname  );			CHAR_talkToCli(cindex,-1, tmpmsg , color );            // WON ADD 修正snprintf会导致当机的bug			{					char tmp[1000];					sprintf( tmp , "ADDRESSBOOK_sendMessage:"						 "Send MSG to: %s %s\n",						 ae->cdkey , ae->charname );				//	print( tmp );			}			CHAR_setInt( cindex, CHAR_SENDMAILCOUNT, 						CHAR_getInt( cindex, CHAR_SENDMAILCOUNT)+1);			return TRUE;		}	}	/* 苇勾井日卅井匀凶凛反]失市它件玄扔□田□卞霜月 */	saacproto_Message_send( acfd, mycd, mycharaname, 							ae->cdkey, ae->charname, textbuffer, color);	CHAR_setInt( cindex, CHAR_SENDMAILCOUNT, 				CHAR_getInt( cindex, CHAR_SENDMAILCOUNT)+1);	snprintf( tmpmsg , sizeof( tmpmsg),ADDRESSBOOK_SENT,ae->charname  );	CHAR_talkToCli( cindex,-1, tmpmsg , CHAR_COLORWHITE );	return FALSE;}/*------------------------------------------------------------ * 失玉伊旦皮永弁及丢永本□斥毛霜耨允月 * saac 井日msg 毛熬仃午匀化弁仿奶失件玄卞禾旦玄允月[ * * 忒曰袄 ------------------------------------------------------------*/BOOL ADDRESSBOOK_sendMessage_FromOther( char *fromcdkey, char *fromcharaname, 										char *tocdkey, char *tocharaname,										char* text , int color ){#define		ADDRESSBOOK_SYSTEM			"system"	int i ;	char tmpmsg[256];	int     playernum = CHAR_getPlayerMaxNum();		/* 扔□田□  毛腹绸允月 */	for( i = 0 ; i < playernum ; i ++){		if( CHAR_CHECKINDEX( i) &&			strcmp( CHAR_getChar( i, CHAR_CDKEY), tocdkey) == 0 &&			strcmp( CHAR_getChar( i, CHAR_NAME), tocharaname) == 0)		{			int		index_to_my_info;			/*			 * CDKEY 手 平乓仿  手域谯仄凶[公及平乓仿弁正及			 * 失玉伊旦皮永弁卞愤坌及树  互丐月井譬屯化}			 * 绣箕仄凶日}MSG允月[			 */			 			/* 扑旦  丞丢永本□斥互窖匀化五凶 */			if( strcmp( fromcdkey, ADDRESSBOOK_SYSTEM) == 0 &&				strcmp( fromcharaname, ADDRESSBOOK_SYSTEM ) == 0 ) 			{				/* 扑旦  丞丢永本□斥毛龚仁 */				CHAR_talkToCli( i, -1, text , color );				break;			}						index_to_my_info = 					ADDRESSBOOK_getIndexInAddressbook( i , 														fromcdkey, fromcharaname);			if( index_to_my_info < 0 ){				/*				 * 锹澎互愤坌毛坫壅仄化仄引匀化月[				 */				snprintf( tmpmsg, sizeof( tmpmsg), ADDRESSBOOK_RETURNED2,							tocharaname, tocharaname);				/* 霜曰潜卞手丢永本□斥 */				saacproto_Message_send( acfd, ADDRESSBOOK_SYSTEM , ADDRESSBOOK_SYSTEM, 										fromcdkey, fromcharaname, tmpmsg, CHAR_COLORYELLOW);			}			else {				int fd = getfdFromCharaIndex( i);				if( fd != -1 ) {					lssproto_MSG_send( fd , index_to_my_info , text , color );					/* 夫弘午曰 */					printl( LOG_TALK, "CD=%s\tNM=%s\tT=%s" , fromcdkey,															fromcharaname, text );				}			}			break;		}	}	if( i == playernum ) return FALSE;	return TRUE;}int ADDRESSBOOK_getIndexInAddressbook(int cindex , char *cdkey,											 char *charname){	int i ;	if( !CHAR_CHECKINDEX( cindex ) ) return -1;	for( i = 0 ; i < ADDRESSBOOK_MAX ; i++){		ADDRESSBOOK_entry *ae = CHAR_getAddressbookEntry( cindex , i );		if( ae && ae->use && strcmp( ae->cdkey, cdkey )==0 &&			strcmp( ae->charname , charname ) == 0 ){			return i;		}	}	return -1;}BOOL ADDRESSBOOK_deleteEntry( int meindex ,int index ){	ADDRESSBOOK_entry ent;	BOOL ret;	if( !CHAR_CHECKINDEX( meindex ) ) return FALSE;	memset( &ent ,0, sizeof( ADDRESSBOOK_entry ));	ret = CHAR_setAddressbookEntry( meindex , index , &ent );	if( ret == TRUE ){		ADDRESSBOOK_sendAddressbookTable( meindex );		return TRUE;	}	return FALSE;}BOOL ADDRESSBOOK_addEntry( int meindex ){	int objbuf[20];	int found_count;	int front_x , front_y;	int i;	int	cnt = 0;	int	fd;    char *mycd , *tocd;	BOOL found = FALSE;	if( !CHAR_CHECKINDEX( meindex ) )return FALSE;		fd = getfdFromCharaIndex( meindex);	if( fd == -1 ) return FALSE;	if( ADDRESSBOOK_findBlankEntry( meindex ) < 0) {		CHAR_talkToCli( meindex , -1,ADDRESSBOOK_MYTABLEFULL,CHAR_COLORWHITE );		return FALSE;	}	for( i = 0; i < CONNECT_WINDOWBUFSIZE; i ++ ) {        CONNECT_setTradecardcharaindex( fd,i,-1);    }	CHAR_getCoordinationDir( CHAR_getInt( meindex, CHAR_DIR ) ,							 CHAR_getInt( meindex , CHAR_X ),							 CHAR_getInt( meindex , CHAR_Y ) ,							 1 , &front_x , &front_y );	found_count = CHAR_getSameCoordinateObjects( objbuf,											arraysizeof( objbuf),											CHAR_getInt(meindex,CHAR_FLOOR),											front_x,front_y );	if( found_count == 0 ){		CHAR_talkToCli( meindex, -1, ADDRESSBOOK_CANTADD, CHAR_COLORWHITE);		return FALSE;	}	for( i = 0 ; i < found_count; i++ ){		int objindex = objbuf[i];		int	index = OBJECT_getIndex( objindex);		if( OBJECT_getType(objindex) != OBJTYPE_CHARA ) {			continue;		}		if( CHAR_getInt( index,CHAR_WHICHTYPE ) != CHAR_TYPEPLAYER ){			continue;		}		if( index == meindex ) {			continue;		}		found = TRUE;  		if( CHAR_getWorkInt( index, CHAR_WORKBATTLEMODE) != BATTLE_CHARMODE_NONE) {  			continue;  		}  		if(!CHAR_getFlg( index, CHAR_ISTRADECARD)) {  			continue;  		}		if( ADDRESSBOOK_findBlankEntry( index ) < 0 ) {			continue;		}        tocd = CHAR_getChar( index, CHAR_CDKEY);        mycd = CHAR_getChar( meindex, CHAR_CDKEY);		if( ADDRESSBOOK_getIndexInAddressbook( meindex, tocd,									CHAR_getChar( index, CHAR_NAME)) >= 0 &&			ADDRESSBOOK_getIndexInAddressbook( index, mycd,										CHAR_getChar(meindex, CHAR_NAME) )  >= 0  )	{			continue;		}        CONNECT_setTradecardcharaindex( fd,cnt,index);		cnt ++;		if( cnt == CONNECT_WINDOWBUFSIZE ) break;	}	if( cnt == 0 ) {		if( found ) {			CHAR_talkToCli( meindex, -1, ADDRESSBOOK_CANTADD2, CHAR_COLORWHITE);		}else {			CHAR_talkToCli( meindex, -1, ADDRESSBOOK_CANTADD, CHAR_COLORWHITE);		}		return FALSE;	}	if( cnt == 1 ) {		ADDRESSBOOK_addAddressBook( meindex,                                    CONNECT_getTradecardcharaindex(fd,0) );		return TRUE;	}else if( cnt > 1 ) {		int		strlength;		char	msgbuf[1024];		char	escapebuf[2048];		strcpy( msgbuf, "1\n和谁交换名片呢?\n");		strlength = strlen( msgbuf);		for( i = 0;             CONNECT_getTradecardcharaindex(fd,i) != -1 			&& i< CONNECT_WINDOWBUFSIZE; i ++ ){			char	*a = CHAR_getChar( CONNECT_getTradecardcharaindex(fd,i),                                       CHAR_NAME);			char	buf[256];			snprintf( buf, sizeof( buf),"%s\n", a);			if( strlength + strlen( buf) > arraysizeof( msgbuf)){				print( "%s:%d视窗讯息buffer不足。\n",						__FILE__,__LINE__);				break;			}			strcpy( &msgbuf[strlength], buf);			strlength += strlen(buf);		}		lssproto_WN_send( fd, WINDOW_MESSAGETYPE_SELECT, 						WINDOW_BUTTONTYPE_CANCEL,						CHAR_WINDOWTYPE_SELECTTRADECARD,						-1,					makeEscapeString( msgbuf, escapebuf, sizeof(escapebuf)));		return TRUE;	}	return FALSE;}static int ADDRESSBOOK_findBlankEntry( int cindex ){	int i;		if( CHAR_CHECKINDEX( cindex ) == FALSE )return -1;		for( i=0 ; i<ADDRESSBOOK_MAX-1 ; i++){		ADDRESSBOOK_entry *ae;		ae = CHAR_getAddressbookEntry( cindex , i );		if( ae && ae->use == FALSE ) {			return i;		}	}	return -1;

⌨️ 快捷键说明

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