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

📄 map.cpp

📁 国内著名网络游戏dragon的客户端登陆用完整源码 配套一起上传的服务端部分可开服 无说明文档
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	t |= ( SMenu[ MN_PARTY			].bActive ==TRUE ) << 10;
	t |= ( SMenu[ MN_TACTICS		].bActive ==TRUE ) << 11;

	for( int i=0; i<sm_max; i++ )
		if( SMenu[sm[i]].bActive ) 
		{
			t |= 1 << 12;
			guild=1;
			break;
		}
		else t|= 0 << 12;
	
	if( flag == 0 && changed == t )  return;
	changed = t;
	
	if(	SMenu[ MN_ITEM          ].bActive ==TRUE ||
		SMenu[ MN_PARTY			].bActive ==TRUE ||
		guild )		rc = 1;
	
	if(  SMenu[ MN_TACTICS		].bActive ==TRUE ||
		 SMenu[ MN_ARIGEMENT	].bActive ==TRUE ||
		 SMenu[ MN_ABILITY		].bActive ==TRUE ||
		 SMenu[ MN_STATUS		].bActive ==TRUE )		lc = 2;

	POINT center_Tile;
	center_Tile.x = (GAME_SCREEN_XSIZE/32/2);
	center_Tile.y = (GAME_SCREEN_YSIZE/32/2);
	switch( rc + lc )
	{
	case 3 :
	case 0 :	g_Map.tox = Hero->position.x - center_Tile.x;
				g_Map.toy = Hero->position.y - center_Tile.y;

				if( g_Map.tox < 0 ) g_Map.tox = 0;
				if( g_Map.toy < 0 ) g_Map.toy = 0;

				SetView( Hero, Hero->sight );
			return;
	case 1 : 	g_Map.tox = Hero->position.x -  center_Tile.x/2;
				g_Map.toy = Hero->position.y -  center_Tile.y;

				if( g_Map.tox < 0 ) g_Map.tox = 0;
				if( g_Map.toy < 0 ) g_Map.toy = 0;

				SetView( Hero, Hero->sight );
			return;
	case 2 :	g_Map.tox = Hero->position.x - ((center_Tile.x*2) - (center_Tile.x/2));
				g_Map.toy = Hero->position.y -  center_Tile.y;

				if( g_Map.tox < 0 ) g_Map.tox = 0;
				if( g_Map.toy < 0 ) g_Map.toy = 0;

				SetView( Hero, Hero->sight );
			return;


	
	default : return;
	}
}




//////////////////////// 0625 lkh 荐沥 //////////////////////////
void StartSetView( LPCHARACTER ch )
{	
	g_Map.tox = g_Map.x = ch->position.x - (GAME_SCREEN_XSIZE/32/2);
	g_Map.toy = g_Map.y = ch->position.y - (GAME_SCREEN_YSIZE/32/2);
				
	SetView( ch, ch->sight );
}



int MoveScreen( DIRECTION direction )
{	
	int oldtox, oldtoy;

	oldtox = g_Map.tox;
	oldtoy = g_Map.toy;

	switch ( direction )
	{
	case	DIRECTION_UP:		if ( g_Map.toy > LimitMapSy  )	g_Map.toy--;		break;
	case	DIRECTION_DOWN:		if ( g_Map.toy < LimitMapEy  )	g_Map.toy++;		break;
	case	DIRECTION_LEFT:		if ( g_Map.tox > LimitMapSx  )	g_Map.tox--;		break;
	case	DIRECTION_RIGHT:	if ( g_Map.tox < LimitMapEx  )	g_Map.tox++;		break;
	}

	if( oldtox != g_Map.tox || oldtoy != g_Map.toy )
	{
		return 1;
	}
	
	return 0;
}					

void changemapobjectname( char *oldname, char *newname )
{	
	strcpy( newname, oldname );
	CharUpper( newname );

	if( strcmp( "ICE-W02", newname ) == 0 )			strcpy( newname, "ICE-W01" );
	else if(  strcmp( "ICE-W03", newname )  == 0 )	strcpy( newname, "ICE-W01" );
	else if(  strcmp( "MANDUN2", newname )  == 0 )	strcpy( newname, "MANDUN1" );
	else if(  strcmp( "MANDUN3", newname )  == 0 )	strcpy( newname, "MANDUN1" );
	else if(  strcmp( "FIREDUN2", newname ) == 0 )	strcpy( newname, "FIREDUN1");
	else if(  strcmp( "FIREDUN3", newname ) == 0 )	strcpy( newname, "FIREDUN1");
	else if(  strcmp( "HU_VM", newname )    == 0 )	strcpy( newname, "SOURCE" );
	else if(  strcmp( "GRAY", newname )     == 0 )	strcpy( newname, "SOURCE" );

#ifdef _MAPOBJECT_DIRECTORY_CHANGE_

			 if( strcmp( "MA-IN", newname ) == 0 )				strcpy( newname, "0" );	
		else if(  strcmp( "SOURCE", newname ) == 0 )			strcpy( newname, "6" );
		else if(  strcmp( "K_SUNG2", newname ) == 0 )			strcpy( newname, "7" );
		else if(  strcmp( "FIREDUN1", newname ) == 0 )			strcpy( newname, "4" );
		else if(  strcmp( "ICE-W01", newname ) == 0 )			strcpy( newname, "3" );
		else if(  strcmp( "MANDUN1", newname ) == 0 )			strcpy( newname, "5" );
		else if(  strcmp( "SUNG_TILE_00", newname ) == 0 )		strcpy( newname, "2" );

		else													strcpy( newname, "0" );

#endif 

}		

void changesourcename( char *oldname, char *newname )
{		
	strcpy( newname, oldname );
	CharUpper( newname );
		
	if( strcmp( "ICE-W02", newname ) == 0 )			strcpy( newname, "ICE-W01" );
	else if(  strcmp( "ICE-W03", newname ) == 0 )	strcpy( newname, "ICE-W01" );
	else if(  strcmp( "MANDUN2", newname ) == 0 )	strcpy( newname, "MANDUN1" );
	else if(  strcmp( "MANDUN3", newname ) == 0 )	strcpy( newname, "MANDUN1" );
	else if(  strcmp( "FIREDUN2", newname ) == 0 )	strcpy( newname, "FIREDUN1" );
	else if(  strcmp( "FIREDUN3", newname ) == 0 )	strcpy( newname, "FIREDUN1" );
}		


/*
void LoadSmallMap( char *filename )
{
	FILE *fp;
	char temp[ FILENAME_MAX];
	Spr *s;

	switch( MapNumber )
	{
	case 0 :	break;
	default :	return;
	}

	sprintf( temp, "./map/%s.sml", filename );
	fp = Fopen( temp, "rb" );
	if( fp )
	{	
		s = &g_Map.sp;
		fread( &s->xl, sizeof( short ), 1, fp);
		fread( &s->yl, sizeof( short ), 1, fp);
		fread( &s->ox, sizeof( short ), 1, fp);
		fread( &s->oy, sizeof( short ), 1, fp);
//		s->ox = s->oy = 0;
		fread( &s->size, sizeof( unsigned int ), 1, fp);
		s->img = NULL;
		MemAlloc( s->img, s->size );
		fread( s->img, s->size, 1, fp );
		convert565to555( s );
		fclose(fp);
	}	
}*/


		
void LoadMapSource( char *filename )
{			
	char temp[ FILENAME_MAX];
	short no;
	int i;
	Spr *s;
	DWORD sysfilelength, size;
	FILE *fp;
	DWORD nOff = 0;
	char tempsource[ FILENAME_MAX];
		
	changesourcename( filename, tempsource );
		
	sprintf( temp, "./map/%s.sou", tempsource );
	fp = Fopen( temp, "rb" );
	if( fp == NULL )
	{
		return; 
	}
	fread( &no, 2,1, fp);
	fseek( fp, no * 4, SEEK_CUR );  // 坷橇悸 胶诺
	sysfilelength = _filelength( _fileno( fp) ) - no * 4 * 2 - 2;
		
	TotalTileNo = no;
	MemAlloc( SouBuf, sysfilelength );



		
	for( i = 0 ; i < no ; i++)
	{	
		fread( &size, 4,1, fp);
		s = &Sou[i];
		
		fread( &s->xl, sizeof( short ), 1, fp);
		fread( &s->yl, sizeof( short ), 1, fp);
		
		if( s->xl == -1 )
		{
			s->size = TILE_SIZE * TILE_SIZE * 2;
			s->ox = 0;
			s->oy = 0;
			fread( SouBuf + nOff, s->size,1 ,fp);
			s->img = (char *)SouBuf + nOff;
			convert565to555RawTile( s->img );
		}
		else
		{
			fread( &s->ox,	sizeof( short ), 1, fp);
			fread( &s->oy,	sizeof( short ), 1, fp);
			fread( &s->size, sizeof( unsigned int ), 1, fp);
			fread( SouBuf + nOff, s->size,1 ,fp);
			s->img = (char *)SouBuf + nOff;
			convert565to555( s );
		}
		
		nOff += size;
		if( (i%100) == 0 ) HandleRunning(&connections );
	}	
	fclose(fp);
		
	HandleRunning( &connections);

}			
		
void FreeMapSource( void )
{														
	MemFree( g_Map.sp.img );												
	MemFree( SouBuf );	
	
	for( int i = 0 ; i < 3600 ; i ++)
	{
		memset( &Sou[i], 0, sizeof( Spr ) );
	}
}																			
	
	
//#define MAX_SOURCE_NO_			10
#define MAX_SOURCE_NO_			11	// 031013 kyo 1.3
	
char mapsourcename[ MAX_SOURCE_NO_][ 20]=
	{ "MA-IN","K_SUNG2","MANDUN1","FIREDUN1","GRAY","SUNG_TILE_00","HU_VM","ICE-W01","SOURCE", "10", "11" };// 031013 kyo 1.3
	
typedef struct 
{
	char sourcename[ 30];
	int  size;
}t_sourcesize;

/////////////////////////////////////////////////////////////////////////////

int ReturnSizeOfSource_bin( char * source2name )
{
	int totalsize = 0;
	int s;

	CharUpper( source2name );

	FILE *fp = Fopen( "./data/sizeofsou2.bin", "rb" );
	if( fp == NULL ) return 0;

	t_sourcesize sousize;
	
	while( 1 )
	{
		s = fread( &sousize, sizeof( t_sourcesize ), 1, fp );
		if( s < 1 ) break;

		if( strcmp( source2name, sousize.sourcename ) == 0 ) { totalsize = sousize.size; break; }
	}
	
	fclose(fp);
	
	return totalsize;
}	
	
void MakeSizeofSOU2( void )
{	
	FILE *fp;
	t_sourcesize writesousize;
	char temp[ FILENAME_MAX];
	int i;
	int size;
	
	if( SysInfo.makesou2size == 0 ) return;
	
	fp = Fopen( "./data/sizeofsou2.bin", "wb" );
	if( fp == NULL ) return;
	
	for( i = 0 ; i < MAX_MAP_ ; i ++)
	{
		sprintf( temp, "./map/%s.sou2", MapInfo[i].mapfile );
		CharUpper( temp );
		size = ReturnSizeOfSource2( temp );
	
		strcpy( writesousize.sourcename, temp );
		writesousize.size = size;
		fwrite( &writesousize, sizeof( t_sourcesize ), 1, fp );
		JustMsg( lan->OutputMessage(6,18), i+1, MAX_MAP_, temp, size );//010216 lsw
	}
	
	fclose(fp);
}	
	

DWORD ReturnSizeOfSource2( char *source2name )
{	
	char tempsourcename[FILENAME_MAX];
	FILE *sou2fp;
	FILE *fp[ MAX_SOURCE_NO_];
	SOU2 sou2;
	DWORD totalsize = 0, size = 0;
	DWORD Off;
	
	sou2fp = Fopen( source2name, "rb" );
	if( sou2fp == NULL ) 
	{
		return 0;
	}
	
	for( int i = 0 ; i < MAX_SOURCE_NO_ ; i ++)	
	{																
		sprintf( tempsourcename, "./Map/%s.sou", mapsourcename[ i] );
		fp[i] = Fopen( tempsourcename, "rb" );
	}
	
	DWORD fs;
	DWORD no;
	
	fread( &fs, 4,1, sou2fp );
	fread( &no, 4,1, sou2fp );
	fseek( sou2fp, 6, SEEK_CUR );
	
	for( i = 0 ; i < no ; i++)
	{	
		short int tt,ts;
	
		fread( &tt,  sizeof( short int ), 1, sou2fp );	
		fread( &ts,  sizeof( short int ), 1, sou2fp );	
	
		sou2.tile_no = tt;
		sou2.source_no = ts-1;
	
		int source = sou2.source_no;
		int tile =   sou2.tile_no;
	
//		_ASSERT(  0 <= sou2.tile_no && sou2.tile_no < 3600 );					
//		_ASSERT(  0 <= sou2.source_no && sou2.source_no < MAX_SOURCE_NO_ );
	
		if(  0 <= sou2.tile_no && sou2.tile_no < 3600 ){}else continue;
		if(  0 <= sou2.source_no && sou2.source_no < MAX_SOURCE_NO_ ){}else continue;
	
		fseek(fp[source],	4 * tile + 2, SEEK_SET);
		fread( &Off, sizeof( DWORD ), 1, fp[ source] );
		fseek(fp[source], Off, SEEK_SET);
	
		fread( &size, sizeof( DWORD ), 1, fp[ source] );
		
		totalsize += size;

		
	}	
		
	fclose( sou2fp );
	for( i = 0 ; i < MAX_SOURCE_NO_ ; i ++)
		if( fp[ i] )
		{
			fclose( fp[i] );
		}
	
	return totalsize;
}	
	
void LoadMapSource2( char *mapname )
{	
	char  temp[ FILENAME_MAX];															
	DWORD no;																	
	int   i;																								
	Spr  *s;																				
	DWORD size;												
	FILE *fp[ MAX_SOURCE_NO_], *sou2fp;
	DWORD nOff = 0;																							
	char  tempsourcename[ FILENAME_MAX];											
	SOU2  sou2;													
	DWORD filesize;
	
	sprintf( temp, "./map/%s.sou2", mapname );
	CharUpper( temp );
	sou2fp = Fopen( temp, "rb" );
	if( sou2fp == NULL )
	{
		LoadMapSource( mapname );
		return;
	}
	
	for( i = 0 ; i < MAX_SOURCE_NO_ ; i ++)	
	{
		sprintf( tempsourcename, "./Map/%s.sou", mapsourcename[ i] );
		fp[i] = Fopen( tempsourcename, "rb" );
	}
	
	//filesize = ReturnSizeOfSource_bin( temp );
	//if( filesize == 0 )	
	filesize = ReturnSizeOfSource2( temp );
		
	DWORD fs;
	DWORD offset = 0;
	
	fread( &fs, 4,1, sou2fp );
	fread( &no, 4,1, sou2fp );
	fseek( sou2fp, 6, SEEK_CUR );

	MemAlloc( SouBuf, filesize );
																							
	for( i = 0 ;  i < no  ; i ++ )											
	{				
		short int tt,ts;
	
		fread( &tt,  sizeof( short int ), 1, sou2fp );	
		fread( &ts,  sizeof( short int ), 1, sou2fp );	

		sou2.tile_no = tt;
		sou2.source_no = ts-1;

//		_ASSERT(  0 <= sou2.tile_no && sou2.tile_no < 3600 );
//		_ASSERT(  0 <= sou2.source_no && sou2.source_no < MAX_SOURCE_NO_ );
		if(  0 <= sou2.tile_no && sou2.tile_no < 3600 ){}else { Sou[i].xl = 0; Sou[i].img = NULL; continue; }
		if(  0 <= sou2.source_no && sou2.source_no < MAX_SOURCE_NO_ ){}else { Sou[i].xl = 0; Sou[i].img = NULL; continue; }

		int source = sou2.source_no;
		int tile   = sou2.tile_no;

		if( tile == 0 ) continue;

		fseek(fp[source], 4 * tile + 2, SEEK_SET);
		fread( &offset, sizeof( DWORD ), 1, fp[ source] );
		fseek(fp[source], offset, SEEK_SET);

		fread( &size, sizeof( DWORD ), 1, fp[ source] );
		s = &Sou[i];

		fread( &s->xl, sizeof( short ), 1, fp[ source]);
		fread( &s->yl, sizeof( short ), 1, fp[ source]);

		if( s->xl == -1 )
		{
			s->size = TILE_SIZE * TILE_SIZE * 2;
			s->ox = 0;
			s->oy = 0;
			fread( SouBuf + nOff, s->size,1 ,fp[ source]);
			s->img = (char *)SouBuf + nOff;
			convert565to555RawTile( s->img );
		}
		else
		{
			fread( &s->ox,	sizeof( short ), 1, fp[ source]);
			fread( &s->oy,	sizeof( short ), 1, fp[ source]);
			fread( &s->size, sizeof( unsigned int ), 1, fp[ source]);
			fread( SouBuf + nOff, s->size,1 ,fp[ source]);
			s->img = (char *)SouBuf + nOff;	
			convert565to555( s );
		}

		nOff += size;

		if( (i%100) == 0 ) HandleRunning(&connections );
	}
	TotalTileNo = i;
	
	fclose(sou2fp);

	for( i = 0 ; i < MAX_SOURCE_NO_ ; i ++)	
	{
		if( fp[i] ) fclose( fp[i] );
	}
}		
		
		
void FreeMapSource2( void )
{		
	MemFree( g_Map.sp.img );
	MemFree( SouBuf );
}		


/////////////////////////////////////////////////////////////////////////////


int ReturnEventNo( int mx, int my )
{
	LPEVENTLIST	lpEventList;

	if( TileMap[ mx][ my ].attr_map )
	{
		lpEventList = FindEventList( &g_EventListHeaderMap, ( WORD )mx, ( WORD )my );
		if( lpEventList == NULL ) return -1;
		return lpEventList->index;
	}

	return -1;
}

⌨️ 快捷键说明

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