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

📄 item.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 4 页
字号:
	return ITEM_itemStatusStringBuffer;}char*   ITEM_makeItemFalseString( void ){	strcpysafe( ITEM_itemStatusStringBuffer,				sizeof( ITEM_itemStatusStringBuffer),				"||||||||" );	return ITEM_itemStatusStringBuffer;}char*   ITEM_makeItemFalseStringWithNum( int haveitemindex ){	snprintf(  ITEM_itemStatusStringBuffer, sizeof( ITEM_itemStatusStringBuffer),				"%d|||||||||", haveitemindex);	return ITEM_itemStatusStringBuffer;}BOOL ITEM_makeItem( ITEM_Item* itm, int number ){	int i;	if( ITEM_CHECKITEMTABLE(number) == FALSE ){		print(" Can't makeItem for itemid:%d!!\n", number);		return FALSE;	}	memcpy( itm, &ITEM_tbl[ITEM_idx[number].index].itm , sizeof( ITEM_Item ) ); //new	for( i=0 ; i<ITEM_DATAINTNUM ; i++ ){		int     randomvalue;		randomvalue = RAND(0,ITEM_tbl[ITEM_idx[number].index].randomdata[i]); //new		itm->data[i] = ITEM_tbl[ITEM_idx[number].index].itm.data[i] + randomvalue; //new	}	itm->data[ITEM_LEAKLEVEL] = 1;	return TRUE;}int ITEM_makeItemAndRegist( int number ){	ITEM_Item   itm;	memset( &itm, 0, sizeof( itm));	if( ITEM_makeItem( &itm, number ) == FALSE )		return -1;	return ITEM_initExistItemsOne( &itm );}#define EQUIP_FIX_MAX	10000000void ITEM_equipEffect( int index ){	int     i;	int		attribaccum[4] = { 0,0,0,0};	static struct itmeffectstruct{		int itemdataintindex;		int charmodifyparamindex;		int accumulation;		int min;		int max;		int type;	}itemEffect[]={		{ ITEM_MODIFYATTACK,    CHAR_WORKATTACKPOWER,	0,	0,	EQUIP_FIX_MAX,	0},		{ ITEM_MODIFYDEFENCE,	CHAR_WORKDEFENCEPOWER,	-100,	0,	EQUIP_FIX_MAX,	0},		{ ITEM_MODIFYQUICK,		CHAR_WORKQUICK,			-100,	0,	EQUIP_FIX_MAX,	0},		{ ITEM_MODIFYHP,		CHAR_WORKMAXHP,			0,	0,	EQUIP_FIX_MAX,	0},		{ ITEM_MODIFYMP,        CHAR_WORKMAXMP,			0,	0,	1000,	0}, // MP 反100引匹		{ ITEM_MODIFYLUCK,       CHAR_WORKFIXLUCK,	0,	1,	5,	0},		{ ITEM_MODIFYCHARM,      CHAR_WORKFIXCHARM,	0,	0,	100,	0},		{ ITEM_MODIFYAVOID,      CHAR_WORKFIXAVOID,	0,	0,	EQUIP_FIX_MAX,	0},		{ ITEM_POISON,      	 CHAR_WORKMODPOISON,	0,	-100, 100,	0},		{ ITEM_PARALYSIS,      	 CHAR_WORKMODPARALYSIS,	0,	-100, 100,	0},		{ ITEM_SLEEP,      	 	 CHAR_WORKMODSLEEP,	0, -100,	100,	0},		{ ITEM_STONE,      	 	 CHAR_WORKMODSTONE,	0, -100,	100,	0},		{ ITEM_DRUNK,      	 	 CHAR_WORKMODDRUNK,	0, -100,	100,	0},		{ ITEM_CONFUSION,      	 CHAR_WORKMODCONFUSION,	0,	-100,	100,	0},		{ ITEM_CRITICAL,      	 CHAR_WORKMODCRITICAL,	0,	-100,	100,	0},#ifdef _ADD_DEAMGEDEFC		{ ITEM_OTHERDAMAGE,		CHAR_WORKOTHERDMAGE,	0,	-100,	100,	0},		{ ITEM_OTHERDEFC,		CHAR_WORKOTHERDEFC,		0,	-100,	100,	0},#endif#ifdef _ITEMSET5_TXT		{ ITEM_MODIFYARRANGE,	CHAR_WORKFIXARRANGE,	0,	0,	1000,	0},		{ ITEM_MODIFYSEQUENCE,	CHAR_WORKFIXSEQUENCE,	0,	0,	100,	1},		{ ITEM_ATTACHPILE,		CHAR_WORKATTACHPILE,	0,	0,	10,	1},		{ ITEM_HITRIGHT,		CHAR_WORKHITRIGHT,		0,	0,	40,	1},#endif#ifdef _ITEMSET6_TXT		{ ITEM_NEGLECTGUARD,	CHAR_WORKNEGLECTGUARD,	0,	0,	30,	1},#endif	};	for( i = 0 ; i < arraysizeof( itemEffect ); i ++ )		itemEffect[i].accumulation = 0;	if( !CHAR_CHECKINDEX(index) )return;		for( i = 0 ; i < CHAR_EQUIPPLACENUM ; i ++ ){		int id = CHAR_getItemIndex(index,i);		if( ITEM_CHECKINDEX(id) ){			int     j;			int		attrib = 0;			for( j=0; j < arraysizeof( itemEffect ); j ++ ) {				itemEffect[j].accumulation += ITEM_getInt( id, itemEffect[j].itemdataintindex );			}			attrib = ITEM_getInt( id, ITEM_MODIFYATTRIB);			if(  attrib > 0 && attrib < 5) {				attribaccum[attrib - 1] += ITEM_getInt( id, ITEM_MODIFYATTRIBVALUE);			}		}	}#ifdef _FIX_MAXCHARMP	for(i = 3 ; i < arraysizeof( itemEffect ) ; i ++ ){#else	for(i = 5 ; i < arraysizeof( itemEffect ) ; i ++ ){#endif		int work=0;		if( itemEffect[i].type == 1 ){			work = itemEffect[i].accumulation;		}else{			work = CHAR_getWorkInt(index,itemEffect[i].charmodifyparamindex) + itemEffect[i].accumulation;			work = min( itemEffect[i].max, work );			work = max( itemEffect[i].min, work );		}		CHAR_setWorkInt( index, itemEffect[i].charmodifyparamindex, work );	}	for( i = 0; i < 4; i ++ ) {		CHAR_setWorkInt( index, CHAR_WORKFIXEARTHAT + i,						CHAR_getWorkInt( index, CHAR_WORKFIXEARTHAT + i) +						attribaccum[i]);	}	for( i = 0; i < 4; i ++ ) {		int		j;		for( j = 0; j < 4; j ++ ) {			if( i != j ) {				CHAR_setWorkInt( index, CHAR_WORKFIXEARTHAT + j,						CHAR_getWorkInt(index, CHAR_WORKFIXEARTHAT + j) - attribaccum[i]);			}		}	}	for( i = 0; i < 4; i ++ ) {		if( CHAR_getWorkInt( index, CHAR_WORKFIXEARTHAT + i) > CHAR_MAXATTRIB) {			CHAR_setWorkInt( index, CHAR_WORKFIXEARTHAT + i, CHAR_MAXATTRIB);		}	}	{		int work;		work = CHAR_getWorkInt(index,CHAR_WORKFIXSTR)+ itemEffect[0].accumulation;		CHAR_setWorkInt( index, CHAR_WORKFIXSTR, max( 0, work ) );		work = CHAR_getWorkInt(index,CHAR_WORKFIXTOUGH)	+ itemEffect[1].accumulation;		CHAR_setWorkInt( index, CHAR_WORKFIXTOUGH, max( -100, work ) );		work = CHAR_getWorkInt( index, CHAR_WORKFIXDEX)	+ itemEffect[2].accumulation;		CHAR_setWorkInt( index, CHAR_WORKFIXDEX, max( -100, work ) );	}}void Other_DefcharWorkInt( int index){#ifdef _SUIT_ITEM	int mfix,mtgh,mdex,mods,maxhp;	mfix = CHAR_getWorkInt( index, CHAR_WORKFIXSTR);	mtgh = CHAR_getWorkInt( index, CHAR_WORKFIXTOUGH);	mdex = CHAR_getWorkInt( index, CHAR_WORKFIXDEX);	maxhp = CHAR_getWorkInt( index, CHAR_WORKMAXHP);	mods = CHAR_getWorkInt( index, CHAR_WORKSUITMODSTR);	mfix = mfix+((mfix*mods)/100);	CHAR_setWorkInt( index, CHAR_WORKFIXSTR, mfix+CHAR_getWorkInt( index, CHAR_WORKSUITSTR));	CHAR_setWorkInt( index, CHAR_WORKFIXTOUGH, mtgh+CHAR_getWorkInt( index, CHAR_WORKSUITTGH));	CHAR_setWorkInt( index, CHAR_WORKFIXDEX, mdex+CHAR_getWorkInt( index, CHAR_WORKSUITDEX));	CHAR_setWorkInt( index, CHAR_WORKMAXHP, maxhp+ CHAR_getWorkInt( index, CHAR_WORKSUITVIT));#ifdef _SUIT_ADDPART3	if( mfix > 0 )		CHAR_setWorkInt( index, CHAR_WORKFIXSTR, CHAR_getWorkInt( index, CHAR_WORKFIXSTR)+mfix*CHAR_getWorkInt( index, CHAR_WORKSUITSTR_P)/100.0);	if( mtgh > 0 )		CHAR_setWorkInt( index, CHAR_WORKFIXTOUGH, CHAR_getWorkInt( index, CHAR_WORKFIXTOUGH)+mtgh*CHAR_getWorkInt( index, CHAR_WORKSUITTGH_P)/100.0);	if( mdex > 0)		CHAR_setWorkInt( index, CHAR_WORKFIXDEX, CHAR_getWorkInt( index, CHAR_WORKFIXDEX)+mdex*CHAR_getWorkInt( index, CHAR_WORKSUITDEX_P)/100.0);#endif#endif//_SUIT_ITEM#ifdef _PETSKILL_SETDUCK	//profession fix	//使用回避招式时,会将防值减去30%然後设定成回避值,奇怪的设定,也造成原本设定的回避值跟没设一样,因此我(Change)先把整段拿掉	/*if( CHAR_getWorkInt( index, CHAR_MYSKILLDUCK) > 0 ){		int mtgh = CHAR_getWorkInt( index, CHAR_WORKFIXTOUGH);		mtgh -= (mtgh*30)/100;		if( mtgh < 0 ) mtgh=0;		CHAR_setWorkInt( index, CHAR_MYSKILLDUCKPOWER, mtgh);	}*/#endif#ifdef _MAGICPET_SKILL	if( CHAR_getWorkInt( index, CHAR_MYSKILLSTR) > 0 ){		int mpower, mdef;		mpower = CHAR_getWorkInt( index, CHAR_WORKFIXSTR);		mdef = CHAR_getWorkInt( index, CHAR_MYSKILLSTRPOWER);		mpower += (mtgh*mdef)/100;		if( mtgh < 0 ) mtgh=0;		CHAR_setWorkInt( index, CHAR_WORKFIXSTR, mpower);	}	if( CHAR_getWorkInt( index, CHAR_MYSKILLTGH) > 0 ){		int mpower, mdef;		mpower = CHAR_getWorkInt( index, CHAR_WORKFIXTOUGH);		mdef = CHAR_getWorkInt( index, CHAR_MYSKILLTGHPOWER);		mpower += (mtgh*mdef)/100;		if( mtgh < 0 ) mtgh=0;		CHAR_setWorkInt( index, CHAR_WORKFIXTOUGH, mpower);	}	if( CHAR_getWorkInt( index, CHAR_MYSKILLDEX) > 0 ){		int mpower, mdef;		mpower = CHAR_getWorkInt( index, CHAR_WORKFIXDEX);		mdef = CHAR_getWorkInt( index, CHAR_MYSKILLDEXPOWER);		mpower += (mtgh*mdef)/100;		if( mtgh < 0 ) mtgh=0;		CHAR_setWorkInt( index, CHAR_WORKFIXDEX, mpower);	}#endif#ifdef _VARY_WOLF			if(CHAR_getInt( index, CHAR_BASEIMAGENUMBER)==101428){		int Rands=0, power;		Rands = CHAR_getWorkInt( index, CHAR_SKILLSTRPOWER);		power = CHAR_getWorkInt( index, CHAR_WORKFIXSTR);		power = power + (power*Rands)/100;		CHAR_setWorkInt( index, CHAR_WORKFIXSTR, power);		Rands = CHAR_getWorkInt( index, CHAR_SKILLDEXPOWER);		power = CHAR_getWorkInt( index, CHAR_WORKFIXDEX);		power = power + (power*Rands)/100;		CHAR_setWorkInt( index, CHAR_WORKFIXDEX, power);	}#endif#ifdef _MAGIC_WEAKEN	if(CHAR_getWorkInt(index,CHAR_WORKWEAKEN)>0){			CHAR_setWorkInt( index, CHAR_WORKFIXSTR, CHAR_getWorkInt( index, CHAR_WORKFIXSTR)*0.8);			CHAR_setWorkInt( index, CHAR_WORKFIXTOUGH, CHAR_getWorkInt( index, CHAR_WORKFIXTOUGH)*0.8);			CHAR_setWorkInt( index, CHAR_WORKFIXDEX, CHAR_getWorkInt( index, CHAR_WORKFIXDEX)*0.8);            CHAR_setWorkInt( index, CHAR_WORKWEAKEN, CHAR_getWorkInt( index, CHAR_WORKWEAKEN)-1);	}#endif#ifdef _MAGIC_BARRIER// vincent  精灵:魔障	if( CHAR_getWorkInt( index, CHAR_WORKBARRIER) > 0){            CHAR_setWorkInt( index, CHAR_WORKBARRIER, CHAR_getWorkInt( index, CHAR_WORKBARRIER) - 1);	}#endif	CHAR_setWorkInt(index, CHAR_WORKATTACKPOWER,	CHAR_getWorkInt( index, CHAR_WORKFIXSTR ) );	CHAR_setWorkInt(index, CHAR_WORKDEFENCEPOWER,	CHAR_getWorkInt( index, CHAR_WORKFIXTOUGH ) );	CHAR_setWorkInt(index, CHAR_WORKQUICK,			CHAR_getWorkInt( index, CHAR_WORKFIXDEX ) );}char* ITEM_getAppropriateName(int itemindex){	int nameindex;	if( !ITEM_CHECKINDEX(itemindex ) )return "\0";	if( ITEM_getInt(itemindex,ITEM_LEAKLEVEL) <= 0 )		nameindex = ITEM_NAME;	else		nameindex = ITEM_SECRETNAME;	return ITEM_getChar(itemindex,nameindex);}char* ITEM_getEffectString( int itemindex ){	if( !ITEM_CHECKINDEX(itemindex))return "\0";	return ITEM_item[itemindex].itm.string[ITEM_EFFECTSTRING].string;}char *ITEM_getItemInfoFromNumber( int itemid ){	return ITEMTBL_getChar( itemid, ITEM_EFFECTSTRING);}INLINE char* _ITEM_getNameFromNumber( char *file, int line, int itemid ){	if( ITEM_CHECKITEMTABLE(itemid) == FALSE ){		print("Can't Get ItemTable for:%d! - %s:%d\n",itemid, file, line);		return "\0";	}	return ITEMTBL_getChar( itemid, ITEM_NAME);}int ITEM_getcostFromITEMtabl( int itemid ){	return ITEMTBL_getInt( itemid, ITEM_COST);}int ITEM_getlevelFromITEMtabl( int itemid ){	return ITEMTBL_getInt( itemid, ITEM_LEVEL);}int ITEM_getgraNoFromITEMtabl( int itemid ){	return ITEMTBL_getInt( itemid, ITEM_BASEIMAGENUMBER);}int ITEM_getcanpetmailFromITEMtabl( int itemid ){	return ITEMTBL_getInt( itemid, ITEM_CANPETMAIL);}int ITEM_getvanishatdropFromITEMtabl( int itemid ){	return ITEMTBL_getInt( itemid, ITEM_VANISHATDROP);}int ITEM_getdropatlogoutFromITEMtabl( int itemid ){	return ITEMTBL_getInt( itemid, ITEM_DROPATLOGOUT);}int ITEM_getmergeItemFromFromITEMtabl( int itemid ){	return ITEMTBL_getInt( itemid, ITEM_CANMERGEFROM);}BOOL ITEM_canuseMagic( int itemindex){	if( !ITEM_CHECKINDEX(itemindex))return FALSE;	if( MAGIC_getMagicArray( ITEM_item[itemindex].itm.data[ITEM_MAGICID]) != -1 ) {		return TRUE;	}	return FALSE;}INLINE ITEM_Item *ITEM_getItemPointer( int index ){	if(!ITEM_CHECKINDEX(index))return NULL;	return &ITEM_item[index].itm;}int ITEM_isTargetValid( int charaindex, int itemindex, int toindex){	int itemtarget;	int Myside;	itemtarget = ITEM_getInt( itemindex, ITEM_TARGET );	Myside = CHAR_getWorkInt( charaindex, CHAR_WORKBATTLESIDE );	if ((toindex >= 0x0) && (toindex <= 0x13)) return 0;	if (toindex == 0x14) {//20 右下全 0		if (itemtarget == ITEM_TARGET_ALLMYSIDE){			if( Myside == 0 )return 0;		}else if(itemtarget == ITEM_TARGET_ALLOTHERSIDE ){			if( Myside == 1 )return 0;		}	}else if (toindex == 0x15) {//21 左上全 1		if (itemtarget == ITEM_TARGET_ALLMYSIDE){			if( Myside == 1 )return 0;		}else if( itemtarget == ITEM_TARGET_ALLOTHERSIDE ){			if( Myside == 0 )return 0;		}	}else if (toindex == 0x16) {		if (itemtarget == ITEM_TARGET_ALL)			return 0;	}	return -1;}// Nuke end#ifdef _ITEM_CHECKWARESBOOL CHAR_CheckInItemForWares( int charaindex, int flg){	int itemindex, i;	char token[256];		for( i=0; i<24; i++)	{		itemindex = CHAR_getItemIndex( charaindex, i);		if( !ITEM_CHECKINDEX( itemindex) ) continue;		if( ITEM_getInt( itemindex, ITEM_TYPE) == ITEM_WARES ) {			if( flg == 0 ){				return FALSE;			}			sprintf(token,"交出%s",ITEM_getChar( itemindex, ITEM_NAME));			CHAR_talkToCli( charaindex, -1, token, CHAR_COLORYELLOW);			CHAR_setItemIndex( charaindex, i ,-1);			ITEM_endExistItemsOne( itemindex);			CHAR_sendItemDataOne( charaindex, i);		}	}	return TRUE;}#endifint ITEMTBL_getInt( int ItemID, ITEM_DATAINT datatype){	if( datatype >= ITEM_DATAINTNUM || datatype < 0 ) return -1;	if( ITEM_CHECKITEMTABLE(ItemID) == FALSE )return -1;		return ITEM_tbl[ITEM_idx[ItemID].index].itm.data[datatype]; //new}char *ITEMTBL_getChar( int ItemID, ITEM_DATACHAR datatype){	if( datatype >= ITEM_DATACHARNUM || datatype < 0 ) return "\0";	if( ITEM_CHECKITEMTABLE(ItemID) == FALSE )return "\0";	return ITEM_tbl[ITEM_idx[ItemID].index].itm.string[datatype].string; //new}INLINE BOOL ITEM_CHECKITEMTABLE( int number ){	if( number < 0 || number >= ITEM_idxlen  ){		//andy_log		print("ITEM_CHECKITEMTABLE() number:%d ITEM_tblen:%d !!\n", number, ITEM_idxlen );		return FALSE;	}	return ITEM_idx[number].use; //new}int ITEM_getItemDamageCrusheED( int itemindex){	int crushe	= ITEM_getInt( itemindex, ITEM_DAMAGECRUSHE);	int maxcrushe = ITEM_getInt( itemindex, ITEM_MAXDAMAGECRUSHE);	if(maxcrushe < 1)return -1;	if( maxcrushe > 1000000) maxcrushe = 1000000;	if( crushe > 1000000) crushe = 1000000;	return ((int) (crushe*100)/maxcrushe);}void ITEM_RsetEquit( int charaindex){	int i, itemindex, ti=-1;	for( i=0; i<CHAR_STARTITEMARRAY; i++){		itemindex = CHAR_getItemIndex( charaindex , i );		if( !ITEM_CHECKINDEX( itemindex)) continue;		if( i == ITEM_getEquipPlace( charaindex, itemindex ) ) continue;		if( (ti = CHAR_findEmptyItemBox( charaindex )) == -1 ) return;		CHAR_setItemIndex( charaindex , i, -1);		CHAR_setItemIndex( charaindex , ti, itemindex);	}}

⌨️ 快捷键说明

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