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

📄 item.cpp

📁 国内著名网络游戏dragon的客户端登陆用完整源码 配套一起上传的服务端部分可开服 无说明文档
💻 CPP
📖 第 1 页 / 共 3 页
字号:
					fread( &dx1,		sizeof( int ), 1, fp );
					fread( &dy1,		sizeof( int ), 1, fp );
					fread( &dx2,		sizeof( int ), 1, fp );
					fread( &dy2,		sizeof( int ), 1, fp );
					fread( &dx3,		sizeof( int ), 1, fp );
					fread( &dy3,		sizeof( int ), 1, fp );
					fread( &dx4,		sizeof( int ), 1, fp );
					fread( &dy4,		sizeof( int ), 1, fp );
					fread( &framecount, sizeof( int ), 1, fp );


					i->getable	  = getable;
					i->Anitype 	  = anitype;
					i->type		  = itemtype;
					i->dirno	  = dir;
					i->Where	  = where;
					i->Sorttype   = sorting;
					i->shadow	  = shadow;
					i->dx[0]	  = i->x + dx1 + i->offx, i->dy[0] = i->y + dy1 + i->offy;
					i->dx[1]	  = i->x + dx2 + i->offx, i->dy[1] = i->y + dy2 + i->offy;
					i->dx[2]	  = i->x + dx3 + i->offx, i->dy[2] = i->y + dy3 + i->offy;
					i->dx[3]	  = i->x + dx4 + i->offx, i->dy[3] = i->y + dy4 + i->offy;
					i->framecount = framecount;
					i->dsx[0] = 0; i->dsy[1] = 0; i->ddx[0] = 0; i->ddy[1] = 0;

					fread( i->dsx, sizeof( short),  ITEM_FRAME_MAX_, fp );
					fread( i->dsy, sizeof( short),  ITEM_FRAME_MAX_, fp );
					fread( i->ddx, sizeof( short),  ITEM_FRAME_MAX_, fp );
					fread( i->ddy, sizeof( short),  ITEM_FRAME_MAX_, fp );


					for( int kk = 0; kk < i->framecount ; kk ++)
					{	
						i->dsx[kk] += i->x ;
						i->dsy[kk] += i->y ;
						i->ddx[kk] += i->x ;
						i->ddy[kk] += i->y ;

						if( kk == 0 )	t = AddItemSprite( i->no, type, kk );
						else 			t = AddItemSprite( i->no * 100 + kk, type, kk );
						i->spr[kk] = &t->sp;
					}

					fclose(fp ); 
					return;
				}
			}

			fclose(fp );
			return;
		}
		else
		{
			sprintf( temp, "./object/%s/%s_toi2.txt", tempitemname, MapName );
			fp = Fopen( temp,"rt" );
			if( fp != NULL )
			{									
				fgets( temp, FILENAME_MAX, fp);
				fgets( temp, FILENAME_MAX, fp);
					
				fgetpos( fp, &pos );
				while( fgets( temp, FILENAME_MAX,fp ))
				{					
					
					sscanf( temp, "%d ", &itemno );
					if( itemno ==  i->no )
					{						
						fsetpos( fp, &pos );
						goto NEXT_;
					}					
					fgetpos( fp, &pos );
				}								
				fclose(fp);					
				return;								
	NEXT_:									
				//# 笼阑荐乐促 AnimationType Dir  嘛绰规过 嘛绰鉴辑 弊覆磊             DontBox         醚弊覆荐 
				//0    1          0           1      0         0      1    -20 0 0 -20  20 0  0 20        1      0
				fscanf( fp, "%d %d %d %d %d %d %d %d %d %d "
							  "%d %d %d %d %d %d %d %d %d %d ", 
						&no, 
						&getable, 
						&anitype,
						&itemtype,
						&dir,
						&where,
						&sorting,
						&shadow,
						&light, &lightx, &lighty,
						&dx1, &dy1,		&dx2, &dy2,		&dx3, &dy3,		&dx4, &dy4,
						&framecount );
							
					i->getable	  = getable;
					i->Anitype 	  = anitype;
					i->type		  = itemtype;
					i->dirno	  = dir;
					i->Where	  = where;
					i->Sorttype   = sorting;
					i->shadow	  = shadow;
					i->dx[0]	  = i->x + dx1 + i->offx, i->dy[0] = i->y + dy1 + i->offy;
					i->dx[1]	  = i->x + dx2 + i->offx, i->dy[1] = i->y + dy2 + i->offy;
					i->dx[2]	  = i->x + dx3 + i->offx, i->dy[2] = i->y + dy3 + i->offy;
					i->dx[3]	  = i->x + dx4 + i->offx, i->dy[3] = i->y + dy4 + i->offy;
					i->framecount = framecount;
					i->dsx[0] = 0; i->dsy[1] = 0; i->ddx[0] = 0; i->ddy[1] = 0;
					for( j = 0; j < i->framecount ; j ++)
					{
						fscanf( fp, "%d %d %d %d", &dsx, &dsy, &ddx, &ddy );
						i->dsx[j] = dsx + i->x ;
						i->dsy[j] = dsy + i->y ;
						i->ddx[j] = ddx + i->x ;
						i->ddy[j] = ddy + i->y ;
						
						if( j == 0 )
						{
							t = AddItemSprite( i->no, type, j );
						}
						else 
						{
							t = AddItemSprite( i->no * 100 + j, type, j );
						}

						i->spr[j] = &t->sp;
					}
				fclose(fp);
			}
		}
	}	
}		
		
		
void AddItemList( LPITEMGROUND i )
{		
	LPITEMGROUND t, temp; 
	int mx, my;
		
	if( i->no > 13000 )
	{
		mx = (i->x )/ TILE_SIZE;
		my = (i->y )/ TILE_SIZE;
	}
	else
	{
		mx = (i->x )/ TILE_SIZE;
		my = (i->y + 20)/ TILE_SIZE;
		i->y += 20;
	}

		
	if( g_Item == NULL )	 
	{	
		MemAlloc( g_Item, sizeof( ITEMGROUND ));
		g_Item->server_id = i->server_id;
		g_Item->no	  = i->no;
		g_Item->sx    = i->sx;
		g_Item->sy	  = i->sy;
		g_Item->offx  = i->offx;
		g_Item->offy  = i->offy;
		g_Item->x     = i->x; 
		g_Item->y     = i->y; 
		g_Item->mx    = i->x / TILE_SIZE;
		g_Item->my    = i->y / TILE_SIZE;

		g_Item->attr[0]	= i->attr[0];
		g_Item->attr[1]	= i->attr[1];
		g_Item->attr[2]	= i->attr[2];
		g_Item->attr[3]	= i->attr[3];
		g_Item->attr[4]	= i->attr[4];
		g_Item->attr[5]	= i->attr[5];

		LoadItem( g_Item );  

		g_Item->prev = NULL; 
		g_Item->next = NULL; 
	}	
	else
	{	
		t = NULL;
		MemAlloc( t, sizeof( ITEMGROUND ));
		t->server_id= i->server_id;
		t->no		= i->no;
		t->sx		= i->sx;
		t->sy		= i->sy;
		t->offx		= i->offx;
		t->offy		= i->offy;
		t->x		= i->x;
		t->y		= i->y;
		t->mx		= i->x / TILE_SIZE;
		t->my		= i->y / TILE_SIZE;
		
		t->attr[0]	= i->attr[0];
		t->attr[1]	= i->attr[1];
		t->attr[2]	= i->attr[2];
		t->attr[3]	= i->attr[3];
		t->attr[4]	= i->attr[4];
		t->attr[5]	= i->attr[5];


		LoadItem( t );
		temp = g_Item;
		temp->prev = t;
		t->next = temp;
		t->prev = NULL;
		g_Item = t;
	}	
		
	// Add等 Item俊 Animation沥府..
//-----------------------
		if( g_Item->attr[2] & IA2_FARM0 )	g_Item->Anitype = ITEMANIMATION_FARM0;
		if( g_Item->attr[2] & IA2_FARM1 )	g_Item->Anitype = ITEMANIMATION_FARM1;
		if( g_Item->attr[2] & IA2_FARM2 )	g_Item->Anitype = ITEMANIMATION_FARM2;
		if( g_Item->attr[2] & IA2_FARM3 )	g_Item->Anitype = ITEMANIMATION_FARM3;
		if( g_Item->attr[2] & IA2_FARM4 )	g_Item->Anitype = ITEMANIMATION_FARM4;
		if( g_Item->attr[2] & IA2_FARM5 )	g_Item->Anitype = ITEMANIMATION_FARM5;
		if( g_Item->attr[2] & IA2_FARM6 )	g_Item->Anitype = ITEMANIMATION_FARM6;
		if( g_Item->attr[2] & IA2_FARM7 )	g_Item->Anitype = ITEMANIMATION_FARM7;

		if( g_Item->attr[2] & IA2_FIRE  )	g_Item->Anitype = ITEMANIMATION_FIRE;
		
		if( g_Item->attr[ IATTR_ATTR] & IA2_BOX )
		{
			g_Item->type = ITEMTYPE_BOX;
			if( g_Item->attr[ IATTR_ATTR] & IA2_OPENED )	g_Item->Anitype = ITEMANIMATION_OPENED;
			else											g_Item->Anitype = ITEMANIMATION_CLOSED;
		}
		else if( g_Item->attr[ IATTR_ATTR] & IA2_DOOR )
		{
			g_Item->type = ITEMTYPE_DOOR;
			if( g_Item->attr[ IATTR_ATTR] & IA2_OPENED )	g_Item->Anitype = ITEMANIMATION_OPENED;
			else											g_Item->Anitype = ITEMANIMATION_CLOSED;
		}
		else if( g_Item->attr[ IATTR_ATTR] & IA2_TRAPED1 )	g_Item->curframe = rand()%4+1;
		else 
		{
			CItem *t = ItemUnit( g_Item->no / 1000, g_Item->no % 1000 );
			if( t )
			{
				if( t->GetMouse_MR_Effect() )
					g_Item->Anitype = ITEMANIMATION_REPEAT;
			}
		}




}		
		
		
		
void DeleteItemList( int server_id )
{		
	int i;
	LPITEMGROUND  t = g_Item;
			
	while( t != NULL )
	{		
		if( t->server_id == server_id )
		{	
			if( t == g_Item )
			{
				t = g_Item->next;
				for( i = 0 ; i < g_Item->framecount ; i ++)
					DeleteItemSprite( g_Item->no * 100 + i );
				
				MemFree( g_Item );
				g_Item = t;
				if( t != NULL )	g_Item->prev = NULL;
				return;
			}
			else 
			{
				if ( t->prev != NULL )
				{
					t->prev->next = t->next;
				}
				if( t->next != NULL )
				{
					t->next->prev = t->prev;
				}
				for( i = 0 ; i < t->framecount ; i ++)
					DeleteItemSprite( t->no * 100 + i );
				MemFree( t );
		
				return;
			}
		}	
		t = t->next;
	}		
}		
	
	
//	
LPITEMGROUND FindItemList( int server_id )
{	   	
	LPITEMGROUND t;
	t = g_Item;
	while( t != NULL )
	{	
		if( t->server_id == server_id )
		{
			return t;
		}
		t = t->next;
	}		
	return NULL;
}		
			
	
	
	
//	甘篮 例措谅钎...
LPITEMGROUND FindItemList( int x, int y )
{	   	
	LPITEMGROUND t;
	t = g_Item;
	while( t != NULL )
	{	
		if( BoxAndDotCrash( x - 16, y-16, 32, 32, t->x, t->y ) )
		{
			return t;
		}
		t = t->next;
	}		
	return NULL;
}		
	
void DestroyItemList( void )
{	
	LPITEMGROUND t;
	int i;
	t = g_Item;
	while( t != NULL )
	{	
		t = g_Item->next;
			for( i = 0 ; i < g_Item->framecount ; i ++)
		DeleteItemSprite( g_Item->no * 100 + i );
		MemFree( g_Item );
		g_Item = t;
	}		
		
	return;
}		
		
		
				
//---------------  Item Animation... 
	
	
void RecvItemAttrChange( t_item_attr_change *p )
{	
	LPITEMGROUND i = FindItemList( p->item_id );
	if( i == NULL ) return;
	int oldattr = i->attr[ p->array];
	int attr = p->attr;
	
	
 switch( p->array )
 {
	case IATTR_ATTR :
	{

		//		110       快府巩堪.wav
		//		111       快府巩摧澜.wav

		if( oldattr & IA2_DOOR )// 巩俊 包茄 加己 Check....
		{
			if( oldattr & IA2_OPENED ) // 凯啡栏搁..
			{
				if( ( attr & IA2_OPENED ) == 0 ) // 澜 摧栏鄂疙飞捞焙.
					i->Anitype = ITEMANIMATION_CLOSING;

				int distx=i->x-Hero->x;						// LTS SOUND
				int disty=i->y-Hero->y;
				PlayListAutoSounds( 141,distx,disty,0 );
			}
			else
			{
				if( (attr & IA2_OPENED) && (i->Anitype != ITEMANIMATION_OPENED) ) // 澜 凯扼绰 疙飞捞焙.
					i->Anitype = ITEMANIMATION_OPENNING;

				int distx=i->x-Hero->x;						// LTS SOUND
				int disty=i->y-Hero->y;
				PlayListAutoSounds( 140,distx,disty,0 );
			}
		}
		else
		if( oldattr & IA2_BOX )// Box俊 包茄 加己 Check..
		{
			if( oldattr & IA2_OPENED ) // 凯啡栏搁..
			{
				if( ( attr & IA2_OPENED ) == 0 ) // 澜 摧栏鄂疙飞捞焙.
					i->Anitype = ITEMANIMATION_CLOSING;
				int distx=i->x-Hero->x;						// LTS SOUND
				int disty=i->y-Hero->y;
				PlayListAutoSounds( 149,distx,disty,0 );

			}
			else
			{
				if( (attr & IA2_OPENED)  && (i->Anitype != ITEMANIMATION_OPENED) ) // 澜 凯扼绰 疙飞捞焙.
					i->Anitype = ITEMANIMATION_OPENNING;
				int distx=i->x-Hero->x;						// LTS SOUND
				int disty=i->y-Hero->y;
				PlayListAutoSounds( 148,distx,disty,0 );

			}
		}

		if( attr & IA2_FARM0 )	i->Anitype = ITEMANIMATION_FARM0;
		if( attr & IA2_FARM1 )	i->Anitype = ITEMANIMATION_FARM1;
		if( attr & IA2_FARM2 )	i->Anitype = ITEMANIMATION_FARM2;
		if( attr & IA2_FARM3 )	i->Anitype = ITEMANIMATION_FARM3;
		if( attr & IA2_FARM4 )	i->Anitype = ITEMANIMATION_FARM4;
		if( attr & IA2_FARM5 )	i->Anitype = ITEMANIMATION_FARM5;
		if( attr & IA2_FARM6 )	i->Anitype = ITEMANIMATION_FARM6;
		if( attr & IA2_FARM7 )	i->Anitype = ITEMANIMATION_FARM7;


		if( attr & IA2_FIRE  )	i->Anitype = ITEMANIMATION_FIRE;

		if( attr & IA2_TRAPED1  )		i->curframe = (rand()%4)+1;
		if( !(attr & IA2_TRAPED1)   )	i->curframe = 0;
	}
	break;

	case IATTR_DURATION :
		{
			break;
		}

 }

	i->attr[ p->array] = p->attr;
}	
	
void SendItemDoorOpenClose( LPITEMGROUND i, int openclose )
{
	t_packet p;

	p.h.header.type = CMD_ITEM_DOOR_OPEN_CLOSE;
	{
		p.u.item_door_open_close.item_id = i->server_id;
		p.u.item_door_open_close.openclose = openclose;
	}
	p.h.header.size = sizeof( t_item_door_open_close );

	QueuePacket( &p, 1 );
}



	
void ToggleItemAnimation( LPITEMGROUND i )
{		
	if( SysInfo.notconectserver )
	{
		switch( i->Anitype )
		{	
		case ITEMANIMATION_OPENED :		i->Anitype = ITEMANIMATION_CLOSING; 
			break;
		case ITEMANIMATION_CLOSED :		i->Anitype = ITEMANIMATION_OPENNING; 
			break;

⌨️ 快捷键说明

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