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

📄 item.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 4 页
字号:
{	int     i;	memset( itm, 0 , sizeof( ITEM_Item ));#ifdef _SIMPLIFY_ITEMSTRING	for(i = 0; i < arraysizeof( ITEM_setintdata) ; i ++ ){		itm->data[ITEM_setintdata[i].table] = ITEM_setintdata[i].defaults;	}	for(i = 0; i < arraysizeof( ITEM_setchardata) ; i ++ ){		strcpysafe( itm->string[ITEM_setchardata[i].table].string,				   sizeof( itm->string[ITEM_setchardata[i].table].string),				   ITEM_setchardata[i].defaults);	}#else	for(i=0;i<ITEM_DATAINTNUM;i++)		itm->data[i] = ITEM_setintdata[i].defaults;	for(i=0;i<ITEM_DATACHARNUM;i++)		strcpysafe(itm->string[i].string,				   sizeof(itm->string[i].string),				   ITEM_setchardata[i].defaults);#endif	strcpysafe( itm->string[ITEM_WATCHFUNC].string,		sizeof(itm->string[ITEM_WATCHFUNC].string), "ITEM_DeleteTimeWatched" );	for(i=0;i<ITEM_WORKDATAINTNUM;i++){		itm->workint[i] = -1;	}}#ifdef _SIMPLIFY_ITEMSTRINGvoid ITEM_getDefaultItemData( int itemID, ITEM_Item* itm){	int     i;//	memset( itm, 0 , sizeof( ITEM_Item ));	for(i=0;i<ITEM_DATAINTNUM;i++){		itm->data[i] = ITEMTBL_getInt( itemID, i);	}	for(i=0;i<ITEM_DATACHARNUM;i++){		strcpysafe( itm->string[i].string, sizeof( itm->string[i].string),				   ITEMTBL_getChar( itemID, i) );	}	for(i=0;i<ITEM_WORKDATAINTNUM;i++){		itm->workint[i] = -1;	}	strcpysafe( itm->string[ITEM_WATCHFUNC].string, sizeof( itm->string[ITEM_WATCHFUNC].string),				   "ITEM_DeleteTimeWatched" );}#endifstatic int ITEM_getRandomValue( char*  string,int* randomwidth, int num ){	int   minvalue;	int   maxvalue;	char	token[64];	int		ret;#if 1	*randomwidth = 0;	ret = getStringFromIndexWithDelim( string,",",num -1,token, sizeof( token));	if( ret == FALSE ) {		return 0;	}	minvalue = atoi( token);	ret = getStringFromIndexWithDelim( string,",",num ,token, sizeof( token));	if( ret == FALSE ) {		return minvalue;	}	maxvalue = atoi( token);	*randomwidth = ABS( maxvalue - minvalue);	return min( minvalue, maxvalue);#else	minvalue = atoi( string );	startmax = index( string,',' );	if( startmax != NULL ){		maxvalue = atoi(startmax+1);		*randomwidth = ABS(maxvalue - minvalue);		return min(minvalue,maxvalue);	}	*randomwidth = 0;	return minvalue;#endif}static int ITEM_isstring1or0( char*  string,int* randomwidth, int num ){	char	token[64];	int		ret;	ret = getStringFromIndexWithDelim( string,",",num -1,token, sizeof( token));	if( ret == FALSE ) {		return FALSE;	}	return isstring1or0( token);}static char* ITEM_checkString( char* string ){#define ITEM_STRINGLEN 64	if( strlen(string) >= ITEM_STRINGLEN )		print( "Over %d:[%s]\n",ITEM_STRINGLEN ,string );	return string;#undef ITEM_STRINGLEN}BOOL ITEM_readItemConfFile( char* filename ){	FILE*   f;	char    line[512];	char	token[64];	int     linenum=0;	int     itemnum=0;	int		i;	int		maxid=0, itemid;	int		ret;	int     intdata[ITEM_DATAINTNUM];	f = fopen(filename,"r");	if( f == NULL ){		print( "不能打开文件\n");		return FALSE;	}#ifdef _ITEMSET2_ITEM#define ITEM_ID_TOKEN_INDEX 17#else#ifdef _ITEM_MAXUSERNUM#define ITEM_ID_TOKEN_INDEX 15#endif#endif	while( fgets( line, sizeof( line ), f ) ){		linenum ++;		if( line[0] == '#' )continue;        /* comment */		if( line[0] == '\n' )continue;       /* none    */		chomp( line );		ret = getStringFromIndexWithDelim( line, ",", ITEM_ID_TOKEN_INDEX, token, sizeof(token));		if( ret == FALSE ){			fprint("文件秩序错误:%s 第:%d行\n",filename,linenum);			continue;		}		itemid = atoi( token);		if( itemid > maxid ){       maxid = itemid;    }    itemnum ++;	}	if( maxid <=0 ) {		print( "最大ID错误\n");		fclose(f);		return FALSE;	}		if( fseek( f, 0, SEEK_SET ) == -1 ){		fprint( "搜索错误\n" );		fclose(f);		return FALSE;	}	print( "物品最大ID %d...", maxid);	ITEM_tblen = itemnum + 1;	ITEM_idxlen = maxid + 1;	if( ITEM_tbl != NULL )		ITEM_endExistItemsArray( ITEM_tbl);	ITEM_tbl = allocateMemory( sizeof(ITEM_table) * ITEM_tblen );	if( ITEM_idx != NULL )		ITEM_endExistItemsArray( ITEM_idx);	ITEM_idx = allocateMemory( sizeof(ITEM_index) * ITEM_idxlen );	if( ITEM_tbl == NULL ){		fprint( "无法分配内存 %d\n" , sizeof(ITEM_table)*ITEM_tblen );		fclose( f );		return FALSE;	}	if( ITEM_idx == NULL ){		fprint( "无法分配内存 %d\n" , sizeof(ITEM_index)*ITEM_idxlen );		fclose( f );		return FALSE;	}	print("ITEM_tbl分配 %4.2f MB 空间...", sizeof(ITEM_table) * ITEM_tblen /1024.0/1024.0);	print("ITEM_idx分配 %4.2f MB 空间...", sizeof(ITEM_index) * ITEM_idxlen /1024.0/1024.0);		for( i = 0 ; i < ITEM_idxlen ; i ++ ) {		ITEM_idx[i].use = FALSE;	}	linenum = 0;	itemnum = 0;	while( fgets( line, sizeof( line ), f ) ){		linenum ++;		if( line[0] == '#' )continue;        /* comment */		if( line[0] == '\n' )continue;       /* none    */		chomp( line );		replaceString( line, '\t' , ' ' );		itemnum ++;{		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;		int		readpos = 1;		BOOL	dataerror = FALSE;		ITEM_Item	itm;		ITEM_getDefaultItemSetting(&itm);		for( i=0 ; i< ITEM_DATAINTNUM ; i++ ) {			intdata[i] = 0;		}		itemid = 0;		for( i = 0 ; i < arraysizeof( ITEM_itemconfentries) ; i ++ ){			ret = getStringFromIndexWithDelim( line,",",readpos,token, sizeof(token));			if( ret == FALSE ) {#ifdef _Item_ReLifeAct				{					char buf[256];					char buf1[256];					sscanf( line,"%s,%s", buf, buf1);					print("[ITEM data Error] tbl=%d:%s line:%d[%s]\n",						readpos, ITEM_itemconfentries[i].entryname, linenum, line);				}#else				fprint("Syntax Error tki:%d file:%s line:%d[%s]\n",                       i , filename,linenum,line);#endif				dataerror = TRUE;				break;			}			if( readpos == ITEM_ID_TOKEN_INDEX )				itemid = atoi( token);			readpos ++;			if( strlen( token ) != 0 ) {				switch(ITEM_itemconfentries[i].type){				  case ITEM_INTENTRY:					itm.data[ITEM_itemconfentries[i].index] = atoi( token );					break;				  case ITEM_CHARENTRY:					strcpysafe( itm.string[ITEM_itemconfentries[i].index].string,								sizeof(itm.string[ITEM_itemconfentries[i].index].string),								token);					break;				  case ITEM_INTFUNC:				  {					int (*intfunction)(char*,int*, int );					intfunction = ITEM_itemconfentries[i].func;					itm.data[ITEM_itemconfentries[i].index]								= intfunction(line,									  		&intdata[ITEM_itemconfentries[i].index],readpos);					if( intfunction == ITEM_getRandomValue) readpos ++;				  }					break;				  case ITEM_CHARFUNC:				  {					char* (*charfunction)(char* );					charfunction = ITEM_itemconfentries[i].func;					strcpysafe( itm.string[ITEM_itemconfentries[i].index].string,								sizeof(itm.string[ITEM_itemconfentries[i].index].string),								charfunction( token));					break;				  }				  default:					break;				}			}		}		if( !dataerror) {			if( itemid >= ITEM_idxlen ){				print( "ITEM_tbl full:%d err !!\n" , itemid );			}else if( ITEM_idx[itemid].use == TRUE ) {				fprint( "Duplicate Itemid %d.ignore\n" , itemid );			}else{				if( itm.string[ITEM_SECRETNAME].string[0] == '\0') {					fprint( "ERROR: ID %d item doesn't have secretname\n"							,itemid );					memcpy( &itm.string[ITEM_SECRETNAME].string,							&itm.string[ITEM_NAME].string,							sizeof(itm.string[ITEM_NAME].string));				}{				int	attacknum_min, attacknum_max;				attacknum_min = itm.data[ITEM_ATTACKNUM_MIN];				attacknum_max = itm.data[ITEM_ATTACKNUM_MAX];				if( attacknum_min == 0 ) attacknum_min = attacknum_max;				itm.data[ITEM_ATTACKNUM_MIN] = min( attacknum_min,													attacknum_max);				itm.data[ITEM_ATTACKNUM_MAX] = max( attacknum_min,													attacknum_max);}				memcpy( &ITEM_tbl[itemnum].itm, &itm, sizeof(ITEM_Item));								ITEM_idx[itemid].use = TRUE;				ITEM_idx[itemid].index = itemnum;				for( i=0 ; i< ITEM_DATAINTNUM ; i++ ){					ITEM_tbl[itemnum].randomdata[i] = intdata[i];				}			}		}}	}	fclose(f);	return TRUE;}CHAR_EquipPlace ITEM_getEquipPlace( int charaindex, int itmid ){	ITEM_CATEGORY   cat;	cat = ITEM_getInt( itmid , ITEM_TYPE );	switch( cat ){	case ITEM_FIST:	case ITEM_SPEAR:	case ITEM_AXE:	case ITEM_CLUB://	case ITEM_SHIELD:	case ITEM_BOOMERANG:	case ITEM_BREAKTHROW:	case ITEM_BOUNDTHROW:		return CHAR_ARM;		break;	case ITEM_HELM:		return CHAR_HEAD;		break;	case ITEM_ARMOUR:		return CHAR_BODY;		break;	case ITEM_BRACELET:	case ITEM_MUSIC:	case ITEM_NECKLACE:	case ITEM_RING:	case ITEM_BELT:	case ITEM_EARRING:	case ITEM_NOSERING:	case ITEM_AMULET:		return CHAR_DECORATION1;		break;	case ITEM_BOW:		return CHAR_ARM;		break;	default:		break;	}	return -1;}#define ITEMSTRINGBUFSIZ    512static char ITEM_itemStatusStringBuffer[ITEMSTRINGBUFSIZ];char*  ITEM_makeItemStatusString( int haveitemindex, int itemindex ){	char    escapename[256];	char    escapeeffectstring[256];	char    paramshow[256];	int     leaklevel;	int		itemcolor = 0;	int 	flg;	if( !ITEM_CHECKINDEX(itemindex) ) return "\0";	leaklevel = ITEM_getInt(itemindex,ITEM_LEAKLEVEL);	 	//if( leaklevel >= 1 ) 	// Nuke debug	{		makeEscapeString( ITEM_getChar(itemindex, ITEM_SECRETNAME),						  escapename, sizeof(escapename) );			paramshow[0] = '\0';	}	makeEscapeString( ITEM_getChar( itemindex, ITEM_EFFECTSTRING),						escapeeffectstring,						sizeof(escapeeffectstring));	itemcolor = CHAR_COLORWHITE;	if( strlen( ITEM_getChar( itemindex, ITEM_CDKEY)) != 0 ) {		itemcolor = CHAR_COLORGREEN;	}else {		if( ITEM_getInt( itemindex, ITEM_MERGEFLG) ) {			itemcolor = CHAR_COLORYELLOW;		}	}	flg = 0;	if( ITEM_getInt( itemindex, ITEM_CANPETMAIL)) {		flg |= 1 << 0;	}	if( ITEM_getInt( itemindex, ITEM_CANMERGEFROM)) {		flg |= 1 << 1;	}	if( ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_DISH ) {		flg |= 1 << 2;	}#ifdef _ITEM_INSLAY	if( ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_METAL ) {		flg |= 1 << 3;	}else if( ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_JEWEL ) {		flg |= 1 << 4;	}#endif#ifdef _PETSKILL_FIXITEM	if( ITEM_getInt( itemindex, ITEM_DAMAGECRUSHE) 		!= ITEM_getInt( itemindex, ITEM_MAXDAMAGECRUSHE) ){		flg |= 1 << 5;	}#endif	if( haveitemindex == -1 ) {		snprintf(ITEM_itemStatusStringBuffer,				 sizeof( ITEM_itemStatusStringBuffer),				 "%s|%s|%d|%s|%d|%d|%d|%d|%d",				 escapename, paramshow,				 itemcolor, escapeeffectstring ,				 ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER),				 ITEM_getInt( itemindex, ITEM_ABLEUSEFIELD),				 ITEM_getInt( itemindex, ITEM_TARGET),				 ITEM_getInt( itemindex, ITEM_LEVEL),				  flg				  );	}else {		snprintf(ITEM_itemStatusStringBuffer,				 sizeof( ITEM_itemStatusStringBuffer),				 "%d|%s|%s|%d|%s|%d|%d|%d|%d|%d",				 haveitemindex,				 escapename, paramshow,				 itemcolor, escapeeffectstring ,				 ITEM_getInt( itemindex, ITEM_BASEIMAGENUMBER),				 ITEM_getInt( itemindex, ITEM_ABLEUSEFIELD),				 ITEM_getInt( itemindex, ITEM_TARGET),				 ITEM_getInt( itemindex, ITEM_LEVEL),				 flg				  );	}

⌨️ 快捷键说明

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