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

📄 item.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 5 页
字号:
		readindex++;	}	return TRUE;}void ITEM_getDefaultItemSetting(ITEM_Item* itm){	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		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;        }	}	if( maxid <=0 ) {		print( "最大ID错误\n");		fclose(f);		return FALSE;	}		if( fseek( f, 0, SEEK_SET ) == -1 ){		fprint( "搜索错误\n" );		fclose(f);		return FALSE;	}#ifdef _IMPOROVE_ITEMTABLE	ITEM_tblen = linenum+1;	print( "物品数 %d - 大小:%d\n", linenum, sizeof(ITEM_table));	if( ITEM_TransformList != NULL )		freeMemory( ITEM_TransformList);	defitemtbls = (maxid+1);	ITEM_TransformList = allocateMemory( sizeof(sITEM_transformList) * defitemtbls );	for( i = 0 ; i < (maxid+1); i ++ ) {		ITEM_TransformList[i].use = FALSE;	}#else	print( "物品最大ID %d", maxid);	ITEM_tblen = maxid + 1;#endif#ifdef _ITEMTBL_STAIC	for( i = 0 ; i < 28000 ; i ++ ) {		ITEM_tbl[i].use = FALSE;	}#else	if( ITEM_tbl != NULL )		freeMemory( ITEM_tbl);	ITEM_tbl = allocateMemory( sizeof(ITEM_table) * ITEM_tblen );	if( ITEM_tbl == NULL ){		fprint( "无法分配内存 %d\n" , sizeof(ITEM_table)*ITEM_tblen );		fclose( f );		return FALSE;	}	for( i = 0 ; i < ITEM_tblen ; i ++ ) {		ITEM_tbl[i].use = FALSE;	}#endif	linenum = 0;	while( fgets( line, sizeof( line ), f ) ){		linenum ++;		if( line[0] == '#' )continue;        /* comment */		if( line[0] == '\n' )continue;       /* none    */		chomp( line );		replaceString( line, '\t' , ' ' );{		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) {#ifdef _IMPOROVE_ITEMTABLE			int ListNum = itemid;			itemid = totalitemtbls;#endif			if( itemid >= ITEM_tblen ){				print( "ITEM_tbl full:%d err !!\n" , itemid );			}else if( ITEM_tbl[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[itemid].itm, &itm, sizeof(ITEM_Item));								ITEM_tbl[itemid].use = TRUE;				for( i=0 ; i< ITEM_DATAINTNUM ; i++ ){					ITEM_tbl[itemid].randomdata[i] = intdata[i];				}#ifdef _IMPOROVE_ITEMTABLE				if( ITEM_TransformList[ ListNum].use != 0 ){					ITEM_tbl[itemid].use = TRUE;					ITEM_TransformList[ ListNum].use = 0;				}else {					ITEM_TransformList[ ListNum].Si = totalitemtbls;					ITEM_TransformList[ ListNum].use = TRUE;				}				totalitemtbls++;#endif			}		}}	}	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:#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能		{				int i=0;			// 勇士职业技能二刀流			for( i=0; i<CHAR_SKILLMAXHAVE; i++ ){				char *skill_name;				// 技能ID				int skillid = CHAR_getCharSkill( charaindex, i);				int Pskillid = PROFESSION_SKILL_getskillArray( skillid);						if( Pskillid <= 0 ) continue;				// 技能名称				skill_name = PROFESSION_SKILL_getChar( Pskillid, PROFESSION_SKILL_FUNCNAME);				if( skill_name == NULL ) continue;					// 二刀流				if( (strcmp( skill_name , "PROFESSION_DUAL_WEAPON" )) == 0 ){					int get_item = BATTLE_GetWepon( charaindex );					if( get_item != ITEM_BOW ){						int right_hand = CHAR_getItemIndex( charaindex, CHAR_ARM );						int left_hand  = CHAR_getItemIndex( charaindex, CHAR_EQSHIELD );						if( right_hand < 0 )	return CHAR_ARM;						else{							if( left_hand < 0 )	return CHAR_EQSHIELD;							else				return CHAR_ARM;							}					}				} 			}		}#endif		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:#ifdef _ITEM_EQUITSPACE		if( CHAR_getItemIndex( charaindex, CHAR_EQSHIELD ) > 0 )	return -1;#endif		return CHAR_ARM;		break;#ifdef _ITEM_EQUITSPACE	case ITEM_WBELT:		return CHAR_EQBELT;		break;	case ITEM_WSHIELD:		if( BATTLE_GetWepon( charaindex ) != ITEM_BOW )			return CHAR_EQSHIELD;		break;	case ITEM_WSHOES:		return CHAR_EQSHOES;		break;#endif#ifdef _EQUIT_NEWGLOVE	case ITEM_WGLOVE:		return CHAR_EQGLOVE;		break;#endif	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;	char	INGNAME0[4];	char	INGNAME1[4];

⌨️ 快捷键说明

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