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

📄 char_item.c.bak

📁 石器时代8.0服务端完整源代码。可以直接编译
💻 BAK
📖 第 1 页 / 共 5 页
字号:
								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;	}}#ifdef _ITEM_PILENUMS	//andy_edit 2003/04/01void CHAR_SendDropItem_Stats( int charaindex, int itemindex, int itemcharaindex, int flg){	if( flg == 1 ){		CHAR_setItemIndex( charaindex, itemcharaindex , -1);	}	CHAR_sendItemDataOne( charaindex, itemcharaindex);	if( CHAR_complianceParameter( charaindex ) ){		CHAR_sendCToArroundCharacter( CHAR_getWorkInt( charaindex, CHAR_WORKOBJINDEX));	}	if( 0 <= itemcharaindex && itemcharaindex < CHAR_STARTITEMARRAY &&		CHAR_getInt( charaindex, CHAR_WHICHTYPE) == CHAR_TYPEPLAYER ){	//如果丢弃物为装备		if( ITEM_CHECKINDEX( itemindex) )			CHAR_sendItemDetachEvent( charaindex, itemindex );		CHAR_send_P_StatusString( charaindex,								  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 0 //#ifdef _ANGEL_SUMMON		if( ITEM_getInt( itemindex, ITEM_ID) == ANGELITEM ) {			print(" 卸下使者信物 ");			CHAR_setWorkInt( index, CHAR_WORKANGELMODE, FALSE);			CHAR_sendAngelMark( CHAR_getWorkInt( charaindex, CHAR_WORKOBJINDEX), 0);		}#endif	}}#ifdef _DROPSTAKENEWvoid CHAR_DropStakeByDropItem( int charaindex, int itemcharaindex, int itemindex, int fl, int x, int y){	int j, k, casinoflag = 0, dropflag;	char tmpbuf[256];	dropflag = CHAR_getWorkInt( charaindex, CHAR_WORKSTAKEFLAG);	if( dropflag >= MAXSTAKENUM){		snprintf( tmpbuf, sizeof( tmpbuf), "你已经下注五次了,无法再下注!");		CHAR_talkToCli(charaindex, -1, tmpbuf, CHAR_COLORYELLOW);		return;	}	for (j = 0; j < arraysizeof( casinomap); j++){		if( CHAR_getInt( charaindex, CHAR_FLOOR) != casinomap[j].casinofl ) continue;		if( x != casinomap[j].casinox || y != casinomap[j].casinoy ) continue;		if( casinomap[j].dropflag == 0 ){			CHAR_talkToCli( charaindex, -1, "现在无法下注!", CHAR_COLORYELLOW);			return;		}else{			int objindex;			objindex = CHAR_DropItemAbsolute( itemindex, fl, x, y, FALSE );			if( objindex == -1 ) return;			ITEM_setInt( itemindex, ITEM_PUTTIME, NowTime.tv_sec+30*60);			CHAR_sendWatchEvent( objindex, CHAR_ACTSTAND, NULL, 0, TRUE);			casinoflag = 1;			snprintf(tmpbuf, sizeof(tmpbuf), "你在 %s 下注了一张彩券", casinomap[j].casinoinfo);			for(k = 0; k < MAXSTAKENUM; k++){//下注设定				if(CHAR_getWorkInt(charaindex, CHAR_WORKSTAKETYPE1 + k) != 0) continue;				CHAR_setWorkInt(charaindex, CHAR_WORKSTAKETYPE1 + k, casinomap[j].casinotype);				dropflag++;				break;			}			CHAR_talkToCli(charaindex, -1, tmpbuf, CHAR_COLORYELLOW);#ifdef _FIX_GAMBLENUM			if (dropflag <= MAXSTAKENUM){ //做扣点的动作				int nAcc = CHAR_getInt(charaindex, CHAR_GAMBLENUM);                                												nAcc -= casinomap[j].accumulation;				CHAR_setInt(charaindex, CHAR_GAMBLENUM, nAcc);											}#endif			dropflag = ( dropflag >= MAXSTAKENUM )?MAXSTAKENUM:dropflag;			CHAR_setWorkInt(charaindex, CHAR_WORKSTAKEFLAG, dropflag);			break;		}	}	if( casinoflag == 0) return;		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				"StakeDrop(丢出彩券)",				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)				);	CHAR_SendDropItem_Stats( charaindex, itemindex, itemcharaindex, 1);}#endifBOOL CHAR_FindAroundUsabilitySpace( int charaindex, int itemindex, int *fl, int *x, int *y){	int dropx, dropy, i;	BOOL Find = FALSE;	int myfl = CHAR_getInt( charaindex, CHAR_FLOOR);	for( i  = 0 ; i < 8 ; i  ++ ){		OBJECT  object;		Find = FALSE;		dropx = CHAR_getInt( charaindex, CHAR_X) + CHAR_getDX( CHAR_getInt( charaindex, CHAR_DIR) + i);		dropy = CHAR_getInt( charaindex, CHAR_Y) + CHAR_getDY( CHAR_getInt( charaindex, CHAR_DIR) + i);		if( MAP_walkAbleFromPoint( myfl, dropx, dropy, FALSE ) == FALSE ) continue;		for( object = MAP_getTopObj( myfl, dropx, dropy) ; object ; object = NEXT_OBJECT(object ) ){			int objindex = GET_OBJINDEX(object);			if( !CHECKOBJECTUSE( objindex)) continue;			if( OBJECT_getType( objindex) == 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 FALSE;			}else{				Find = TRUE;				break;			}		}		if( Find == FALSE ){			*fl = myfl;			*x  = dropx;			*y  = dropy;			return TRUE;		}	}	return FALSE;}void CHAR_DropItem( int charaindex,  int itemcharaindex ){	int itemindex, fl, x, y, ret, objindex, beDropOne = 1;	if( !CHAR_CHECKINDEX( charaindex ) ) return;	if( CHAR_getWorkInt( charaindex, CHAR_WORKBATTLEMODE ) != BATTLE_CHARMODE_NONE ){		CHAR_talkToCli( charaindex, -1, "战斗状态中无法丢道具装备。", CHAR_COLORYELLOW );		return;	}#ifdef _AVID_TRADETRYBUG  //丢道具装备	if( CHAR_getWorkInt(charaindex, CHAR_WORKTRADEMODE) != CHAR_TRADE_FREE){		CHAR_talkToCli( charaindex, -1, "交易状态中无法丢道具装备。", CHAR_COLORYELLOW );		return;	}#endif	itemindex = CHAR_getItemIndex( charaindex, itemcharaindex);	if( !ITEM_CHECKINDEX( itemindex)) return;	if( ITEM_getInt( itemindex, ITEM_ID) == CASINOTOKENID &&		( CHAR_getInt( charaindex, CHAR_FLOOR ) == 7008 ||		  CHAR_getInt( charaindex, CHAR_FLOOR ) == 7005 ||		  CHAR_getInt( charaindex, CHAR_FLOOR ) == 7003 ) ){		int dropx, dropy, dropfl;		dropfl = CHAR_getInt( charaindex, CHAR_FLOOR);		dropx = CHAR_getInt( charaindex, CHAR_X) + CHAR_getDX( CHAR_getInt( charaindex, CHAR_DIR));		dropy = CHAR_getInt( charaindex, CHAR_Y) + CHAR_getDY( CHAR_getInt( charaindex, CHAR_DIR));		CHAR_DropStakeByDropItem( charaindex, itemcharaindex, itemindex, dropfl, dropx, dropy);		return;	}	//找出周围空间	if( CHAR_FindAroundUsabilitySpace( charaindex, itemindex, &fl, &x, &y) == FALSE ){		CHAR_talkToCli( charaindex, -1, "周围的地面已经满了。", CHAR_COLORYELLOW );		return;	}	#ifdef _ITEM_PILENUMS	if( ITEM_getInt( itemindex, ITEM_CANBEPILE) == 1 &&		ITEM_getInt( itemindex, ITEM_USEPILENUMS) > 1 ){		int ret;		int nums = ITEM_getInt( itemindex, ITEM_USEPILENUMS);		ret = ITEM_makeItemAndRegist( ITEM_getInt( itemindex, ITEM_ID) );		if( !ITEM_CHECKINDEX( ret)) return;		ITEM_setInt( itemindex, ITEM_USEPILENUMS, nums -1 );		itemindex = ret;		beDropOne = 0;	}#endif	//找到空间	ret = ITEM_eventDrop( itemindex, charaindex, itemcharaindex );	if( ret == 1 ){	//-1 物品不存在 1 消失 0 一般物品		CHAR_SendDropItem_Stats( charaindex, itemindex, itemcharaindex, beDropOne);		return;	}else {		objindex = CHAR_DropItemAbsolute( itemindex, fl, x, y, FALSE );		if( objindex == -1 ) return;		ITEM_setInt( itemindex, ITEM_PUTTIME, NowTime.tv_sec);		{			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)			);		}		CHAR_sendWatchEvent( objindex, CHAR_ACTSTAND, NULL, 0, TRUE);	}	CHAR_SendDropItem_Stats( charaindex, itemindex, itemcharaindex, beDropOne);}#elsevoid 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;						}					}				}			}			if(casinodropflag == 0){#endif		if( count_item > 80 || count_chara > 80 ) {			CHAR_talkToCli( charaindex, -1, "这里的物品已经太多了,不能再丢了。", CHAR_COLORYELLOW );			return;		}#ifdef _DROPSTAKENEW			}		}#endif	}#endif	for( i  = 1 ; i < 8 ; i  ++ ){		dirx[i] = CHAR_getDX(CHAR_getInt(charaindex,CHAR_DIR) + i);		diry[i] = CHAR_getDY(CHAR_getInt(charaindex,CHAR_DIR) + i);	}	dirx[0] = CHAR_getDX(CHAR_getInt(charaindex,CHAR_DIR));	diry[0] = CHAR_getDY(CHAR_getInt(charaindex,CHAR_DIR));	dirx[8] = 0;	diry[8] = 0;	floor = CHAR_getInt( charaindex,CHAR_FLOOR );	{		int     ret;		if( 0 <= itemcharaindex && itemcharaindex < CHAR_STARTITEMARRAY ){	//如果丢弃物为装备			CHAR_sendItemDetachEvent( charaindex, itemindex );		}		ret = ITEM_eventDrop( itemindex, charaindex, itemcharaindex );		if( ret == 1 ){	//-1 物品不存在 1 消失 0 一般物品			itemindex = -1;			goto END;		}else if( ret == -1 ){			print( "%s:%d err\n", __FILE__,__LINE__);			return;		}else{			;		}	}#ifdef _MARKET_TRADE	{		int user_floor = CHAR_getInt( charaindex, CHAR_FLOOR);		int item_x = CHAR_getInt( charaindex, CHAR_X)+dirx[0];		int item_y = CHAR_getInt( charaindex, CHAR_Y)+diry[0];		if( MAP_TRADEDROP( charaindex, itemindex, user_floor, item_x, item_y) == TRUE )	{				return;		}	}#endif	droped = 0;	for( i = 0 ; i < 9 ; i ++ ){		int x=CHAR_getInt(charaindex,CHAR_X)+dirx[i];		int y=CHAR_getInt(charaindex,CHAR_Y)+diry[i];#ifdef _DROPSTAKENEW		// 判断物品是否为彩券		if(ITEM_getInt(itemindex, ITEM_ID) == CASINOTOKENID){			int j = 0, k = 0;			int bdropstake = 0;			int casinoflag = 0;			for (j = 0; j < arraysizeof(casinomap); j++){				if (CHAR_getInt(charaindex, CHAR_FLOOR) == casinomap[j].casinofl){					if (x == casinomap[j].casinox && y == casinomap[j].casinoy){						char tmpbuf[256];						int dropflag = CHAR_getWorkInt(charaindex, CHAR_WORKSTAKEFLAG);						casinoflag = 1;						if(casinomap[j].dropflag == 0){

⌨️ 快捷键说明

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