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

📄 char_item.c

📁 石器时代2.0完整版源代码.已经加入新功能. 在REDHAT9下GCC3.4编译成功.
💻 C
📖 第 1 页 / 共 5 页
字号:
		CHAR_setItemIndex(index,toindex,fromid);		CHAR_setItemIndex(index,fromindex,toid);		if( toid != -1 ) {			CHAR_sendItemDetachEvent( index, toid );		}		CHAR_sendItemAttachEvent( index, fromid );		CHAR_sendSIToCli( index, fromindex,toindex );	}else {		CANNOTEQUIP;		return FALSE;	}	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);		return TRUE;	}	return CHAR_moveItemFromItemBoxToEquip(index, toindex,fromindex);}static BOOL CHAR_moveItemFromItemBoxToItemBox( 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);	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( !ITEM_CHECKINDEX(itemindex) ){//		print( "ANDY itemindex=%d err\n", itemindex);		return;	}	if( CHAR_getFlg( charaindex, CHAR_ISDIE ) ){		print( "ANDY charaindex=%d is CHAR_ISDIE err\n", charaindex);		return;	}	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,								sizeof(itm->string[ITEM_WATCHFUNC].string), "ITEM_DeleteTimeWatched" );						break;					}else{						return -1;					}				}#endif			case OBJTYPE_GOLD:				{				return -1;				}			case OBJTYPE_CHARA:			{				typedef BOOL (*ITEMPUTFUNC)(int,int);				ITEMPUTFUNC ipfunc;				ipfunc = (ITEMPUTFUNC)CHAR_getFunctionPointer(					OBJECT_getIndex(objindex),CHAR_ITEMPUTFUNC) ;				if( ipfunc && ipfunc(OBJECT_getIndex(objindex),									 itemindex) == TRUE)					return -3;				break;			}			default:				break;			}		}		*objindex = CHAR_DropItemAbsolute( itemindex,fl,x,y, FALSE );		if( *objindex == -1 )			return -3;		{			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				"Drop(丢出道具)",			   	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)			);		}		return 0;	}}void CHAR_DropItem( int charaindex,  int itemcharaindex ){	int dirx[9],diry[9];	int i, j;	int floor, objindex=-1;	int droped =0;	int count_item =0, count_chara =0;	int fl, x, y;	int itemindex = CHAR_getItemIndex(charaindex,itemcharaindex);	if( !CHAR_CHECKINDEX( charaindex ) ) return;	if( !ITEM_CHECKINDEX( itemindex) ) return;#ifdef _AVID_TRADETRYBUG  //丢道具装备	if( CHAR_getWorkInt(charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE){		CHAR_talkToCli( charaindex, -1, "交易状态中无法丢道具装备。", CHAR_COLORYELLOW );		return;	}#endif#ifdef _DROPCHECK2	fl = CHAR_getInt( charaindex, CHAR_FLOOR);	x = CHAR_getInt( charaindex, CHAR_X);	y = CHAR_getInt( charaindex, CHAR_Y);	for( i = x-CHAR_DEFAULTSEESIZ/2 ; i <= x+CHAR_DEFAULTSEESIZ/2 ; i++ ){		for( j = y-CHAR_DEFAULTSEESIZ/2 ; j <= y+CHAR_DEFAULTSEESIZ/2 ; j ++ ){		OBJECT  object;		for( object = MAP_getTopObj(fl,i,j); object ; object = NEXT_OBJECT(object ) ) {			int objindex = GET_OBJINDEX(object);			if( OBJECT_getType(objindex) == OBJTYPE_NOUSE ) continue;			if( OBJECT_getType(objindex) == OBJTYPE_ITEM || OBJECT_getType(objindex) == OBJTYPE_GOLD ) {				count_item++;			}			if( OBJECT_getType(objindex) == OBJTYPE_CHARA ) {				count_chara++;			}		}	}#ifdef _DROPSTAKENEW		if(ITEM_getInt(itemindex, ITEM_ID) == CASINOTOKENID){			int k = 0;			int casinodropflag = 0;			for(k = 0; k < arraysizeof(casinomap); k++){				if(fl == casinomap[k].casinofl){					if(x >= casinomap[k].casinox - 1 && x <= casinomap[k].casinox + 1){						if(y >= casinomap[k].casinoy - 1 && y <= casinomap[k].casinoy + 1){							casinodropflag = 1;							break;						}					}				}

⌨️ 快捷键说明

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