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

📄 title.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "version.h"#include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#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     20typedef 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 );	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( "寻找错误\n" );		fclose(f);		return FALSE;	}	TITLE_table = allocateMemory( sizeof(struct tagTITLE_Table)								   * TITLE_titlenum );	if( TITLE_table == NULL ){		fprint( "无法分配内存 %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("文件语法错误:%s 第%d行\n",filename,linenum);			continue;		}		TITLE_table[title_readlen].index = atoi(token);		/*  2勾户及玄□弁件毛苇月    */		ret = getStringFromIndexWithDelim( line,",",2,token,										   sizeof(token));		if( ret==FALSE ){			fprint("文件语法错误:%s 第%d行\n",filename,linenum);			continue;		}		if( strlen( token) > sizeof( TITLE_table[title_readlen].name)-1) {			fprint("警告! 头衔名称结束文件:%s 第%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( "有效头衔名称数是 %d...", TITLE_titlenum );#ifdef DEBUG	{		int i;		for( i=0; i <TITLE_titlenum ; i++ )			print( "头衔索引[%d] 名称[%s] \n",				   TITLE_table[i].index,				   TITLE_table[i].name);	}#endif	return TRUE;}/*------------------------------------------------------------ * 惫寞及疯赓渝祭毛允月[ * 娄醒 *  filename        char*       涩烂白央奶伙   * 忒曰袄 *  岳      TRUE(1) *  撩      FALSE(0) *------------------------------------------------------------*/BOOL TITLE_reinitTitleName( void){	freeMemory( TITLE_table);	return(TITLE_initTitleName( getTitleNamefile()));}/*------------------------------------------------------------ * 惫寞涩烂及赓渝祭毛允月[ * 娄醒 *  filename        char*       涩烂白央奶伙   * 忒曰袄 *  岳      TRUE(1) *  撩      FALSE(0) *------------------------------------------------------------*/static void TITLE_initTitleData( int array){	int j,k;	for( j = 0; j < arraysizeof( TITLE_ConfigTable[array].paramindex); j ++) {		for( k = 0; k < TITLE_PARAMSIZE; k++) {			TITLE_ConfigTable[array].param[j][k] = -1;		}		TITLE_ConfigTable[array].paramindex[j] = -1;		TITLE_ConfigTable[array].compareflg[j] = -1;	}	TITLE_ConfigTable[array].title = -1;	TITLE_ConfigTable[array].equipcheckflg = FALSE;	}/*------------------------------------------------------------ *   醒垫涩烂毛引午户化ㄠ垫卞仄化支月[  戈及手仇仇匹允月[ *------------------------------------------------------------*/static int TITLE_getConfigOneLine( FILE *fp, char *line, int linelen){	char    buf[1024];	int     startflg = FALSE;	int     linenum=0;	line[0] = '\0';		while( fgets( buf, sizeof( buf ), fp )){		linenum ++;		if( buf[0] == '#' )continue;        /* comment */		if( buf[0] == '\n' )continue;       /* none    */		/*  垫毛帮溥允月    */		/*  引内 tab 毛 " " 卞  五晶尹月    */		replaceString( buf, '\t' , ' ' );		/* 旦矢□旦绰轮 */		deleteCharFromString( buf, " ");		if( buf[0] == '{' ) {			if( startflg == TRUE ) {				print( "titleconfig:明明没有关闭「{」却出现了: %d \n",linenum);				/* } */				return -1;			}			startflg = TRUE;		}		else if( buf[0] == '}' ) {			if( startflg == FALSE) {				print( "titleconfig:明明没有关闭「{」却出现了: %d \n",linenum);				/* } */				return -1;			}			return 1;		}		else {			/* "{"匹湃卞铵引匀化中凶日 }*/			if( startflg == TRUE ) {				if( strlen( line) != 0 ) {					if( line[strlen(line) -1] != ',' ) {						strcatsafe( line, linelen, ",");					}				}				/* ㄠ垫卞引午户化中仁*/				chompex( buf );				strcatsafe( line,linelen,  buf);			}			/*   躲垫分互"{"匹反元引匀化卅中桦宁反公及引引ㄠ垫匹忒允 }*/			else {				chompex( buf );				strcatsafe( line,linelen,  buf);				return 1;			}		}	}	/* 仇仇卞仁月午蜕丹仪反EOF   驯五元扎卅中戊□玉分   */	return 0;}static int TITLE_getParamData( int readarray, int array,char *src){	int cnt;	int ret;	char    wk[64];			for( cnt = 1; ; cnt ++ ) {		ret = getStringFromIndexWithDelim( src,"|",cnt,wk, sizeof(wk));		if( ret ) {			TITLE_ConfigTable[readarray].param[array][cnt-1] = atoi(wk);		}		else {			break;		}	}	if( cnt == 1 )  {		return FALSE;	}	return TRUE;}/*------------------------------------------------------------ * 惫寞涩烂及赓渝祭毛允月[ * 娄醒 *  filename        char*       涩烂白央奶伙   * 忒曰袄 *  岳      TRUE(1) *  撩      FALSE(0) *------------------------------------------------------------*/BOOL TITLE_initTitleConfig( char* filename ){	FILE*   f;	char    line[1024];	int     linenum=0;	int     titlecfg_readlen=0;	f = fopen(filename,"r");	if( f == NULL ){		errorprint;		return FALSE;	}

⌨️ 快捷键说明

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