www.pudn.com > mycode-08[1].8.24.rar > title.c


#include "version.h" 
#include  
#include  
#include  
#include  
#ifdef _REDHAT_V9 
#include  
#endif 
 
#include "title.h" 
#include "char.h" 
#include "char_base.h" 
#include "item.h" 
#include "skill.h" 
#include "buf.h" 
#include "util.h" 
#include "configfile.h" 
 
 
/*====================惫寞  ====================*/ 
static int TITLE_IntCheck( int charaindex,int elem, int *data, int flg); 
static int TITLE_WorkIntCheck( int charaindex,int elem, int *data, int flg); 
static int TITLE_ItemCheck( int charaindex,int elem, int *data, int flg); 
static int TITLE_ItemEquipCheck( int charaindex,int elem, int *data, int flg); 
static int TITLE_SkillCheck( int charaindex,int elem, int *data, int flg); 
static int TITLE_SexCheck( int charaindex,int elem, int *data, int flg); 
 
typedef enum 
{ 
	TITLE_FUNCTYPENONE,     /*  楮醒戏岳仄卅中  */ 
	TITLE_FUNCTYPEUSERFUNC, /* definefunction 毛银匀化  蟆毛综月 
							 * 楮醒及娄醒反 
							 *  int     平乓仿奶件犯永弁旦 
							 *  buf       蟆尺及田永白央 
							 *  buflen  公及田永白央及赢今 
							 */ 
	TITLE_USEFUNCTYPENUM 
}TITLE_USEFUNCTYPE; 
 
typedef struct tagTITLE_Table 
{ 
	int                 index;      /* 蛙犯□正午询晶毛潸月凶户[ 
									 * 仇及  寞匹手匀化addtitle午井支月  
									 */ 
	char               name[32]; 
	TITLE_USEFUNCTYPE   functype; 
	void                (*definefunction)(int,char* buf,int buflen); 
}TITLE_Table; 
 
/* 银尹月由仿丢□正 
 * STR,TGH,MAXMP]ATK,DEF 
 * LEVEL,CLASS,SKILL,ITEM,FIREREG,ICEREG,THUNDERREG 
 * KANJILV,TALKCNT,WALKCNT,DEADCNT,LOGINCNT,BASEIMAGENUMBER 
 * GOLD 
*/ 
typedef struct tagTITLE_Compare { 
	char    compare[8];; 
} TITLE_COMPARE; 
 
TITLE_COMPARE TITLE_compare[] = { {"<="}, {">="},{"<>"}, {">"},{"<"},{"="}}; 
 
typedef struct tagTITLE_PARAM 
{ 
	int     element; 
	int     (*checkfunc)( int charaindex,int elem, int *data, int flg ); 
	char    *paramname; 
}TITLE_PARAM; 
 
TITLE_PARAM TITLE_param[] =  
{ 
	/**** 仇仇井日 ****/ 
	{ -1,                     TITLE_ItemCheck,     "ITEM"         }, 
	{ -1,                     TITLE_ItemEquipCheck,"EQUIPITEM"    }, 
	{ -1,                     NULL,                "EQUIPEVENT"   }, 
	/**** 仇仇引匹反  凳仄卅中匹仁分今中[ ****/ 
	{ -1,                     TITLE_SkillCheck,    "SKILL"        }, 
	{ CHAR_STR,               TITLE_IntCheck,      "STR"           }, 
	{ CHAR_TOUGH,             TITLE_IntCheck,      "TGH"           }, 
	{ CHAR_MAXMP,             TITLE_IntCheck,      "MAXMP"         }, 
	{ CHAR_WORKFIXSTR,        TITLE_WorkIntCheck,  "ATK"           }, 
	{ CHAR_WORKFIXTOUGH,      TITLE_WorkIntCheck,  "DEF"           }, 
	{ CHAR_LV,                TITLE_IntCheck,      "LEVEL"         }, 
	{ CHAR_TALKCOUNT,         TITLE_IntCheck,      "TALKCNT"       }, 
	{ CHAR_WALKCOUNT,         TITLE_IntCheck,      "WALKCNT"       }, 
	{ CHAR_DEADCOUNT,         TITLE_IntCheck,      "DEADCNT"       }, 
	{ CHAR_LOGINCOUNT,        TITLE_IntCheck,      "LOGINCNT"      }, 
	{ CHAR_BASEBASEIMAGENUMBER,TITLE_IntCheck,      "BASEIMAGENUMBER" }, 
	{ CHAR_GOLD,              TITLE_IntCheck,      "GOLD"          }, 
	{ -1,                     TITLE_SexCheck,      "SEX"           }, 
}; 
 
#define     TITLE_PARAMSIZE     20 
typedef struct tagTITLE_configTable 
{ 
	int     paramindex[20];         /* TITLE_param尺及骄侬 */ 
	int     param[20][TITLE_PARAMSIZE];              /*   笠袄 */ 
	int     compareflg[20];         /* ><=羁升丹允月井 */ 
	int     title; 
	BOOL    equipcheckflg;          /*  
									 *  失奶  丞啖  奶矛件玄匹反仇及白仿弘及  匀化中月 
									 *  手及仄井腹绸仄卅中[ 
									 */ 
}TITLE_CONFIGTABLE; 
 
typedef struct tagTITLE_configbuf 
{ 
	int     title; 
	int     flg; 
}TITLE_CONFIGBUF; 
 
static TITLE_CONFIGTABLE    *TITLE_ConfigTable; 
static TITLE_Table          *TITLE_table; 
static TITLE_CONFIGBUF      *TITLE_configbuf; 
static int                  TITLE_titlenum; 
static int                  TITLE_titlecfgnum; 
 
/*------------------------------------------------------------ 
 * index  寞井日TITLE_table及骄侬毛  月 
 ------------------------------------------------------------*/ 
int TITLE_getTitleIndex( int index) 
{ 
	int i; 
	if( index < 0 ) return -1; 
	for( i = 0; i < TITLE_titlenum; i ++ ) { 
		if( TITLE_table[i].index == index ) { 
			return( i); 
		} 
	} 
	return -1; 
} 
 
/*  田永白央及扔奶术    */ 
#define TITLESTRINGBUFSIZ   256 
/*  弁仿奶失件玄卞苇六月旦平伙犯□正及  侬  及田永白央    */ 
static char    TITLE_statusStringBuffer[TITLESTRINGBUFSIZ]; 
/*------------------------------------------------------------ 
 * 弁仿奶失件玄卞苇六月惫寞及  侬  毛综月 
 * 娄醒 
 *  title       Title*      旦平伙 
 *  charaindex  int         仇及惫寞毛  匀化中月平乓仿及奶件犯永弁旦 
 * 忒曰袄 
 *  char* 
 ------------------------------------------------------------*/ 
char* TITLE_makeTitleStatusString( int charaindex,int havetitleindex ) 
{ 
	int     attach; 
	int     index; 
	/*  楮醒  尺及奶件犯永弁旦井日犯□正毛综岳允月  */ 
	index = CHAR_getCharHaveTitle( charaindex,havetitleindex ); 
#if 0 
	if( TITLE_CHECKTABLEINDEX( index ) == FALSE ){ 
		TITLE_statusStringBuffer[0] = '\0'; 
		return TITLE_statusStringBuffer; 
	} 
#endif 
	attach = TITLE_getTitleIndex( index); 
	if( attach == -1 ) { 
		TITLE_statusStringBuffer[0] = '\0'; 
		return TITLE_statusStringBuffer; 
	} 
	switch( TITLE_table[attach].functype ){ 
	case TITLE_FUNCTYPENONE: 
		snprintf( TITLE_statusStringBuffer, 
				  sizeof(TITLE_statusStringBuffer ),"%s" , 
				  TITLE_table[attach].name ); 
		break; 
	 
	case TITLE_FUNCTYPEUSERFUNC: 
	{ 
		char    string[256]={""}; 
		void    (*function)(int,char* buf,int buflen); 
		function = TITLE_table[attach].definefunction; 
		if( function ) 
			function( charaindex,string,sizeof(string) ); 
 
		strcpysafe( TITLE_statusStringBuffer, 
					sizeof(TITLE_statusStringBuffer ),string ); 
	} 
	break; 
	default: 
		TITLE_statusStringBuffer[0] = '\0'; 
		return TITLE_statusStringBuffer; 
		break; 
	} 
	return TITLE_statusStringBuffer; 
} 
 
/*------------------------------------------------------------ 
 * 卅中惫寞及  侬  犯□正毛忒允 
 * 娄醒 
 *  卅仄 
 * 忒曰袄 
 *  char* 
 ------------------------------------------------------------*/ 
char* TITLE_makeSkillFalseString( void ) 
{ 
	TITLE_statusStringBuffer[0]= '\0'; 
	return TITLE_statusStringBuffer; 
} 
 
 
/*------------------------------------------------------------ 
 * 隙烂今木凶  寞及惫寞毛馨笛允月[褐今卅匀化中凶日}馨笛仄卅中 
 * 娄醒 
 *  charaindex      int     平乓仿奶件犯永弁旦 
 *  titleindex      int     惫寞奶件犯永弁旦 
 * 忒曰袄 
 *  馨笛仄凶index        
 *  馨笛仄卅井匀凶      FALSE(0) 
 ------------------------------------------------------------*/ 
BOOL TITLE_addtitle( int charaindex, int titleindex ) 
{ 
	int i; 
	int firstfindempty=-1; 
 
	if( CHAR_CHECKINDEX(charaindex)  == FALSE )return FALSE; 
	/*if( TITLE_CHECKTABLEINDEX(titleindex) == FALSE )return FALSE;*/ 
	if( TITLE_getTitleIndex( titleindex) == -1 ) return FALSE; 
 
	for( i=0 ; i < CHAR_TITLEMAXHAVE ; i++ ){ 
		if( CHAR_getCharHaveTitle( charaindex,i ) == titleindex ) 
			/*  允匹卞  匀化中月井日窒手仄卅中  */ 
			return FALSE; 
		if( firstfindempty == -1 
			&& CHAR_getCharHaveTitle(charaindex,i) == -1 ){ 
			firstfindempty = i; 
		} 
	} 
	return CHAR_setCharHaveTitle( charaindex,firstfindempty,titleindex ); 
} 
 
 
/*------------------------------------------------------------ 
 * 隙烂今木凶  寞及惫寞互丐匀凶日绰轮允月[卅井匀凶日窒手仄卅中[ 
 *   醒蜊丐匀凶日蝈  壅允[ 
 * 娄醒 
 *  charaindex      int     平乓仿奶件犯永弁旦 
 *  titleindex      int     惫寞奶件犯永弁旦 
 * 忒曰袄 
 *  绰轮仄凶            TRUE(1) 
 *  绰轮仄卅井匀凶      FALSE(0) 
 ------------------------------------------------------------*/ 
BOOL TITLE_deltitle( int charaindex, int titleindex ) 
{ 
	int i; 
	BOOL    del=FALSE; 
	int     index; 
	if( CHAR_CHECKINDEX(charaindex)  == FALSE )return FALSE; 
	/*if( TITLE_CHECKTABLEINDEX(titleindex) == FALSE )return FALSE;*/ 
	index = TITLE_getTitleIndex( titleindex); 
	if(  index == -1 ) return FALSE; 
 
	for( i=0 ; i < CHAR_TITLEMAXHAVE ; i++ ) 
		if( CHAR_getCharHaveTitle( charaindex,i ) == titleindex ){ 
			/*  愤坌互银匀化中凶支勾卅日壬}公木手卅仄卞允月    */ 
			if( CHAR_getInt(charaindex, CHAR_INDEXOFEQTITLE) == i ){ 
				CHAR_setInt(charaindex, CHAR_INDEXOFEQTITLE, -1 ); 
			} 
			/*    匀化中月井日壅允  */ 
			CHAR_setCharHaveTitle( charaindex,i,-1); 
			 
			del = TRUE; 
		} 
 
	return del; 
} 
/*------------------------------------------------------------ 
 * 惫寞及赓渝祭毛允月[ 
 * 娄醒 
 *  filename        char*       涩烂白央奶伙   
 * 忒曰袄 
 *  岳      TRUE(1) 
 *  撩      FALSE(0) 
 *------------------------------------------------------------*/ 
BOOL TITLE_initTitleName( char* filename ) 
{ 
	FILE*   f; 
	char    line[256]; 
	int     linenum=0; 
	int     title_readlen=0; 
 
	f = fopen(filename,"r"); 
	if( f == NULL ){ 
		errorprint; 
		return FALSE; 
	} 
 
	TITLE_titlenum=0; 
 
	/*  引内  躲卅垫互窒垫丐月井升丹井譬屯月    */ 
	while( fgets( line, sizeof( line ), f ) ){ 
		linenum ++; 
		if( line[0] == '#' )continue;        /* comment */ 
		if( line[0] == '\n' )continue;       /* none    */ 
		chomp( line ); 
 
		TITLE_titlenum++; 
	} 
 
	if( fseek( f, 0, SEEK_SET ) == -1 ){ 
		fprint( "Seek Error\n" ); 
		fclose(f); 
		return FALSE; 
	} 
 
	TITLE_table = allocateMemory( sizeof(struct tagTITLE_Table) 
								   * TITLE_titlenum ); 
	if( TITLE_table == NULL ){ 
		fprint( "Can't allocate Memory %d\n" , 
				sizeof(TITLE_table)*TITLE_titlenum); 
		fclose( f ); 
		return FALSE; 
	} 
	/* 赓渝祭 */ 
{ 
	int     i; 
	for( i = 0; i < TITLE_titlenum; i ++ ) { 
		TITLE_table[i].index = -1; 
		TITLE_table[i].name[0] = '\0'; 
		TITLE_table[i].functype = TITLE_FUNCTYPENONE; 
		TITLE_table[i].definefunction = NULL; 
	} 
	 
} 
 
	/*  引凶  心  允    */ 
	linenum = 0; 
	while( fgets( line, sizeof( line ), f ) ){ 
		linenum ++; 
		if( line[0] == '#' )continue;        /* comment */ 
		if( line[0] == '\n' )continue;       /* none    */ 
		chomp( line ); 
 
		/*  垫毛帮溥允月    */ 
		/*  引内 tab 毛 " " 卞  五晶尹月    */ 
		replaceString( line, '\t' , ' ' ); 
		/* 燮  及旦矢□旦毛潸月[*/ 
{ 
		int     i; 
		char    buf[256]; 
		for( i = 0; i < strlen( line); i ++) { 
			if( line[i] != ' ' ) { 
				break; 
			} 
			strcpy( buf, &line[i]); 
		} 
		if( i != 0 ) { 
			strcpy( line, buf); 
		} 
} 
{ 
		char    token[256]; 
		int     ret; 
 
		/*  夫午勾户及玄□弁件毛苇月    */ 
		ret = getStringFromIndexWithDelim( line,",",1,token, 
										   sizeof(token)); 
		if( ret==FALSE ){ 
			fprint("Syntax Error file:%s line:%d\n",filename,linenum); 
			continue; 
		} 
		TITLE_table[title_readlen].index = atoi(token); 
 
		/*  2勾户及玄□弁件毛苇月    */ 
		ret = getStringFromIndexWithDelim( line,",",2,token, 
										   sizeof(token)); 
		if( ret==FALSE ){ 
			fprint("Syntax Error file:%s line:%d\n",filename,linenum); 
			continue; 
		} 
		if( strlen( token) > sizeof( TITLE_table[title_readlen].name)-1) { 
			fprint("Warning! TitleName Length Over file:%s line:%d\n", 
					filename, linenum); 
		} 
		strcpysafe( TITLE_table[title_readlen].name,  
					sizeof( TITLE_table[title_readlen].name), 
					token); 
 
		title_readlen ++; 
} 
	} 
	fclose(f); 
 
	TITLE_titlenum = title_readlen; 
 
	print( "Valid Title Num is %d...", TITLE_titlenum ); 
 
#ifdef DEBUG 
 
	{ 
		int i; 
		for( i=0; i ="); 
				if( comppos == -1 ) { 
					fprint("Syntax Error file:%s part:%d\n",filename,linenum); 
					TITLE_initTitleData( titlecfg_readlen); 
					errflg = TRUE; 
					break;; 
				} 
				/* 羁寞]尕羁寞互ㄡ勾动晓  月午五 */ 
				if( charInclude( &token[comppos+1], "<>=") != -1 ) { 
					/* 升氏卅  胜井毛  戈 */ 
					for( j = 0; j < 3;  j ++ ) { 
						if( memcmp( TITLE_compare[j].compare, &token[comppos], 2 ) == 0 ) { 
							break; 
						} 
					} 
					if( j == 3 ) { 
						fprint("Syntax Error file:%s part:%d\n",filename,linenum); 
						TITLE_initTitleData( titlecfg_readlen); 
						errflg = TRUE; 
						break; 
					} 
					else { 
						ret = TITLE_getParamData( titlecfg_readlen,i-1,&token[comppos+2]); 
						if( !ret ) { 
							fprint("Syntax Error file:%s part:%d\n",filename,linenum); 
							TITLE_initTitleData( titlecfg_readlen); 
							errflg = TRUE; 
							break; 
						} 
 
						/*TITLE_ConfigTable[titlecfg_readlen].param[i-1]  
								= atoi( &token[comppos+2]);*/ 
						TITLE_ConfigTable[titlecfg_readlen].compareflg[i-1] = j; 
					} 
				} 
				else { 
					ret = TITLE_getParamData( titlecfg_readlen,i-1,&token[comppos+1]); 
					if( !ret ) { 
						fprint("Syntax Error file:%s part:%d\n",filename,linenum); 
						TITLE_initTitleData( titlecfg_readlen); 
						errflg = TRUE; 
						break; 
					} 
					/*TITLE_ConfigTable[titlecfg_readlen].param[i-1]  
							= atoi( &token[comppos+1]);*/ 
					/* 升氏卅  胜井毛  戈 */ 
					for( j = 3; j < 6;  j ++ ) { 
						if( memcmp( TITLE_compare[j].compare, &token[comppos], 1 ) == 0 ) { 
							TITLE_ConfigTable[titlecfg_readlen].compareflg[i-1] = j; 
							break; 
						} 
					} 
				} 
			} 
		} 
		/* 惫寞  隙烂互  井匀凶 or 卅氏井仄日及巨仿□*/ 
		if( errflg || TITLE_ConfigTable[titlecfg_readlen].title == -1 ) { 
			fprint("No Title Error file:%s part:%d\n",filename,linenum); 
			TITLE_initTitleData( titlecfg_readlen); 
		} 
		else { 
			titlecfg_readlen ++; 
		} 
} 
	} 
	fclose(f); 
 
	TITLE_titlecfgnum = titlecfg_readlen; 
 
	print( "Valid Title Num is %d...", TITLE_titlecfgnum ); 
 
#if 0 
 
	{ 
		int i, j; 
		for( i=0; i < TITLE_titlecfgnum ; i++ ) { 
			print( "Titlearray[%d]\n", i); 
			for( j = 0;  
				j < arraysizeof( TITLE_ConfigTable[i].param) &&  
				TITLE_ConfigTable[i].param[j] != -1 ;  
				j ++ )  
			{ 
			   print( "name[%s] data[%d] flg[%s] ", 
					   TITLE_param[TITLE_ConfigTable[i].paramindex[j]].paramname, 
					   TITLE_ConfigTable[i].param[j], 
					   TITLE_compare[TITLE_ConfigTable[i].compareflg[j]].compare 
				   ); 
				if( j %2 ==0 ) print( "\n"); 
			} 
			print( "\nTitleindex [%d] ",TITLE_ConfigTable[i].title); 
			print( "equipcheckflg [%d]\n",TITLE_ConfigTable[i].equipcheckflg); 
		} 
	} 
#endif 
	return TRUE; 
} 
/*------------------------------------------------------------ 
 * 惫寞涩烂卞宁丹井譬屯化惫寞毛芨尹月[ 
 * 娄醒 
 *  charaindex        int   平乓仿奶件犯永弁旦 
 *  mode              BOOL  TRUE:item=及手及及心譬屯月 FALSE:蝈   
 * 忒曰袄 
 *  TRUE: 惫寞卞  祭  曰[ 
 *  FALSE:窒手  井匀凶[ 
 *------------------------------------------------------------*/ 
static BOOL TITLE_TitleCheck_Main( int charaindex, BOOL mode, int *addcnt, int *delcnt) 
{ 
	int     i, j,k, ret; 
	 
	/* 赓渝祭 */ 
{ 
	int     i; 
	for( i = 0; i < TITLE_titlecfgnum && TITLE_configbuf[i].title != -1; i ++ ) { 
		TITLE_configbuf[i].title = -1; 
		TITLE_configbuf[i].flg = 0; 
	} 
} 
	*addcnt = 0; 
	*delcnt = 0; 
	 
	for( i = 0; i < TITLE_titlecfgnum; i ++ ) { 
		int rc = TRUE; 
		int title = TITLE_ConfigTable[i].title; 
		if( mode == TRUE ) { 
			if( TITLE_ConfigTable[i].equipcheckflg != TRUE ) { 
				continue; 
			} 
		} 
		for( j = 0;  
			j < arraysizeof( TITLE_ConfigTable[i].param) &&  
			TITLE_ConfigTable[i].param[j][0] != -1 ;  
			j ++ )  
		{ 
			int index = TITLE_ConfigTable[i].paramindex[j]; 
			if( TITLE_param[index].checkfunc != NULL ) { 
				rc = TITLE_param[index].checkfunc(  
						charaindex, 
						TITLE_param[index].element,  
						TITLE_ConfigTable[i].param[j], 
						TITLE_ConfigTable[i].compareflg[j] 
						); 
				if( rc != TRUE ) break; 
			} 
		} 
		/*   醒椭瘀卞  元惫寞互喃曰癫化日木化中月凛及啃卞] 
		 * 域绎田永白央卞霪户化公及瑛绊井日add,deltile允月 
		 */ 
		for( k = 0; k < TITLE_titlecfgnum; k ++ ) { 
			if( TITLE_configbuf[k].title == title ) {  
				if( rc ) { 
					TITLE_configbuf[k].flg = 1; 
				} 
				break; 
			} 
			else if( TITLE_configbuf[k].title == -1 ) { 
				TITLE_configbuf[k].title = title; 
				TITLE_configbuf[k].flg = rc ? 1: -1; 
				break; 
			} 
		} 
	} 
	ret = FALSE; 
	for( i = 0; i < TITLE_titlecfgnum && TITLE_configbuf[i].title != -1; i ++ ) { 
		if( TITLE_configbuf[i].flg == -1 ) { 
			*delcnt += TITLE_deltitle( charaindex, TITLE_configbuf[i].title); 
		} 
		else { 
			*addcnt += TITLE_addtitle( charaindex, TITLE_configbuf[i].title) ? 1:0; 
		} 
	} 
	if( *delcnt > 0 || *addcnt > 0) { 
		ret = TRUE; 
	} 
	return ret; 
	 
} 
/*------------------------------------------------------------ 
 * 惫寞涩烂卞宁丹井譬屯化惫寞毛芨尹月[ 
 * 娄醒 
 *  charaindex        int   平乓仿奶件犯永弁旦 
 *  mode              BOOL  TRUE:item=及手及及心譬屯月 FALSE:蝈   
 * 忒曰袄 
 *  TRUE: 惫寞卞  祭  曰[ 
 *  FALSE:窒手  井匀凶[ 
 *------------------------------------------------------------*/ 
BOOL TITLE_TitleCheck( int charaindex, BOOL mode) 
{ 
#define     TITLE_MSGUNIT1      "TSU" 
#define     TITLE_MSGUNIT2      "KO" 
	int     addcnt,delcnt; 
	BOOL    rc; 
	char    msgbuf[64]; 
	rc = TITLE_TitleCheck_Main( charaindex, mode, &addcnt,&delcnt); 
	if( rc ) { 
		if( delcnt > 0 ) { 
			snprintf( msgbuf, sizeof( msgbuf),  
						"失去%d%s 称号!", delcnt, 
						delcnt < 10 ?  TITLE_MSGUNIT1:TITLE_MSGUNIT2); 
			CHAR_talkToCli( charaindex, -1, msgbuf,  CHAR_COLORYELLOW); 
		} 
		if( addcnt > 0 ) { 
			snprintf( msgbuf, sizeof( msgbuf),  
						"获得%d%s 称号!", addcnt, 
						addcnt < 10 ?  TITLE_MSGUNIT1:TITLE_MSGUNIT2); 
			CHAR_talkToCli( charaindex, -1, msgbuf,  CHAR_COLORYELLOW); 
		} 
	} 
	return rc; 
} 
/*------------------------------------------------------------ 
 * 惫寞涩烂卞宁丹井譬屯化惫寞毛芨尹月[ 
 * 娄醒 
 *  charaindex        int   平乓仿奶件犯永弁旦 
 *  mode              BOOL  TRUE:item=及手及及心譬屯月 FALSE:蝈   
 * 忒曰袄 
 *  TRUE: 惫寞卞  祭  曰[ 
 *  FALSE:窒手  井匀凶[ 
 *------------------------------------------------------------*/ 
BOOL TITLE_TitleCheck_Nomsg( int charaindex, BOOL mode, int *addcnt, int *delcnt) 
{ 
	return( TITLE_TitleCheck_Main( charaindex, mode, addcnt,delcnt)); 
} 
 
 
static int TITLE_IntCheck( int charaindex, int elem, int *data, int flg) 
{ 
	int     rc = FALSE; 
	int     i; 
	for( i = 0; i < TITLE_PARAMSIZE && *(data+i) != -1; i ++ ) { 
		switch( flg) { 
		  case 0:       /* "<=" */ 
			if( CHAR_getInt( charaindex, elem) <= *(data+i) ) rc = TRUE; 
			break; 
		  case 1:       /* ">=" */ 
			if( CHAR_getInt( charaindex, elem) >= *(data+i) ) rc = TRUE; 
			break; 
		  case 2:       /* "<>" */ 
			if( CHAR_getInt( charaindex, elem) != *(data+i) ) rc = TRUE; 
			break; 
		  case 3:       /* ">" */ 
			if( CHAR_getInt( charaindex, elem) > *(data+i) ) rc = TRUE; 
			break; 
		  case 4:       /* "<"  */ 
			if( CHAR_getInt( charaindex, elem) < *(data+i) ) rc = TRUE; 
			break; 
		  case 5:       /* "=" */ 
			if( CHAR_getInt( charaindex, elem) == *(data+i) ) rc = TRUE; 
			break; 
		  default: 
		  rc= FALSE; 
		  break; 
		} 
		if( rc) break; 
	} 
	return rc; 
} 
static int TITLE_WorkIntCheck( int charaindex,int elem, int *data, int flg) 
{ 
	int     rc = FALSE; 
	int i; 
	for( i = 0; i < TITLE_PARAMSIZE && *(data+i) != -1; i ++ ) { 
		switch( flg) { 
		  case 0:       /* "<=" */ 
			if( CHAR_getWorkInt( charaindex, elem) <= *(data+i) ) rc = TRUE; 
			break; 
		  case 1:       /* ">=" */ 
			if( CHAR_getWorkInt( charaindex, elem) >= *(data+i) ) rc = TRUE; 
			break; 
		  case 2:       /* "<>" */ 
			if( CHAR_getWorkInt( charaindex, elem) != *(data+i) ) rc = TRUE; 
			break; 
		  case 3:       /* ">" */ 
			if( CHAR_getWorkInt( charaindex, elem) > *(data +i)) rc = TRUE; 
			break; 
		  case 4:       /* "<"  */ 
			if( CHAR_getWorkInt( charaindex, elem) < *(data+i) ) rc = TRUE; 
			break; 
		  case 5:       /* "=" */ 
			if( CHAR_getWorkInt( charaindex, elem) == *(data+i) ) rc = TRUE; 
			break; 
		  default: 
		  rc= FALSE; 
		  break; 
		} 
		if( rc ) break; 
	} 
	return rc; 
} 
/* -------------------------------------- 
 * 隙烂今木凶data午  匀化中月失奶  丞毛  胜允月[ 
 * -------------------------------------*/ 
static int TITLE_ItemCheckMain( int charaindex, int itemhaveindex, int *data, int flg) 
{ 
	int i,j; 
	int rc = FALSE; 
	 
	if( flg == 2 ) rc = TRUE; 
 
	for( j = 0; j < TITLE_PARAMSIZE && *(data+j) != -1; j ++ ) { 
		for( i =0; i < itemhaveindex; i ++ ) { 
			int     itemindex = CHAR_getItemIndex(charaindex,i); 
			if( ITEM_CHECKINDEX(itemindex) ) { 
				switch( flg) { 
				  case 0:       /* "<=" */ 
					if( ITEM_getInt( itemindex, ITEM_ID) <= *(data+j) ) rc = TRUE; 
					break; 
				  case 1:       /* ">=" */ 
					if( ITEM_getInt( itemindex, ITEM_ID) >= *(data+j) ) rc = TRUE; 
					break; 
				  case 3:       /* ">" */ 
					if( ITEM_getInt( itemindex, ITEM_ID) > *(data +j)) rc = TRUE; 
					break; 
				  case 4:       /* "<"  */ 
					if( ITEM_getInt( itemindex, ITEM_ID) < *(data +j)) rc = TRUE; 
					break; 
				  case 5:       /* "=" */ 
					if( ITEM_getInt( itemindex, ITEM_ID) == *(data +j)) rc = TRUE; 
					break; 
				  /* 仇木分仃    健中[ 
				   * 失奶  丞蝈  毛苇化公木毛  匀化中卅井匀凶日蕞午允月[ 
				   * 仇仇匹反  匀化中月仪毛絮午仄化民尼永弁 
				   */ 
				  case 2:       /* "<>" */ 
					if( ITEM_getInt( itemindex, ITEM_ID) == *(data +j)) rc = FALSE; 
					break; 
				  default: 
				  rc= FALSE; 
				  break; 
				} 
				if( rc && flg != 2) break; 
			} 
		} 
		if( rc) break; 
	} 
	return rc; 
} 
 
 
static int TITLE_ItemCheck( int charaindex,int elem, int *data, int flg) 
{ 
	return( TITLE_ItemCheckMain( charaindex, CHAR_MAXITEMHAVE,data,flg)); 
} 
 
static int TITLE_ItemEquipCheck( int charaindex,int elem, int *data, int flg) 
{ 
	return( TITLE_ItemCheckMain( charaindex, CHAR_EQUIPPLACENUM,data,flg)); 
} 
 
static int TITLE_SkillCheck( int charaindex,int elem, int *data, int flg) 
{ 
	int i; 
	int rc = FALSE; 
	CHAR_HaveSkill* hskill; 
 
	for( i = 0 ; i < CHAR_SKILLMAXHAVE ; i ++ ){ 
		hskill = CHAR_getCharHaveSkill( charaindex, i ); 
		if( hskill != NULL && hskill->use == TRUE ) { 
 
			if( *(data + 1) != -2 ) { 
				if( SKILL_getInt( &hskill->skill, SKILL_IDENTITY) == *data) { 
					rc = TRUE; 
					break; 
				} 
			} 
 
			else { 
				if( SKILL_getInt( &hskill->skill, SKILL_IDENTITY) == *data) { 
					rc = FALSE; 
					break; 
				} 
				else { 
					rc = TRUE; 
				} 
			} 
		} 
	} 
	if( rc ) { 
 
		if( *(data+1) != -1 && *(data+1) != -2) { 
			rc = FALSE; 
			switch( flg) { 
			  case 0:       /* "<=" */ 
				if( SKILL_getInt( &hskill->skill, SKILL_LEVEL) <= *(data+1) ) rc = TRUE; 
				break; 
			  case 1:       /* ">=" */ 
				if( SKILL_getInt( &hskill->skill, SKILL_LEVEL) >= *(data+1) ) rc = TRUE; 
				break; 
			  case 2:       /* "<>" */ 
				if( SKILL_getInt( &hskill->skill, SKILL_LEVEL) != *(data+1) ) rc = TRUE; 
				break; 
			  case 3:       /* ">" */ 
				if( SKILL_getInt( &hskill->skill, SKILL_LEVEL) > *(data +1)) rc = TRUE; 
				break; 
			  case 4:       /* "<"  */ 
				if( SKILL_getInt( &hskill->skill, SKILL_LEVEL) < *(data+1) ) rc = TRUE; 
				break; 
			  case 5:       /* "=" */ 
				if( SKILL_getInt( &hskill->skill, SKILL_LEVEL) == *(data+1) ) rc = TRUE; 
				break; 
			  default: 
			  rc= FALSE; 
			  break; 
			} 
		} 
	} 
	return rc; 
} 
/* -------------------------------------- 
 * 裆平乓仿井辉平乓仿井民尼永弁允月[ 
 * -------------------------------------*/ 
static int TITLE_SexCheck( int charaindex,int elem, int *data, int flg) 
{ 
	int     i,j; 
	struct { 
		int sex[25]; 
	}s_sex[] = 
	{ { { 30008,30009,30010,30011,30012,30013,30014,30015, 
		30020,30021,30022,30023,30024,30025,30026,30027, 
		30028,30029,30030,30031,30032,30033,30034,30035,-1} 
	  }, 
	  { {30000,30001,30002,30003,30004,30005,30006,30007, 
		30016,30017,30018,30019,30036,30037,30038,30039, 
		-1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,  -1} 
	  } 
	}; 
	for( i = 0; i < 2; i ++ ) { 
		for( j = 0; s_sex[i].sex[j] != -1 ; j ++ ) { 
			if( CHAR_getInt( charaindex, CHAR_BASEBASEIMAGENUMBER )  
				== s_sex[i].sex[j] )  
			{ 
				if( i == *data ) return TRUE; 
				else            return FALSE; 
			} 
		} 
	} 
	return FALSE; 
}