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

📄 item_gen.c

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 C
📖 第 1 页 / 共 4 页
字号:
					sprintf( buf1, "合成料理等级:%d,增加绩分:%d,总共绩分:%d。",					cTableLevel, adScore, Myscore+adScore);					CHAR_setInt( charaindex, CHAR_ABULLSCORE, Myscore+adScore);					}else{					sprintf( buf1, "合成料理等级:%d,需等级6以上才加分。",					cTableLevel);					}					CHAR_talkToCli( charaindex, -1, buf1, CHAR_COLORYELLOW);					}					#endif				*/				return created;			}		}		return items[RAND( 0, (num-1))].data[ITEM_ID];	}	return -3;}int ITEM_canDigest( ITEM_Item *itm ){	/* 1蜊  及笺  及  蟆互涩烂今木化中凶日1}	   公丹匹卅中卅日0 */	if( itm->string[ITEM_INGNAME0].string[0] ) return 1; else return 0;}int ITEM_merge_test(void){	int iid,i,k;	ITEM_Item itm[1];	for( k = 0 ; k < 10 ; k ++ ){		iid = 1;		for( i = 0 ; i < 20 ; i ++ ){			ITEM_makeItem( &itm[0] , iid );            			print( "%d RETURN: %d\n", i,			           // shan 				   iid = ITEM_mergeItem( -1, itm, 1 , 0, -1,0,-1,0) );		}		print( "------\n" );	}	return 0;}int ITEM_mergeItem_merge( int charaindex, int petid, char *data, int petindex, int alchemist){	BOOL	result = FALSE;	int		i;	int		ret;	int		cnt = 0;	int		itemindexs[CHAR_MAXITEMHAVE - CHAR_STARTITEMARRAY];	int		haveitemindexs[CHAR_MAXITEMHAVE - CHAR_STARTITEMARRAY];	// Nuke +2 1026: Avoid merge cheat	int             itemflag[CHAR_MAXITEMHAVE - CHAR_STARTITEMARRAY];	int             j,collision=0;		char	buff[64];		ITEM_Item	items[CHAR_MAXITEMHAVE - CHAR_STARTITEMARRAY];	// Nuke +1 1026	memset(itemflag,0,sizeof(itemflag));		{		int emptyindex = CHAR_findEmptyItemBox( charaindex );		if( emptyindex == -1 ){			CHAR_talkToCli( charaindex, -1, "合成时,最少需空一格物品栏位!", CHAR_COLORYELLOW);			return -1;		}	}		for( i = CHAR_STARTITEMARRAY; i < CHAR_MAXITEMHAVE; i ++ ) {		int		haveitemindex;		ret = getStringFromIndexWithDelim( data , "|",			i - CHAR_STARTITEMARRAY+1,			buff,  sizeof( buff ) );		if( ret == FALSE ) break;		haveitemindex = atoi( buff);		if( CHAR_CHECKITEMINDEX( charaindex, haveitemindex) ) {			int itemindex = CHAR_getItemIndex( charaindex, haveitemindex);			if( ITEM_CHECKINDEX( itemindex)) {#ifdef _ITEM_INSLAY				char *code;				if( (code = ITEM_getChar( itemindex, ITEM_TYPECODE)) == NULL )	{					if( strcmp( code, "\0") )	{						char token[256];						snprintf( token, sizeof( token), "似乎对%s没有兴趣。",							ITEM_getChar( itemindex, ITEM_NAME));						CHAR_talkToCli( charaindex, -1, token, CHAR_COLORYELLOW);						return FALSE;					}				}#endif				if( ITEM_getmergeItemFromFromITEMtabl( ITEM_getInt( itemindex, ITEM_ID)) == TRUE ){ //检查是否可合成					ITEM_Item *itm;					itm = ITEM_getItemPointer(itemindex);					if( itm !=  NULL ) {						ITEM_makeItem( &items[cnt], ITEM_getInt( itemindex, ITEM_ID));						itemindexs[cnt] 	= itemindex;						haveitemindexs[cnt] = haveitemindex;						// Nuke start 1026						for (j=0;j<cnt;j++) if (itemflag[j] == itemindex) {							print("\nMerge Collision!!!");							collision=1;						}						itemflag[cnt] = itemindex;						// Nuke end						cnt++;					}				}else {					char msgbuf[128];					snprintf( msgbuf, sizeof( msgbuf), "似乎对%s没有兴趣。",						ITEM_getChar( itemindex, ITEM_NAME));					CHAR_talkToCli( charaindex, -1, msgbuf, CHAR_COLORWHITE);									}			}		}	}	// Nuke start 1026	if (collision) {		return FALSE;	}	// Nuke end	if( cnt > 1 ) {		int randtable = 0;		if( items[0].data[ITEM_TYPE] == ITEM_DISH ) {			randtable = 1;		}		ret = ITEM_mergeItem( charaindex, items, cnt, 0, petid, randtable, petindex, alchemist);		if( ret == -10)			CHAR_talkToCli( charaindex, -1, "非法的合成方法", CHAR_COLORWHITE);		CHAR_setInt( charaindex, CHAR_MERGEITEMCOUNT,			CHAR_getInt( charaindex, CHAR_MERGEITEMCOUNT)+1);				for( i = 0; i < cnt; i ++ ) {#ifdef _ITEM_PILENUMS			int pilenum=0;			int itemindex = CHAR_getItemIndex( charaindex, haveitemindexs[i]);			if( !ITEM_CHECKINDEX( itemindex) ) continue;			pilenum = ITEM_getInt( itemindex, ITEM_USEPILENUMS);			pilenum -= 1;			ITEM_setInt( itemindex, ITEM_USEPILENUMS, pilenum);			if( pilenum <= 0 ){#endif				CHAR_setItemIndex( charaindex, haveitemindexs[i], -1);				LogItem(					CHAR_getChar( charaindex, CHAR_NAME ), /* 平乓仿   */					CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称					itemindexs[i],#else					ITEM_getInt( itemindexs[i], ITEM_ID),  /* 失奶  丞  寞 */#endif					"mergedel(合成所删除的道具)",					CHAR_getInt( charaindex,CHAR_FLOOR),					CHAR_getInt( charaindex,CHAR_X ),					CHAR_getInt( charaindex,CHAR_Y ),					ITEM_getChar( itemindexs[i], ITEM_UNIQUECODE),					ITEM_getChar( itemindexs[i], ITEM_NAME),					ITEM_getInt( itemindexs[i], ITEM_ID)					);								ITEM_endExistItemsOne( itemindexs[i]);	#ifdef _ITEM_PILENUMS			}#endif		}		CHAR_sendItemData( charaindex, haveitemindexs, cnt);				if( ret >= 0 ) {			int rc;			int createitemindex = ITEM_makeItemAndRegist( ret);#ifdef _MERGE_LOG			print("\n merge[ret:%d]", ret);			print("\n merge[createitemindex:%d]", createitemindex);#endif			// shan begin						if( createitemindex != -1 ){								if( petindex != -1){										if( CHAR_getInt(petindex, CHAR_PETFAMILY) == 1 ){												int ownerindex = CHAR_getWorkInt(petindex, CHAR_WORKPLAYERINDEX);												if (!CHAR_CHECKINDEX(ownerindex)){							print("ownerindex err!\n");							return -1;						}#ifdef _FMVER21			            						if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != FMMEMBER_LEADER){#else							if( CHAR_getInt( ownerindex, CHAR_FMLEADERFLAG) != 1){#endif			            								print("\n Pet Ownerindex Error");								return -1;							}													if( randtable == 1){								char *p;								char charbuf1[512]="",charbuf2[1024]="",charbuf[128]="";								char argbuf[256];								int  arg1 = 0, arg2 = 0;														if( ITEM_getInt( createitemindex, ITEM_TYPE) == 20){																	if( (p = strstr( ITEM_getChar(createitemindex, ITEM_ARGUMENT), "气")) ){																			strcpy( argbuf, (p+2));										arg1 = atoi(argbuf);										arg1 = arg1 * FOOD_MP_RATE / 100;									}									if( (p = strstr( ITEM_getChar(createitemindex, ITEM_ARGUMENT), "体")) ){																		strcpy( argbuf, (p+2));										arg2 = atoi(argbuf);										arg2 = arg2 * FOOD_HP_RATE / 100;									}									if( arg1 != 0 && arg2 != 0 ){																		sprintf( charbuf1, "气%d体%d", arg1, arg2);																	}									else if( arg1 != 0){										sprintf( charbuf1, "气%d", arg1);																	}									else if( arg2 != 0){										sprintf( charbuf1, "体%d", arg2);																	}									sprintf( charbuf, "(家族料理)");									strcpy( charbuf2, ITEM_getChar( createitemindex, ITEM_EFFECTSTRING));									strncat( charbuf2, charbuf, 10);									ITEM_setChar( createitemindex, ITEM_ARGUMENT, charbuf1);									ITEM_setChar( createitemindex, ITEM_EFFECTSTRING, charbuf2);								}							}						}					}				}				// shan end				ITEM_setInt( createitemindex, ITEM_MERGEFLG, TRUE);				if( createitemindex != -1 ) {					rc = CHAR_addItemSpecificItemIndex( charaindex, createitemindex);					if( rc >= 0 && rc < CHAR_MAXITEMHAVE) {						CHAR_sendItemDataOne( charaindex, rc);						LogItem(							CHAR_getChar( charaindex, CHAR_NAME ),							CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称							createitemindex,#else							ITEM_getInt( createitemindex, ITEM_ID),#endif							"mergeadd(合成出来的道具)",							CHAR_getInt( charaindex,CHAR_FLOOR),							CHAR_getInt( charaindex,CHAR_X ),							CHAR_getInt( charaindex,CHAR_Y ),							ITEM_getChar( createitemindex, ITEM_UNIQUECODE),							ITEM_getChar( createitemindex, ITEM_NAME),							ITEM_getInt( createitemindex, ITEM_ID)							);						result = TRUE;					}					else {						ITEM_endExistItemsOne( createitemindex);					}				}			}		}		return result;}static int ITEM_getTableNum( int num){	int i;	for( i = 0; i < arraysizeof( ItemRandTableForItem); i ++) {		if( num <= ItemRandTableForItem[i].maxnum ) {			break;		}	}	if( i == arraysizeof( ItemRandTableForItem)) i--;	return i;}#ifdef _ITEM_INSLAYint PETSKILL_ITEM_inslay( int charindex, int inslayindex, int itemindex){	char *inslaystr , *code;	char buf1[256], buf2[256];	char codeTemp[][32]={ "NULL", "NULL", "NULL"};	char TypeName[][256]={		"攻", "防", "敏", "HP", "MP", "幸运", "伤", "吸", "魔法ID"	};	int worktyp[] = {		ITEM_MODIFYATTACK, ITEM_MODIFYDEFENCE, ITEM_MODIFYQUICK,		ITEM_MODIFYHP, ITEM_MODIFYMP, ITEM_MODIFYLUCK, 		ITEM_OTHERDAMAGE, ITEM_OTHERDEFC, ITEM_MAGICID	};	int worknum[ arraysizeof(worktyp)];	int i;#define MAXCANINSLAY 3	memset( worknum, 0, sizeof( worknum));	if( !CHAR_CHECKINDEX( charindex) ) return FALSE;	if( !ITEM_CHECKINDEX( inslayindex) ) return FALSE;	if( !ITEM_CHECKINDEX( itemindex) ) return FALSE;	if( itemindex == inslayindex ) return FALSE;	if( (code = ITEM_getChar( itemindex, ITEM_TYPECODE)) == NULL )	{		print(" ITEM_TYPECODE == NULL error !!\n");		return FALSE;	}	if( !strcmp( code, "\0") || !strcmp( code, "NULL" ) ) return FALSE;	if( (inslaystr = ITEM_getChar( inslayindex, ITEM_INLAYCODE)) == NULL )	{		print(" ITEM_INLAYCODE == NULL error !!\n");		return FALSE;	}	for( i = 0; i < MAXCANINSLAY; i ++ ) {		if( getStringFromIndexWithDelim( inslaystr , "|", i+1, buf1,  sizeof( buf1 ) ) == TRUE ){			if( strcmp( buf1, "\0")){				sprintf( codeTemp[i], "%s", buf1);			}			continue;		}		break;	}	for( i = 0; i < MAXCANINSLAY; i ++ ) {		if( strcmp( codeTemp[i], "NULL") ) continue;		sprintf( codeTemp[i], "%s", code);		break;	}	if( i == MAXCANINSLAY )	{		CHAR_talkToCli( charindex, -1, "武器或防具已经镶满了。", CHAR_COLORYELLOW);		return FALSE;	}	memset( buf2, 0, sizeof( buf2));	sprintf( buf2, "%s|%s|%s", codeTemp[0], codeTemp[1], codeTemp[2]);	print("buf2:%s\n", buf2);	ITEM_setChar( inslayindex, ITEM_INLAYCODE, buf2);	for( i=0; i<arraysizeof( worktyp)-1; i++)	{		int pwork1, pwork2;		pwork1 = ITEM_getInt( inslayindex, worktyp[i]);		pwork2 = ITEM_getInt( itemindex, worktyp[i]);		ITEM_setInt( inslayindex, worktyp[i], pwork1+pwork2 );		worknum[i] = pwork1+pwork2;	}	{		char secretname[256], Mname[256];		char *funstr;//ITEM_MAGICID		char *magicname;				if( ITEM_getInt( itemindex, ITEM_MAGICID) > 0 )	{	//魔法 ID			int magicid,mp;			magicid = ITEM_getInt( itemindex, ITEM_MAGICID);			ITEM_setInt( inslayindex, ITEM_MAGICID, magicid);			mp = ITEM_getInt( itemindex, ITEM_MAGICUSEMP );			ITEM_setInt( inslayindex, ITEM_MAGICUSEMP, mp);		}		for( i=ITEM_FIRSTFUNCTION; i<ITEM_LASTFUNCTION; i++)	{	//function			ITEM_setChar( inslayindex, i, "\0");			if( (funstr = ITEM_getChar( itemindex, i)) != NULL )	{				ITEM_setChar( inslayindex, i, funstr);			}		}		if( (funstr = ITEM_getChar( itemindex, ITEM_ARGUMENT)) != NULL )	{ //参数			ITEM_setChar( inslayindex, ITEM_ARGUMENT, "\0");			ITEM_setChar( inslayindex, ITEM_ARGUMENT, funstr);		}		memset( Mname, 0, sizeof( Mname));		if( ITEM_getInt( inslayindex, ITEM_MAGICID) > 0 )	{	//取得魔法名称			int marray = MAGIC_getMagicArray( ITEM_getInt( inslayindex, ITEM_MAGICID));			if( marray != -1 ){				if( (magicname = MAGIC_getChar( marray, MAGIC_NAME)) != NULL ){					sprintf( Mname, "%s", magicname);				}			}			ITEM_setInt( inslayindex, ITEM_MAGICID, ITEM_getInt( inslayindex, ITEM_MAGICID));		}		sprintf( secretname, "%s%s%d %s%s%d %s%s%d %s%s%d %s%s%d %s%s%d %s%s%d %s",			TypeName[0],(worknum[0]>=0)?"+":"",worknum[0],			TypeName[1],(worknum[1]>=0)?"+":"",worknum[1],			TypeName[2],(worknum[2]>=0)?"+":"",worknum[2],			TypeName[3],(worknum[3]>=0)?"+":"",worknum[3],			TypeName[4],(worknum[4]>=0)?"+":"",worknum[4],			TypeName[6],(worknum[6]>=0)?"+":"",worknum[6],			TypeName[7],(worknum[7]>=0)?"+":"",worknum[7], Mname);		ITEM_setChar( inslayindex, ITEM_EFFECTSTRING, secretname);	}	return TRUE;}#endif#ifdef _PETSKILL_FIXITEMint PETSKILL_ITEM_FixItem( int charindex, int fixindex, int *itemindex){	int index, i;	char *buf2;	int crushes, maxcrushes;#define MAXFIXNUM 2	index = 0;	for( i=0; i<MAXFIXNUM; i++)	{		if( fixindex != itemindex[i] )	{			index = itemindex[i];			break;		}	}	if( i == MAXFIXNUM ){		print("PETSKILL_ITEM_FixItem error !!\n");		return FALSE;	}	if( (buf2 = ITEM_getChar( index, ITEM_INGNAME0) ) == NULL ) return FALSE;	for( i=0; i<5; i++ )	{//ITEM_INGVALUE0		char *buf1;		if( (buf1 = ITEM_getChar( fixindex, ITEM_INGNAME0+i) ) == NULL ) continue;		if( !strcmp( buf2,"") || !strcmp( buf1,"")) continue;		if( !strcmp( buf1, buf2) )	{			break;		}	}	if( i >= 5 ){#ifdef _ITEM_FIXALLBASE		char *ITEM_ARG = ITEM_getChar( index, ITEM_ARGUMENT);		if( ITEM_ARG != NULL && !strcmp( ITEM_ARG, "FIXITEMALL") ){		}else{#endif			CHAR_talkToCli( charindex, -1, "材料不符", CHAR_COLORYELLOW);			return FALSE;#ifdef _ITEM_FIXALLBASE		}#endif	}		crushes = ITEM_getInt( fixindex, ITEM_DAMAGECRUSHE);	maxcrushes = ITEM_getInt( fixindex, ITEM_MAXDAMAGECRUSHE);	if( crushes >= (maxcrushes*0.80) )	{		char buff[256];		sprintf( buff, "%s并没有损坏到需要修复。", ITEM_getChar( fixindex, ITEM_NAME));		CHAR_talkToCli( charindex, -1, buff, CHAR_COLORYELLOW);		return FALSE;	}else	{		char *buf1;		if( maxcrushes < 500 ){			CHAR_talkToCli( charindex, -1, "此物品已不能修复", CHAR_COLORYELLOW);			return FALSE;		}		if( crushes <= 0 ) return FALSE;		maxcrushes = maxcrushes*0.85;		crushes = maxcrushes;		ITEM_setInt( fixindex, ITEM_DAMAGECRUSHE, crushes);		ITEM_setInt( fixindex, ITEM_MAXDAMAGECRUSHE, maxcrushes);		//修正名称		buf1 = ITEM_getChar( fixindex, ITEM_SECRETNAME);		if( strstr( buf1, "(") != 0 )	{			char buf5[256];			if( getStringFromIndexWithDelim( buf1,"(",1, buf5, sizeof( buf5)) != FALSE )	{				sprintf( buf1, buf5);			}		}		ITEM_setChar( fixindex, ITEM_SECRETNAME, buf1);		ITEM_setInt( fixindex, ITEM_CRUSHLEVEL, 0);	}	return TRUE;}#endif

⌨️ 快捷键说明

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