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

📄 itemtable.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			char temp[20];
			char temp2[1023];

			if( !fscanf(fp, "%s", temp) ) break;
			if( temp[0] == '#' || temp[0] == ';') 
			{
				fgets(temp2, 1023, fp);
				continue;
			}
			num = atoi(temp);
			magic[num].LoadExplain(num, fp);
		}
		fclose(fp);
	}
	return 1;
}

bool ReadMagicTable()
{
  FILE* fp = NULL;
	//ReadMagicExplain();		// 刚历 汲疙阑 佬绢 甸牢饶 单捞鸥 蔼阑 佬绢辑 茄波锅俊 历厘茄促.
	char filename[MAX_FILENAME], filenameBin[MAX_FILENAME];
  memset(filename, 0, MAX_FILENAME);
  memset(filenameBin, 0, MAX_FILENAME);
	//< CSD-020702
  sprintf(filename, "./magic/");
  sprintf(filenameBin, "./magic/");
  //> CSD-020702
  switch (SCharacterData.nCharacterData[SPELL])
  {
    case WIZARD_SPELL:
    {
      strcat(filename, "wizard.txt");
      strcat(filenameBin, "wizard.bin");
      break;
    }
    case PRIEST_SPELL:
    {
      strcat(filename, "priest.txt");
      strcat(filenameBin, "priest.bin");
      break;
    }
  }

	if( fp=Fopen(filename, "rt") )
	{
		char temp[2048];

		memset( magic, 0, sizeof( CMagic ) * MAX_MAGIC_ );
		while( fgets( temp, 2048, fp ) )
		{
			if( temp[0] == '#' || temp[0] == ';') continue;
			char *token = strtok( temp, "\t\n" );
			int magic_no = atoi( token );
			magic[magic_no].SetMagicNum(magic_no);

			token = strtok( NULL, "\t\n" );
			magic[magic_no].SetName(token );

			token = strtok( NULL, "\t\n" );
			magic[magic_no].SetHanName(token );

			token = strtok( NULL, "\t\n" );
			
			magic[magic_no].SetData(0,atoi( token ));

			token = strtok( NULL, "\t\n" );
			magic[magic_no].SetData(1,atoi( token ));
			
			token = strtok( NULL, "\t\n" );
			magic[magic_no].SetData(2,atoi( token ));

			token = strtok( NULL, "\t\n" );
			magic[magic_no].SetData(3,atoi( token ));

			token = strtok( NULL, "\t\n" );
			magic[magic_no].SetExplain(token);
		}
		fclose(fp);
		fp=Fopen( filenameBin, "wb" );
		if(fp)
		{
			char *tt = (char *)magic;
			char crc = 0;
			for( int i=0; i< sizeof(CMagic)*MAX_MAGIC_ ; i++ )
			{
				crc += *tt;
				tt++ ;
			}
			fwrite( &crc, 1, 1, fp );
			fwrite( magic, sizeof(CMagic), MAX_MAGIC_, fp);
			fwrite( &crc, 1, 1, fp );
			fclose(fp);
		}
		for( int i=0; i<MAX_MAGIC_; i++ )
		{
			if( magic[i].GetMagicNum() ) 
				ReadMagicIconImage( SCharacterData.nCharacterData[SPELL], magic[i].GetImage() );
		}
	}
	else
	{
		fp = Fopen( filenameBin, "rb" );
		if(fp)
		{
			char *tt = (char *) magic;
			char crc = 0, crc1, crc2;
			fread( &crc1, 1, 1, fp );
			fread( magic, sizeof(CMagic), MAX_MAGIC_, fp);
			fread( &crc2, 1, 1, fp );
			fclose(fp);
			for( int i=0; i< sizeof( CMagic ) *MAX_MAGIC_; i++ )
			{
				crc += *tt;
				tt++ ;
			}
			if( crc != crc1 || crc != crc2 ) 
			{
				CheckSumError = -1;
				JustMsg(lan->OutputMessage(6,82) );//CheckSumError = 1;//010215 lsw
			}
			else	// 概流 酒捞能 佬绢 坷扁...
			{
				for( int i=0; i<MAX_MAGIC_; i++ )
					if( magic[i].GetMagicNum() ) 
						ReadMagicIconImage( SCharacterData.nCharacterData[SPELL], magic[i].GetImage() );
			}
		}
		else return 0;
	}
/*
	if( GetSysInfo( SI_GAME_MAKE_MODE ) )
	{
		fp = fopen( "kein_wizard.txt", "wt" );
		if( fp) 
		{
			for( int i=0; i<MAX_MAGIC_; i++ )
			{
				if( magic[i].MagicNum )
				fprintf( fp, "%d	%s	%s	%d	%d	%d	%d	%s\n", 
					magic[i].MagicNum, magic[i].Name, magic[i].HanName,
					magic[i].data[0], magic[i].data[1], magic[i].data[2], magic[i].data[3], 
					magic[i].explain );
			}
			fclose( fp );
		}
	}
	*/


	return 1;
}

void CMagic::DeleteMagic()
{
	if( !GetMagicNum() ) return;

	if( magic_spr[ m_data[ImgNum] ].img )
	{
		GlobalFree( magic_spr[ m_data[ImgNum] ].img );
	}
	magic_spr[ m_data[ImgNum] ].img = NULL;

	m_iMagicNum=0;
	SetName("");
	SetHanName("");
	memset( m_data, 0, sizeof( int[MAGIC_DATA_MAX] ) );
}



bool ReadMagicIconImage( int type, int num )
{
	char filename[MAX_FILENAME];
	FILE *fp;

	Spr *s;

	switch( type )
	{
		case WZD :		sprintf( filename, "./Magic/w%03d.csp", num ); break;
		case PRI :		sprintf( filename, "./Magic/p%03d.csp", num ); break;
	}
	s = &magic_spr[num];
	if( s->img ) return 1;

	if( fp = Fopen(filename, "rb" ) )
	{
		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);

		MemFree( s->img );
		MemAlloc( s->img, s->size );
		fread(s->img, s->size, 1, fp);
		convert565to555( s );
		fclose(fp);
	}
	else return 0;
	return 1;
}

void FreeMagicIcon( )
{
	for( int i=0; i<MAGIC_SPR_MAX; i++ )
	{
		if( magic_spr[i].img ) MemFree( magic_spr[i].img );
	}
}

void PutMagicIcon( int x, int y, int num, int flag, int type )
{
	Spr *s;
//	if( !magic[num].GetImage() ) return;
	s = &magic_spr[magic[num].GetImage()];
	if( flag ) 
	{
		PutCompressedImageFX(x, y, s, flag, type); 
	}
	else 
	{
		PutCompressedImage(x, y, s);
	}
}
////////////////////////////////////////////////////////////////////////////////////////
//
//		概流 包访 拌魂 皋家靛 --> 辑滚
//
//
////////////////////////////////////////////////////////////////////////////////////////




//###########################################################################################

/*
extern ItemAttr InvItemAttr[3][3][8];
extern ItemAttr EquipItemAttr[8];
extern ItemAttr QuickItemAttr[7];
extern ItemAttr HandItemAttr;

extern ItemAttr InvAttrBackUp[3][3][8];
extern ItemAttr EquipAttrBackUp[8];
extern ItemAttr QuickAttrBackUp[6];
extern ItemAttr HandAttrBackUp;

extern int aAccelInventory[6];		
extern int AccelBackUp[6];

extern int aArmor_Inventory[8];
extern int ArmorBackUp[8];

extern int aItemInventory[3][3][8];
extern int InvBackUp[3][3][8];

extern int HandBackUp;
extern int HandBackUptype;

extern int g_MouseItemNumber;   
extern int g_MouseItemType;     
*/

void InventoryBackUp()
{
	memcpy( InvAttrBackUp, InvItemAttr, sizeof( ItemAttr[3][3][8] ) );
	memcpy( EquipAttrBackUp, EquipItemAttr, sizeof( ItemAttr[8] ) );
	memcpy( QuickAttrBackUp, QuickItemAttr, sizeof( ItemAttr[7] ) );
	HandAttrBackUp = HandItemAttr;

//	memcpy( AccelBackUp, aAccelInventory, sizeof( int[6] ) );
//	memcpy( ArmorBackUp, aArmor_Inventory, sizeof( int[8] ) );
//	memcpy( InvBackUp, aItemInventory, sizeof( int[3][3][8] ) );
	HandBackUp = g_MouseItemNumber;
	HandBackUptype = g_MouseItemType;

}

void InventoryRestore()
{
	// 犁 傈价 罐绰促.
	CallServer( CMD_RESEND_ITEM );
	DeleteItem( &HandItemAttr );
	g_MouseItemType = 0;
	g_MouseItemNumber = 0;

	ChangeEquip( Hero, EquipItemAttr, 0 );
}

int Item_Attack_Ani[27][8] = 
{
	0,	50,	65,		0,	0,	0,	0,	0,		//剧颊八	
	61,	50,	70,		4,	3,	5,	6,	8,		//茄颊漠..
	62,	50,	70,		4,	3,	5,	6,	8,		//茄颊漠..
	63,	50,	70,		4,	3,	5,	6,	8,		//阂漠.
	64,	50,	70,		4,	3,	5,	6,	8,		//
	65,	50,	70,		4,	3,	5,	6,	8,		//
	66,	50,	70,		4,	3,	5,	6,	0,		//
	67,	50,	70,		4,	3,	5,	6,	0,		//
	68,	50,	70,		22,	21,	7,	23,	0,		//秦赣
	69,	50,	70,		4,	3,	5,	6,	0,		//
	70,	50,	70,		4,	3,	7,	8,	23,		//豪1.
	71,	50,	70,		4,	3,	7,	6,	23,		//
	72,	70,	90,		22,	21,	7,	6,	23,		//
	73,	70,	90,		22,	21,	7,	2,	30,		//	
	74,	80,	100,	22,	21,	8,	0,	0,		//芒1.
	75,	70,	90,		22,	21,	8,	0,	0,		//
	76,	70,	90,		4,	3,	19,	0,	0,		//
	77,	70,	90,		4,	3,	19,	0,	0,		//
	78,	50,	480,	4,	3,	9,	0,	0,		//劝1
	79,	70,	530,	4,	3,	9,	0,	0,		//	
	80,	40,	70,		10,	3,	11,	0,	0,		//....?,,
	81,	40,	70,		10,	3,	11,	0,	0,		//
	82,	40,	70,		10,	3,	11,	0,	0,		//....?,,
	83,	40,	70,		10,	3,	11,	0,	0,		//....?,,
	84,	40,	70,		10,	3,	11,	0,	0,		//....?,,
	85,	40,	70,		10,	3,	11,	0,	0,		//....?,,
	86,	40,	70,		10,	3,	11,	0,	0,		//....?,,
};

void GetItemAnimationNumber(int num, int &a, int &b, int &c, int &d, int &e, int &f, int &g)
{
	if(num)
	{
		a = Item_Attack_Ani[num-60][1];
		b = Item_Attack_Ani[num-60][2];
		c = Item_Attack_Ani[num-60][3];
		d = Item_Attack_Ani[num-60][4];
		e = Item_Attack_Ani[num-60][5];
		f = Item_Attack_Ani[num-60][6];
		g = Item_Attack_Ani[num-60][7];
	}
	else
	{
		a = Item_Attack_Ani[0][1];
		b = Item_Attack_Ani[0][2];
		c = Item_Attack_Ani[0][3];
		d = Item_Attack_Ani[0][4];
		e = Item_Attack_Ani[0][5];
		f = Item_Attack_Ani[0][6];
		g = Item_Attack_Ani[0][7];
	}
}
// 020620 YGI
void CSkill::ReadSkill( int no, char *buf )
{
	num = no;
	char *token;

#ifdef KOREA_LOCALIZING_
	token = strtok(buf, "\t\n");
	strcpy(name, token);

	token = strtok(NULL, "\t\n");
	strcpy(han_name, token);
#else
	token = strtok(buf, "\t\n");
	strcpy(han_name, token);

	token = strtok(NULL, "\t\n");
	strcpy(name, token);
#endif

	token= strtok(NULL, "\t\n") ;
	inclusive = atoi(token);

	token= strtok(NULL, "\t\n") ;
	series = atoi(token);

	token= strtok(NULL, "\t\n") ;
	money = atoi(token);

	token= strtok(NULL, "\t\n\r") ;
	skillable = atoi(token);

	token= strtok(NULL, "\t\n") ;
	strcpy(explain, token);

	static count=0;

	int ct = strlen( token );
	if( ct > count ) count = ct;

}

CSkill	skill[MAX_SKILL];
Spr		skill_spr[MAX_SKILL];
int		inclusive_to_skill[MAX_SKILL_KIND][8];

bool ReadSkillTable()
{
	char buf[511] ;
	char temp[20];

	FILE *fp ;
	char	filename[MAX_FILENAME],filenameBin[MAX_FILENAME];
	
	sprintf(filename, "./skill/skill.txt");
	sprintf(filenameBin, "./skill/skill.bin");

	if( fp= Fopen(filename, "rt") )
	{
		//int i=0;
		int num = 0;
		while( !feof(fp) && num<MAX_SKILL )
		{
			if( !fscanf(fp, "%s", temp) ) break;
			if( temp[0] == '#' || temp[0] == ';') 
			{
				fgets(buf, 511, fp);
				continue;
			}
			num = atoi( temp );
			fgets(buf, 511, fp);
			skill[num].ReadSkill(num, buf);
			ReadSkillIcon( num );
//			i++;
		}
		fclose(fp);

		if(fp=Fopen( filenameBin, "wb" ) )
		{
			char *tt = (char *) skill;
			char crc = 0; 
			for( int i=0; i<sizeof( CSkill ) *MAX_SKILL; i++ )
			{
				crc += *tt;
				tt++;
			}

			fwrite( &crc, 1, 1, fp);
			fwrite( skill, sizeof(CSkill), MAX_SKILL, fp);
			fwrite( &crc, 1, 1, fp);
			fclose(fp);
		}
	}

	else
	{
		if(fp=Fopen( filenameBin, "rb" ) )
		{
			char *tt = (char *) skill ;
			char crc = 0, crc1, crc2;
			fread( &crc1, 1, 1, fp );
			fread( skill, sizeof(CSkill), MAX_SKILL, fp);
			fread( &crc2, 1, 1, fp );
			fclose(fp);

			for( int i=0; i<sizeof( CSkill )*MAX_SKILL; i++)
			{
				crc += *tt;
				tt++;
			}
			if( crc != crc1 || crc != crc2 ) 
			{
				CheckSumError = -1;
				JustMsg(lan->OutputMessage(6,83) );//CheckSumError = 1;//010215 lsw
			}
			else		// 捞固瘤 佬绢 坷扁
			{
				for( int i=0; i<MAX_SKILL; i++ )
				{
					if( skill[i].num ) 
					{
						ReadSkillIcon( i );
					}
				}

#ifdef _DEBUG	// 031110 YGI
				if( GetSysInfo( SI_NOT_CONNECT_MODE ) )

⌨️ 快捷键说明

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