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

📄 horse.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
				s->yl = 0;	
				s->size = 0;
				s->img = NULL;
				continue;	
			}				
			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);
			fread( &(s->size),	sizeof( unsigned int ), 1, fp);
			
			if( nOff + s->size >= sprfilelength ) 
			{						
				JustMsg( "%s File Error !!",tempFileName);
				ExitApplication(EA_LOAD_HORSE_SADDEL_SPR_DATA_SUB);
			}						
			fread( HorseSaddlePicBuffer[SpriteKind] + nOff, s->size, 1, fp);
			s->img = HorseSaddlePicBuffer[SpriteKind] + nOff;
			
			convert565to555_LoadSprite( s );
			
			nOff += size;		
		}
	}		
	fclose(fp);	
	return TRUE;
}

int cHorseRider::LoadHorseGradeSprite(int HorseKind,int GradeKind)
{
	FILE *fp;
	short no;
	DWORD sprfilelength, size;
	DWORD nOff = 0;
	int   i,j;
	Spr*  s;
	int length;
	char tempFileName[MAX_PATH];

	if( HorseGradePicBuffer[HorseKind][GradeKind]!= NULL )
	{
		return FALSE;
	}

	sprintf(tempFileName,"./char/HGR%02d%03d.spr",HorseKind,GradeKind);
	
	fp=Fopen(tempFileName,"rb" );
	if (fp==NULL)
	{
		return FALSE;
	}
			
	fread( &no, 2,1, fp);
	fseek( fp, no * 4, SEEK_CUR ); 
	length = sprfilelength = _filelength( _fileno( fp) ) - no * 4 * 2 - 2;

	MemAlloc(  HorseGradePicBuffer[HorseKind][GradeKind], sprfilelength );
	for (i=0;i<8;i++)
	{			
		for (j=0;j<75;j++)
		{
			s = &HorseGradePic[HorseKind][GradeKind][i][j];
			fread( &size, 4,1, fp);
			if( size== 0 )	
			{				
				s->xl = 0;	
				s->yl = 0;	
				s->size = 0;
				s->img = NULL;
				continue;	
			}				
			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);
			fread( &(s->size),	sizeof( unsigned int ), 1, fp);
			
			if( nOff + s->size >= sprfilelength ) 
			{						
				JustMsg( "%s File Error !!",tempFileName);
				ExitApplication(EA_LOAD_HORSE_GRADE_SPR_DATA_SUB);
			}						
			fread(HorseGradePicBuffer[HorseKind][GradeKind] + nOff, s->size, 1, fp);
			s->img = HorseGradePicBuffer[HorseKind][GradeKind] + nOff;
			
			convert565to555_LoadSprite( s );
			
			nOff += size;		
		}
	}		
	fclose(fp);	
	return TRUE;
}

void cHorseRider::LoadHorseData(LPCHARACTER ch)
{
	if (ch->HorseNo>0)
	{
		int Sex=CheckSex(ch);
		int RiderKind=CheckRiderKind(ch);
		int RiderGrade=CheckRiderGrade(ch);
		int HorseKind=CheckHorseKind(ch);
		int HorseGrade=CheckHorseGrade(ch);
		int WeaponKind=CheckWeaponKind(ch);
		int GuardKind=CheckGuardKind(ch);
		
		if (RiderKind>=0) 
		{
			LoadRiderSprite(Sex,RiderKind);
			LoadRiderBandSprite(Sex,RiderKind);
		}
		if (RiderGrade>=0) LoadRiderGradeSprite(Sex,RiderKind,RiderGrade);
		if (HorseKind>=0) 
		{
			LoadHorseSprite(HorseKind);
			LoadHorseSaddleSprite(HorseKind);
		}
		if (HorseGrade>=0) LoadHorseGradeSprite(HorseKind,HorseGrade);
		if (WeaponKind>=0) LoadWeaponSprite(Sex,WeaponKind);
		if (GuardKind>=0) LoadGuardSprite(Sex,GuardKind);
//		if (ch->mantle) LoadRiderMantleSprite(Sex);
	}
}

int	cHorseRider::CheckWeaponSpriteData(int SexType,int SpriteKind)
{
	if (SpriteKind==13)
	{
		if (SexType==HTYPE_MAN)
		{
			if( WeaponPicBuffer[SexType][SpriteKind] != NULL )
			{
				return FALSE;
			}
		}
		else
		{
			if( WeaponPicBuffer[SexType][SpriteKind] != NULL )
			{
				return FALSE;
			}
		}
		
	}
	else
	{
		if( WeaponPicBuffer[SexType][SpriteKind] != NULL )
		{
			return FALSE;
		}
	}
	return TRUE;
}

void cHorseRider::GetWeaponFileName(int SexType,int SpriteKind,char* FileName)
{
	if (SpriteKind==13)
	{
		if (SexType==HTYPE_WOMAN)
		{
			SpriteKind++;
		}
		sprintf(FileName,"./char/W001%03d.spr",SpriteKind);
	}
	else
	{
		sprintf(FileName,"./char/W001%03d.spr",SpriteKind);
	}
}


int cHorseRider::LoadWeaponSprite(int SexType,int SpriteKind)	// SpriteKind must be Converted..
{
	FILE *fp;
	short no;
	DWORD sprfilelength, size;
	DWORD nOff = 0;
	int   i,j;
	Spr*  s;
	int length;
	char tempFileName[MAX_PATH];

	if(WeaponPicBuffer[SexType][SpriteKind]!=NULL)
	{
		return FALSE;
	}
	
	sprintf(tempFileName,"./char/W%03d%03d.spr",SexType,SpriteKind);
	
	fp=Fopen(tempFileName,"rb" );
	if (fp==NULL)
	{
		return FALSE;
	}
			
	fread( &no, 2,1, fp);
	fseek( fp, no * 4, SEEK_CUR ); 
	length = sprfilelength = _filelength( _fileno( fp) ) - no * 4 * 2 - 2;

	MemAlloc( WeaponPicBuffer[SexType][SpriteKind], sprfilelength );
	for (i=0;i<8;i++)
	{			
		for (j=0;j<75;j++)
		{
			s = &WeaponPic[SexType][SpriteKind][i][j];
			fread( &size, 4,1, fp);
			if( size== 0 )	
			{				
				s->xl = 0;	
				s->yl = 0;	
				s->size = 0;
				s->img = NULL;
				continue;	
			}				
			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);
			fread( &(s->size),	sizeof( unsigned int ), 1, fp);
			
			if( nOff + s->size >= sprfilelength ) 
			{						
				JustMsg( "%s File Error !!",tempFileName);
				ExitApplication(EA_LOAD_WEAPON_SPR_DATA);
			}						
			fread(WeaponPicBuffer[SexType][SpriteKind] + nOff, s->size, 1, fp);
			s->img = WeaponPicBuffer[SexType][SpriteKind] + nOff;
			
			convert565to555_LoadSprite( s );
			
			nOff += size;		
		}
	}		
	fclose(fp);	
	return TRUE;
}

int cHorseRider::LoadGuardSprite(int SexType,int SpriteKind)
{
	FILE *fp;
	short no;
	DWORD sprfilelength, size;
	DWORD nOff = 0;
	int   i,j;
	Spr*  s;
	int length;
	char tempFileName[MAX_PATH];

	if( GuardPicBuffer[SexType]!= NULL )
	{
		return FALSE;
	}

	sprintf(tempFileName,"./char/w%03d017.spr",SexType);
	
	fp=Fopen(tempFileName,"rb" );
	if (fp==NULL)
	{
		return FALSE;
	}
			
	fread( &no, 2,1, fp);
	fseek( fp, no * 4, SEEK_CUR ); 
	length = sprfilelength = _filelength( _fileno( fp) ) - no * 4 * 2 - 2;

	MemAlloc( GuardPicBuffer[SexType], sprfilelength );
	for (i=0;i<8;i++)
	{			
		for (j=0;j<75;j++)
		{
			s = &GuardPic[SexType][i][j];
			fread( &size, 4,1, fp);
			if( size== 0 )	
			{				
				s->xl = 0;	
				s->yl = 0;	
				s->size = 0;
				s->img = NULL;
				continue;	
			}				
			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);
			fread( &(s->size),	sizeof( unsigned int ), 1, fp);
			
			if( nOff + s->size >= sprfilelength ) 
			{						
				JustMsg( "%s File Error !!",tempFileName);
				ExitApplication(EA_LOAD_GUARD_SPR_DATA);
			}						
			fread(GuardPicBuffer[SexType] + nOff, s->size, 1, fp);
			s->img = GuardPicBuffer[SexType] + nOff;
			
			convert565to555_LoadSprite( s );
			
			nOff += size;		
		}
	}		
	fclose(fp);	
	return TRUE;
}

void cHorseRider::LoadHorseRiderAniMationTable(int Sex,int HorseNo,char* FileName)
{
	FILE *fp;
	int i, no, count;
	char temp[ FILENAME_MAX];
	int x, y, attackframe, wave, height, effect;
	static int tempsprno;
	char gabage[20];
	char filename[MAX_PATH];

								
	if( GetSysInfo( SI_GAME_MAKE_MODE ) )	fp = Fopen( FileName, "rt" );
	else fp = NULL;
	if( fp )
	{							
		for( i = 0 ; i < 50 ; i ++)
		{			
			count =0;
	AGAIN_:		
			if( fgets( temp, FILENAME_MAX, fp ) == NULL ) break;
												
			if( temp[0] == '#' || temp[0] == ' ' || temp[0] == 10 || temp[0] == '\n' )  
			{
				if( temp[0] == '#' )
				{
					char *p;
					if( (p = strchr( temp, 10 )) ) *p = 0;
#ifdef _DEBUG
					strncpy( AnimationName[i], temp + 1, 100 );
#endif
				}
				
				goto AGAIN_;
			}
			else goto PROCESS__;
				
			while( fgets( temp, FILENAME_MAX, fp ) != NULL )
			{	
	PROCESS__:				
				if( temp[ 0] == ' ' || temp[0] == '\n' || temp[0] == '\r' )
				{
					HorseRiderAniTable[Sex][HorseNo][i].nCount = count;
					break;
				}
				
				sscanf( temp, "%d %d %d %d %d %d %d ", &no, &x, &y, &attackframe, &wave, &height, &effect );
	//			no = atoi( temp ) -1;
				HorseRiderAniTable[Sex][HorseNo][i].cFrame[ count]	= no-1;
				HorseRiderAniTable[Sex][HorseNo][i].dx[ count]		=  x;
				HorseRiderAniTable[Sex][HorseNo][i].dy[ count]		=  y;
				HorseRiderAniTable[Sex][HorseNo][i].attackf[ count]	=  attackframe;
				HorseRiderAniTable[Sex][HorseNo][i].wave[ count]		=  wave;
				HorseRiderAniTable[Sex][HorseNo][i].height[ count]	=  height;
				HorseRiderAniTable[Sex][HorseNo][i].effect[ count]	=  effect;
				count++;
				HorseRiderAniTable[Sex][HorseNo][i].nCount = count;
			}	
		}		
		fclose(fp);
			
		int dist = 0;
			
		sprintf( filename, "./CHAR/HRAniTable%02d%02d.bin",HorseNo,Sex);
		fp = Fopen( filename, "wb" );
		if( fp )
		{
			fwrite( gabage, 20,1, fp );
			char *tt = (char *)HorseRiderAniTable[Sex][HorseNo];
			char crc = 0;
			for( i = 0 ; i < sizeof( PCANIMATIONTABLE ) * MAX_ANIMATION ; i ++)
			{
				crc += *tt;
				tt ++;
			}
			fwrite( &crc, 1,1, fp );
			fwrite( HorseRiderAniTable[Sex][HorseNo], sizeof( PCANIMATIONTABLE ), MAX_ANIMATION, fp);
			fclose(fp);
		}
	}
	else 
	{
		sprintf( filename, "./CHAR/HRAniTable%02d%02d.bin",HorseNo,Sex);
		fp = Fopen( filename, "rb" );
		char *tt = (char *)HorseRiderAniTable[Sex][HorseNo];
		char crc = 0, crc1;
		if( fp )
		{
			fseek( fp, 20, SEEK_SET );
			fread( &crc1, 1,1, fp );
			fread( HorseRiderAniTable[Sex][HorseNo], sizeof( PCANIMATIONTABLE ), MAX_ANIMATION, fp);
			for( i = 0 ; i < sizeof( PCANIMATIONTABLE ) * MAX_ANIMATION ;  i ++)
			{
				crc += *tt;
				tt ++;
			}
			fclose(fp);

			if( abs(crc1 - crc) )
			{
				//if( SysInfo.gamemakemode ) JustMsg( "CHECKSUM_ERROR_ANIMATIONDATA : ch->sprno = %d ",  ch->sprno );
				CheckSumError = CHECKSUM_ERROR_ANIMATIONDATA;
			}

		}
		else 
		{
			if( GetSysInfo( SI_GAME_MAKE_MODE ) ) JustMsg( "CheckNumError : HorseTable");	// 010612 KHS
			CheckSumError = CHECKSUM_ERROR_ANIMATIONDATA;			
		}
	}
}	


void cHorseRider::CheckAnimation(LPCHARACTER ch)
{
	int HorseNo=CheckHorseKind(ch);
	if (ch->nCurrentFrame>=HorseRiderAniTable[CheckSex(ch)][HorseNo][ ch->nCurrentAction].nCount )
	{	
		ch->nCurrentFrame = 0;
	}
}

void cHorseRider::CheckDeathAnimation(LPCHARACTER ch)
{
	int HorseNo=CheckHorseKind(ch);
	if (ch->nCurrentFrame>=HorseRiderAniTable[CheckSex(ch)][HorseNo][ ch->nCurrentAction].nCount )
	{	
		ch->nCurrentFrame = HorseRiderAniTable[CheckSex(ch)][HorseNo][ ch->nCurrentAction].nCount-1;
		if (ch->nCurrentAction==ACTION_DIE)
		{
#ifdef _DEBUG
			if( SysInfo.notconectserver )
			{
				if( ch->dieani == 0 ) // 磷菌栏搁..

⌨️ 快捷键说明

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