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

📄 char_item.c.bak

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 BAK
📖 第 1 页 / 共 5 页
字号:
			otheritemindex = CHAR_getItemIndex( index, checkplace);			if( ITEM_CHECKINDEX( otheritemindex )) {				int otheritemtype = ITEM_getInt( otheritemindex, ITEM_TYPE);				int myitemtype = ITEM_getInt( CHAR_getItemIndex( index, fromindex) , ITEM_TYPE);				if( otheritemtype == myitemtype) {					if( toid < 0 ) {						CANNOTEQUIP2;					}else {						CANNOTEXCHANGE;					}					return FALSE;				}			}			flg = TRUE;		}	}else {		if( toindex == fromeqplace) flg = TRUE;	}	if( flg ){		CHAR_setItemIndex(index,toindex,fromid);		CHAR_setItemIndex(index,fromindex,toid);		if( toid != -1 ) {			CHAR_sendItemDetachEvent( index, toid );		}#ifdef _CHECK_ITEM_MODIFY		ITEM_checkItemModify( index, fromid);#endif		CHAR_sendItemAttachEvent( index, fromid );		CHAR_sendSIToCli( index, fromindex,toindex );	}else {		CANNOTEQUIP;		return FALSE;	}#if 0 //#ifdef _ANGEL_SUMMON	//if( !strcmp( ITEM_getChar( fromid, ITEM_USEFUNC), "ITEM_AngelToken") ) {	if( ITEM_getInt( fromid, ITEM_ID) == ANGELITEM ) {		print(" 装备使者信物 ");		CHAR_talkToCli( index, -1, "你受到了精灵保护,不会被敌人攻击。", CHAR_COLORYELLOW );		//CHAR_setWorkInt( index, CHAR_WORKANGELMODE, TRUE);		CHAR_sendAngelMark( CHAR_getWorkInt( index, CHAR_WORKOBJINDEX), 1);	}#endif	return TRUE;}static BOOL CHAR_moveItemFromEquipToItemBox(int index, int fromindex,										  int toindex){	int fromid,toid;	if( !CHAR_CHECKINDEX( index )) return FALSE;	fromid  = CHAR_getItemIndex(index,fromindex);	toid    = CHAR_getItemIndex(index,toindex);	if( fromid < 0 )		return FALSE;	else if( toid < 0 ){		CHAR_setItemIndex(index,toindex,fromid);		CHAR_setItemIndex(index,fromindex,-1);		CHAR_sendItemDetachEvent( index,fromid );		CHAR_sendSIToCli( index,fromindex,toindex);#if 0 //#ifdef _ANGEL_SUMMON		//if( !strcmp( ITEM_getChar( fromid, ITEM_USEFUNC), "ITEM_AngelToken") ) {		if( ITEM_getInt( fromid, ITEM_ID) == ANGELITEM ) {			print(" 卸下使者信物 ");			CHAR_setWorkInt( index, CHAR_WORKANGELMODE, FALSE);			CHAR_sendAngelMark( CHAR_getWorkInt( index, CHAR_WORKOBJINDEX), 0);		}#endif		return TRUE;	}	return CHAR_moveItemFromItemBoxToEquip(index, toindex,fromindex);}#ifdef _ITEM_PILENUMSint CHAR_getMyMaxPilenum( int charaindex){	int maxpile;	maxpile = CHAR_getInt( charaindex, CHAR_TRANSMIGRATION)		+ (CHAR_getInt( charaindex, CHAR_TRANSMIGRATION)/5) * 2 + 3;/*#ifdef _PROFESSION_SKILL			// WON ADD 人物职业技能	maxpile += CHAR_getInt( charaindex, ATTACHPILE );#endif*/#ifdef _EQUIT_ADDPILE	maxpile += CHAR_getWorkInt( charaindex, CHAR_WORKATTACHPILE);	maxpile = (maxpile<0)?0:maxpile;#endif	return maxpile;}BOOL CHAR_PileItemFromItemBoxToItemBox( int charaindex, int fromindex, int toindex){	int maxpile, fromid, toid;	if( !CHAR_CHECKINDEX( charaindex) ) return FALSE;	fromid = CHAR_getItemIndex( charaindex, fromindex);	toid = CHAR_getItemIndex( charaindex, toindex);	maxpile = CHAR_getMyMaxPilenum( charaindex);	if( ITEM_CHECKINDEX( toid) && ITEM_CHECKINDEX( fromid) &&		(ITEM_getInt( toid, ITEM_ID) == ITEM_getInt( fromid, ITEM_ID)) &&		(ITEM_getInt( toid, ITEM_CANBEPILE) == 1) &&		(ITEM_getInt( toid, ITEM_USEPILENUMS) < maxpile) &&		(ITEM_getInt( fromid, ITEM_USEPILENUMS) < maxpile) ){		int formpilenum , pilenum, defpilenum;		pilenum = ITEM_getInt( toid, ITEM_USEPILENUMS);		formpilenum = ITEM_getInt( fromid, ITEM_USEPILENUMS);		defpilenum = ((maxpile-pilenum)>formpilenum)? formpilenum:(maxpile-pilenum);		formpilenum = formpilenum - defpilenum;		pilenum = pilenum + defpilenum;		ITEM_setInt( toid, ITEM_USEPILENUMS, pilenum);		ITEM_setInt( fromid, ITEM_USEPILENUMS, formpilenum);		if( formpilenum <= 0 ){			CHAR_setItemIndex( charaindex, fromindex ,-1);			ITEM_endExistItemsOne( fromid);		}		return TRUE;	}	return FALSE;}#endifstatic BOOL CHAR_moveItemFromItemBoxToItemBox( int index, int fromindex, int toindex){	int     fromid, toid;	if( !CHAR_CHECKINDEX( index ) ) return FALSE;#ifdef _ITEM_PILENUMS	if( CHAR_PileItemFromItemBoxToItemBox( index, fromindex, toindex) == TRUE ){		CHAR_sendItemDataOne( index, toindex);		CHAR_sendItemDataOne( index, fromindex);		return TRUE;	}#endif	fromid = CHAR_getItemIndex( index, fromindex);	toid = CHAR_getItemIndex( index, toindex);	CHAR_setItemIndex(index,toindex, CHAR_setItemIndex( index, fromindex, toid));	CHAR_sendSIToCli( index,fromindex,toindex);	return TRUE;}void CHAR_moveEquipItem( int index, int fromindex, int toindex ){#define		MOVEITEM_NONE			0#define		MOVEITEM_EQUIPTOITEM	1 << 0#define		MOVEITEM_ITEMTOEQUIP	1 << 1#define		MOVEITEM_ITEMTOITEM		1 << 2	int     fromid;            /*  item    匹及奶件犯永弁旦    */	unsigned int     moved_any = 0;	while( 1) {		if( !CHAR_CHECKINDEX( index ) )break;		if( CHAR_getFlg( index,CHAR_ISDIE ) )break;		if( fromindex < 0 || fromindex >= CHAR_MAXITEMHAVE ||			toindex < 0 || toindex >= CHAR_MAXITEMHAVE )			break;		fromid  = CHAR_getItemIndex(index,fromindex);		if( fromid == -1 || fromid == -2 )break;		if( fromindex == toindex )break;		if( fromindex < CHAR_EQUIPPLACENUM ){			if( toindex  < CHAR_EQUIPPLACENUM ){				if( CHAR_getItemIndex(index,toindex) < 0 ){					CANNOTMOVE;				}else{					CANNOTEXCHANGE;				}			}else {				moved_any |= CHAR_moveItemFromEquipToItemBox(					index, fromindex, toindex )					? MOVEITEM_EQUIPTOITEM : MOVEITEM_NONE;				if( moved_any & MOVEITEM_EQUIPTOITEM) {					char	category[3];					snprintf( category,sizeof( category),"J%d", fromindex);					CHAR_sendStatusString( index , category);				}			}		}else{			if( toindex  < CHAR_EQUIPPLACENUM ) {				moved_any |= CHAR_moveItemFromItemBoxToEquip(					index, fromindex , toindex )					? MOVEITEM_ITEMTOEQUIP : MOVEITEM_NONE;				if( moved_any & MOVEITEM_ITEMTOEQUIP) {					char	category[3];					snprintf( category,sizeof( category),"J%d", toindex);					CHAR_sendStatusString( index , category);				}			}else	{				moved_any |= CHAR_moveItemFromItemBoxToItemBox(	index,fromindex,toindex )					? MOVEITEM_ITEMTOITEM : MOVEITEM_NONE;			}		}		CHAR_complianceParameter( index );		CHAR_sendCToArroundCharacter(CHAR_getWorkInt(index, CHAR_WORKOBJINDEX));		break;	}	if( (moved_any & MOVEITEM_EQUIPTOITEM) || (moved_any & MOVEITEM_ITEMTOEQUIP)){		int i;		CHAR_send_P_StatusString( index,								  CHAR_P_STRING_HP|CHAR_P_STRING_MAXHP|								  CHAR_P_STRING_MP|CHAR_P_STRING_MAXMP|								  CHAR_P_STRING_ATK|CHAR_P_STRING_DEF|								  CHAR_P_STRING_QUICK|CHAR_P_STRING_CHARM|								  CHAR_P_STRING_LUCK|CHAR_P_STRING_EARTH|								  CHAR_P_STRING_WATER|CHAR_P_STRING_FIRE|								  CHAR_P_STRING_WIND								  );		if( CHAR_getWorkInt( index,CHAR_WORKBATTLEMODE ) == BATTLE_CHARMODE_NONE ){			for( i = 0; i < CHAR_MAXPETHAVE; i ++ ) {				int petindex = CHAR_getCharPet( index, i);				if( CHAR_CHECKINDEX( petindex) ) {					char	category[3];					CHAR_complianceParameter( petindex );					snprintf( category, sizeof( category), "K%d",i);					CHAR_sendStatusString( index, category );				}			}		}	}	if( !moved_any ) {		CHAR_sendSIToCli( index,-1,-1);	}}int CHAR_addItemToChar( Char* ch, int itemid ){	int     itembox;	itembox = CHAR_findEmptyItemBoxFromChar( ch );	if( itembox == -1 )return -1;	return ch->indexOfExistItems[itembox]=ITEM_makeItemAndRegist(itemid);}int CHAR_addItem( int charaindex, int itemid ){	Char*   ch;	ch = CHAR_getCharPointer(charaindex);	if( ch != NULL ){		int ret = CHAR_addItemToChar( ch,itemid );		if( ret == -1 )return ret;		ITEM_setWorkInt(ret,ITEM_WORKCHARAINDEX,charaindex);		ITEM_setWorkInt(ret,ITEM_WORKOBJINDEX,-1);		return ret;	}else		return -1;}void CHAR_ItemUse( int charaindex, int to_charaindex, int haveitemindex ){	void (*usefunc)(int,int,int)=NULL;	int itemindex;	if( !CHAR_CHECKINDEX( charaindex ) ){		print( "ANDY charaindex=%d err\n", charaindex);		return;	}	if( CHAR_CHECKITEMINDEX( charaindex, haveitemindex) == FALSE ){		print( "ANDY haveitemindex=%d err\n", haveitemindex);		return;	}	itemindex = CHAR_getItemIndex( charaindex, haveitemindex);	if( CHAR_getFlg( charaindex, CHAR_ISDIE ) ){		print( "ANDY charaindex=%d is CHAR_ISDIE err\n", charaindex);		return;	}#ifdef _STREET_VENDOR	// 摆摊中不可使用道具	if(CHAR_getWorkInt(charaindex,CHAR_WORKSTREETVENDOR) > -1){		print("StreetVendor use item charaindex=%d,name=%s\n",charaindex,CHAR_getChar(charaindex,CHAR_NAME));		return;	}#endif	if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE) == BATTLE_CHARMODE_NONE ) {		if( CHAR_getInt( to_charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER) {			int action = ITEM_getInt( itemindex, ITEM_USEACTION);			if( action != -1 ) {				CHAR_sendAction( to_charaindex, action, TRUE);			}		}	}	//不等於料理 和 其他	if( ITEM_getInt( itemindex,ITEM_TYPE) != ITEM_OTHER &&		ITEM_getInt( itemindex,ITEM_TYPE) != ITEM_DISH ) {		CHAR_EquipPlace ep;				ep = ITEM_getEquipPlace( charaindex, itemindex );		if( ep == -1 )return;		if( ep == CHAR_DECORATION1 ) {			int	flg = FALSE;			int toitemindex1 = CHAR_getItemIndex( charaindex, ep);			int	toitemindex2 = CHAR_getItemIndex( charaindex, CHAR_DECORATION2);			int	searchindex = -1;			int fromitemtype = ITEM_getInt( itemindex, ITEM_TYPE);			if( !ITEM_CHECKINDEX( toitemindex1)) searchindex = toitemindex2;			else if(!ITEM_CHECKINDEX( toitemindex2)) searchindex = toitemindex1;			if( searchindex != -1 ) {				if( fromitemtype != ITEM_getInt( searchindex, ITEM_TYPE)) {					flg = TRUE;					ep = ( searchindex == toitemindex1)								? CHAR_DECORATION2:CHAR_DECORATION1;				}			}			if( !flg) {				if( fromitemtype != ITEM_getInt( toitemindex2, ITEM_TYPE)) {					ep = CHAR_DECORATION1;				}else if( fromitemtype != ITEM_getInt( toitemindex1, ITEM_TYPE)) {					ep = CHAR_DECORATION2;				}else {					ep = CHAR_DECORATION1;				}			}		}		CHAR_moveEquipItem( charaindex, haveitemindex,ep );		return;	}	usefunc = (void(*)(int,int,int))		ITEM_getFunctionPointer( itemindex,ITEM_USEFUNC );	if( usefunc ){		{			LogItem(				CHAR_getChar( charaindex, CHAR_NAME ), /* 平乓仿   */				CHAR_getChar( charaindex, CHAR_CDKEY ),#ifdef _add_item_log_name  // WON ADD 在item的log中增加item名称				itemindex,#else				ITEM_getInt( itemindex, ITEM_ID ),       /* 失奶  丞  寞 */#endif				"Use(使用道具)",				CHAR_getInt( charaindex,CHAR_FLOOR),				CHAR_getInt( charaindex,CHAR_X ), 	      		CHAR_getInt( charaindex,CHAR_Y ),				ITEM_getChar( itemindex, ITEM_UNIQUECODE),					ITEM_getChar( itemindex, ITEM_NAME),					ITEM_getInt( itemindex, ITEM_ID)			);		}		usefunc(charaindex, to_charaindex, haveitemindex);	}else{		char ansmsg[256];		strcpysafe( ansmsg, sizeof(ansmsg),					"什麽也没有发生。");		CHAR_talkToCli( charaindex, -1, ansmsg, CHAR_COLORWHITE );	}}BOOL CHAR_DropItemFXY( int charaindex, int itemcharaindex, int fl,							  int x, int y, int* objindex ){	int itemindex;	itemindex = CHAR_getItemIndex(charaindex,itemcharaindex);	if( ITEM_CHECKINDEX(itemindex) == FALSE )return -3;	if( MAP_walkAbleFromPoint( fl,x,y, FALSE ) == FALSE ){		return -2;	}	{		OBJECT  object;		for( object=MAP_getTopObj(fl,x,y) ; object; object = NEXT_OBJECT(object ) ){			int objindex = GET_OBJINDEX(object);			switch( OBJECT_getType(objindex) ){			case OBJTYPE_NOUSE:				break;			case OBJTYPE_ITEM:#ifdef _DROPSTAKENEW				if(ITEM_getInt(itemindex, ITEM_ID) == CASINOTOKENID)				{					int i = 0;					int dropflag = 0;					ITEM_Item *itm;					for(i = 0; i < arraysizeof(casinomap); i++){						if(CHAR_getInt(charaindex, CHAR_FLOOR) == casinomap[i].casinofl){							if(x == casinomap[i].casinox && y == casinomap[i].casinoy){								dropflag = 1;								break;							}						}					}					if(dropflag == 1){						if( (itm = ITEM_getItemPointer( itemindex)) == NULL ) return -1;							strcpysafe( itm->string[ITEM_WATCHFUNC].string,

⌨️ 快捷键说明

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