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

📄 itemtable.cpp

📁 网络游戏龙族 完整的登陆器 C++ 源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	{
		Item_Ref.Item_type[2][z] = &herb[z];
	}

	for (z = 0; z < Num_Of_CItem_Cook; ++z)
	{
		Item_Ref.Item_type[3][z] = &cook[z];
	}
	
	for (z = 0; z < Num_Of_CItem_Potion; ++z)
	{
		Item_Ref.Item_type[4][z] = &potion[z];
	}

	for (z = 0; z < Num_Of_CItem_Tool; ++z)
	{
		Item_Ref.Item_type[5][z] = &tool[z];
	}

	for (z = 0; z < Num_Of_CItem_Weapon; ++z)
	{
		Item_Ref.Item_type[6][z] = &weapon[z];
	}

	for (z = 0; z < Num_Of_CItem_Disposable; ++z)
	{
		Item_Ref.Item_type[7][z] = &disposable[z];
	}

	for (z = 0; z < Num_Of_CItem_Armor; ++z)
	{
		Item_Ref.Item_type[8][z] = &armor[z];
	}

	for (z = 0; z < Num_Of_CItem_Accessory; ++z)
	{
		Item_Ref.Item_type[9][z] = &accessory[z];
	}

	for (z = 0; z < Num_Of_CItem_Etc; ++z)
	{
		Item_Ref.Item_type[10][z] = &etc[z];
	}

	const int	ItemAttrMax[11] = { 
		ITEM_Plant_MAX, ITEM_Mineral_MAX, ITEM_Herb_MAX, ITEM_Cook_MAX, ITEM_Potion_MAX, ITEM_Tool_MAX,
		ITEM_Weapon_MAX, ITEM_Disposable_MAX, ITEM_Armor_MAX, ITEM_Accessory_MAX, ITEM_Etc_MAX,
	};

	for( int i=0 ; i < Num_Of_Item_Type ; i++)
	{
		FILE *fp = NULL;
		char filename[MAX_FILENAME],filenameBin[MAX_FILENAME];		
		sprintf(filename, "./itemtable/itemtable%d.txt", i);
		sprintf(filenameBin, "./itemtable/itemtable%d.bin", i);
#ifdef _DEBUG
		if( ( fp=Fopen(filename, "rt")) && (Item_Ref.nItem[i] > 0)  )
		{
			char text[MAX_STRING_];
			char temp[MAX_STRING_];
			while( fgets( text, MAX_STRING_, fp ) != NULL )
			{
				char *token;
				strcpy( temp, text );
				token = strtok( text, "\t\n");
				int item_id = atoi( token );

				CItem *t = ItemUnit( i, item_id );
				if( t ) t->ReadItemTable( temp );
			}
			fclose(fp);

			if( fp=Fopen(filenameBin, "wb") )
			{
				CHSEL_STREAM ItemEn;
				HSEL_INITIAL eninit;
				eninit.iEncryptType	=	HSEL_ENCRYPTTYPE_RAND;
				eninit.iDesCount	=	HSEL_DES_TRIPLE;
				eninit.iDesCount	=	HSEL_DES_SINGLE;				
				eninit.iCustomize	=	HSEL_KEY_TYPE_DEFAULT;
				eninit.iSwapFlag	=	HSEL_SWAP_FLAG_ON;
				if (!ItemEn.Initial(eninit))
				{
					JustMsg("ItemTable make bin Error");
					fclose(fp);
				}
				HSEL_INITIAL deinit =  ItemEn.GetHSELCustomizeOption();

				int* piNumOfItemTable	= NULL;
				int iTempNumOfItemTable = 0;
				char* pTable = NULL;
				char* pTableStart = NULL;
				int iTableSize = 0;
				switch(i)
				{
				case PLANT:
					{	
						pTable = (char*)(&plant[0]);
						pTableStart = (char*)(&plant[0]);
						iTableSize = sizeof(CItem_Plant);						
						piNumOfItemTable = &Num_Of_CItem_Plant;
						iTempNumOfItemTable = Num_Of_CItem_Plant;
					}break;
				case MINERAL:
					{	
						pTable = (char*)(&mineral[0]);						
						pTableStart = (char*)(&mineral[0]);						
						iTableSize = sizeof(CItem_Mineral);						
						piNumOfItemTable = &Num_Of_CItem_Mineral;
						iTempNumOfItemTable = Num_Of_CItem_Mineral;						
					}break;
				case HERB:
					{	
						pTable = (char*)(&herb[0]);
						pTableStart = (char*)(&herb[0]);
						iTableSize = sizeof(CItem_Herb);						
						piNumOfItemTable = &Num_Of_CItem_Herb;
						iTempNumOfItemTable = Num_Of_CItem_Herb;						
					}break;
				case COOK:
					{	
						pTable = (char*)(&cook[0]);	
						pTableStart = (char*)(&cook[0]);						
						iTableSize = sizeof(CItem_Cook);						
						piNumOfItemTable = &Num_Of_CItem_Cook;
						iTempNumOfItemTable = Num_Of_CItem_Cook;
					}break;					
				case POTION:
					{	
						pTable = (char*)(&potion[0]);						
						pTableStart = (char*)(&potion[0]);
						iTableSize = sizeof(CItem_Potion);						
						piNumOfItemTable = &Num_Of_CItem_Potion;
						iTempNumOfItemTable = Num_Of_CItem_Potion;						
					}break;					
				case TOOL:
					{	
						pTable = (char*)(&tool[0]);
						pTableStart = (char*)(&tool[0]);
						iTableSize = sizeof(CItem_Tool);						
						piNumOfItemTable = &Num_Of_CItem_Tool;
						iTempNumOfItemTable = Num_Of_CItem_Tool;						
					}break;					
				case WEAPON:
					{	
						pTable = (char*)(&weapon[0]);
						pTableStart = (char*)(&weapon[0]);
						iTableSize = sizeof(CItem_Weapon);						
						piNumOfItemTable = &Num_Of_CItem_Weapon;
						iTempNumOfItemTable = Num_Of_CItem_Weapon;						
					}break;					
				case DISPOSABLE:
					{	
						pTable = (char*)(&disposable[0]);						
						pTableStart = (char*)(&disposable[0]);
						iTableSize = sizeof(CItem_Disposable);						
						piNumOfItemTable = &Num_Of_CItem_Disposable;
						iTempNumOfItemTable = Num_Of_CItem_Disposable;						
					}break;					
				case ARMOR:
					{	
						pTable = (char*)(&armor[0]);						
						pTableStart = (char*)(&armor[0]);
						iTableSize = sizeof(CItem_Armor);						
						piNumOfItemTable = &Num_Of_CItem_Armor;
						iTempNumOfItemTable = Num_Of_CItem_Armor;						
					}break;					
				case ACCESSORY:
					{	
						pTable = (char*)(&accessory[0]);						
						pTableStart = (char*)(&accessory[0]);
						iTableSize = sizeof(CItem_Accessory);						
						piNumOfItemTable = &Num_Of_CItem_Accessory;
						iTempNumOfItemTable = Num_Of_CItem_Accessory;						
					}break;					
				case ETC:
					{	
						pTable = (char*)(&etc[0]);						
						pTableStart = (char*)(&etc[0]);						
						iTableSize = sizeof(CItem_Etc);						
						piNumOfItemTable = &Num_Of_CItem_Etc;
						iTempNumOfItemTable = Num_Of_CItem_Etc;						
					}break;
				default:
					{
						JustMsg("ItemTable Read Error txt %d",i);
						fclose(fp);
					}break;
				}
		
			//鞠龋 窍扁
			fwrite( &iTempNumOfItemTable, 4, 1, fp );//肮荐甫 弊成 扁废

			fwrite( &deinit, sizeof(HSEL_INITIAL), 1, fp );

			ItemEn.Encrypt((char *)piNumOfItemTable, sizeof(int));
			fwrite( piNumOfItemTable, 4, 1, fp );
			
			int iCRC = ItemEn.GetCRCConvertInt();//CRC 扁废
			fwrite(&iCRC,sizeof(int),1,fp);
			for(int ct = 0 ; iTempNumOfItemTable > ct ;ct++)
			{
				ItemEn.Encrypt(pTable, iTableSize);
				fwrite(pTable,iTableSize,1,fp);//鞠龋拳等 单捞鸥 扁废

				const int iCRC = ItemEn.GetCRCConvertInt();//CRC 扁废
				fwrite(&iCRC,sizeof(int),1,fp);
				pTable += iTableSize;
			}
			
			fclose(fp);//颇老 扁废

			//鞠龋 钱扁
			CHSEL_STREAM ItemDe;
			ItemDe.Initial(deinit);
			ItemDe.Decrypt((char *)piNumOfItemTable, sizeof(int));
			for(int ct2 = 0 ; *piNumOfItemTable > ct2 ;ct2++)
			{
				ItemDe.Decrypt((char*)pTableStart, iTableSize);
				pTableStart += iTableSize;
			}
			
			}
		}
		else
#endif
		{
			if(fp=Fopen( filenameBin, "rb" ) )
			{
				CHSEL_STREAM ItemDe;
				HSEL_INITIAL deinit;
				int iLineNum = 0;
				fread( &iLineNum,sizeof(int), 1,fp);

				fread( &deinit,sizeof(HSEL_INITIAL), 1,fp);
				if (!ItemDe.Initial(deinit))
				{
					JustMsg("ItemTable make bin Error");
					fclose(fp);
				}		
				int *piNumOfItemTable  = NULL;
				int iTableSize = 0;
				char* pTable = NULL;

				switch(i)
				{				
				case PLANT:
					{
						pTable = (char*)&plant[0];
						iTableSize = sizeof(CItem_Plant);
						piNumOfItemTable = &Num_Of_CItem_Plant;
					}break;
				case MINERAL:
					{
						pTable = (char*)&mineral[0];
						iTableSize = sizeof(CItem_Mineral);
						piNumOfItemTable = &Num_Of_CItem_Mineral;
					}break;
				case HERB:
					{
						pTable = (char*)&herb[0];
						iTableSize = sizeof(CItem_Herb);
						piNumOfItemTable = &Num_Of_CItem_Herb;
					}break;
				case COOK:
					{
						pTable = (char*)&cook[0];
						iTableSize = sizeof(CItem_Cook);
						piNumOfItemTable = &Num_Of_CItem_Cook;
					}break;
				case POTION:
					{
						pTable = (char*)&potion[0];
						iTableSize = sizeof(CItem_Potion);
						piNumOfItemTable = &Num_Of_CItem_Potion;
					}break;
				case TOOL:
					{
						pTable = (char*)&tool[0];
						iTableSize = sizeof(CItem_Tool);
						piNumOfItemTable = &Num_Of_CItem_Tool;
					}break;
				case WEAPON:
					{
						pTable = (char*)&weapon[0];
						iTableSize = sizeof(CItem_Weapon);
						piNumOfItemTable = &Num_Of_CItem_Weapon;
					}break;
				case DISPOSABLE:
					{
						pTable = (char*)&disposable[0];
						iTableSize = sizeof(CItem_Disposable);
						piNumOfItemTable = &Num_Of_CItem_Disposable;
					}break;
				case ARMOR:
					{
						pTable = (char*)&armor[0];
						iTableSize = sizeof(CItem_Armor);
						piNumOfItemTable = &Num_Of_CItem_Armor;
					}break;
				case ACCESSORY:
					{
						pTable = (char*)&accessory[0];
						iTableSize = sizeof(CItem_Accessory);
						piNumOfItemTable = &Num_Of_CItem_Accessory;
					}break;
				case ETC:
					{
						pTable = (char*)&etc[0];
						iTableSize = sizeof(CItem_Etc);
						piNumOfItemTable = &Num_Of_CItem_Etc;
					}break;
				default:
					{
					}break;
				}
				{
					fread( piNumOfItemTable,sizeof(int), 1,fp);
					ItemDe.Decrypt((char *)piNumOfItemTable, sizeof(int));
					
					if( iLineNum  != *piNumOfItemTable)
					{
						JustMsg("ItemTable Read Error %d",i);
						fclose(fp);
					}				

					int iCRC1 =0;
					const int iCRC2 = ItemDe.GetCRCConvertInt();//CRC 扁废
					fread(&iCRC1,sizeof(int),1,fp);
					if( iCRC2  != iCRC1)
					{
						JustMsg("ItemTable Read Error %d",i);
						fclose(fp);
					}
					for(int ct = 0 ; *piNumOfItemTable > ct ;ct++)
					{
						fread((char*)pTable,iTableSize,1,fp);//鞠龋拳等 单捞鸥 扁废
						ItemDe.Decrypt((char*)pTable, iTableSize);
						int iCRC1=0;//CRC 扁废
						const int iCRC2 = ItemDe.GetCRCConvertInt();//CRC 扁废
						fread(&iCRC1,sizeof(int),1,fp);
						if( iCRC2  != iCRC1)
						{
							JustMsg("ItemTable Read Error %d , %d",i,ct);
							fclose(fp);
						}
						pTable += iTableSize;
					}
				}
				fclose(fp);
			}
			else return; 
		}
	}

	for( z=0; z < Num_Of_CItem_Plant ; z++)		{ Plant[z].CopyItemClass( &plant[z], ITEM_Plant_MAX	); Item_Ref.Item_type[0][z] = &Plant[z]; }
	for( z=0; z < Num_Of_CItem_Mineral ; z++)	{ Mineral[z].CopyItemClass( &mineral[z], ITEM_Mineral_MAX ); Item_Ref.Item_type[1][z] = &Mineral[z]; }
	for( z=0; z < Num_Of_CItem_Herb ; z++)		{ Herb[z].CopyItemClass( &herb[z], ITEM_Herb_MAX ); Item_Ref.Item_type[2][z] = &Herb[z]; }
	for( z=0; z < Num_Of_CItem_Cook ; z++)		{ Cook[z].CopyItemClass( &cook[z], ITEM_Cook_MAX ); Item_Ref.Item_type[3][z] = &Cook[z]; }
	for( z=0; z < Num_Of_CItem_Potion ; z++)	{ Potion[z].CopyItemClass( &potion[z], ITEM_Potion_MAX ); Item_Ref.Item_type[4][z] = &Potion[z]; }
	for( z=0; z < Num_Of_CItem_Tool ; z++)		{ Tool[z].CopyItemClass( &tool[z], ITEM_Tool_MAX ); Item_Ref.Item_type[5][z] = &Tool[z]; }
	for( z=0; z < Num_Of_CItem_Weapon ; z++)	{ Weapon[z].CopyItemClass( &weapon[z], ITEM_Weapon_MAX ); Item_Ref.Item_type[6][z] = &Weapon[z]; }
	for( z=0; z < Num_Of_CItem_Disposable ; z++){ Disposable[z].CopyItemClass( &disposable[z], ITEM_Disposable_MAX ); Item_Ref.Item_type[7][z] = &Disposable[z]; }
	for( z=0; z < Num_Of_CItem_Armor ; z++)		{ Armor[z].CopyItemClass( &armor[z], ITEM_Armor_MAX	); Item_Ref.Item_type[8][z] = &Armor[z]; }
	for( z=0; z < Num_Of_CItem_Accessory ; z++)	{ Accessory[z].CopyItemClass( &accessory[z], ITEM_Accessory_MAX ); Item_Ref.Item_type[9][z] = &Accessory[z]; }
	for( z=0; z < Num_Of_CItem_Etc ; z++)		{ Etc[z].CopyItemClass( &etc[z], ITEM_Etc_MAX ); Item_Ref.Item_type[10][z]= &Etc[z]; }

	SAFE_DELETE_ARRAY(plant		);
	SAFE_DELETE_ARRAY(mineral	);
	SAFE_DELETE_ARRAY(herb		);
	SAFE_DELETE_ARRAY(cook		);
	SAFE_DELETE_ARRAY(potion	);
	SAFE_DELETE_ARRAY(tool		);
	SAFE_DELETE_ARRAY(weapon	);
	SAFE_DELETE_ARRAY(disposable);
	SAFE_DELETE_ARRAY(armor		);
	SAFE_DELETE_ARRAY(accessory	);
	SAFE_DELETE_ARRAY(etc		);
}


inline int GetItemNumber( int item_number , int& type, int& num )
{	
	type	= item_number / 1000;
	num		= item_number % 1000;

	if( (type<0) || (type>10) ) return 0;
//	if( (num<0) || (num>= Item_Ref.nItem[type]) ) return 0;

	return 1;
}	



///////////////////////////////////////////////////////////////////////////////////////
void LoadItemIconData(Spr *s, int num)
{
	FILE	*fp;
	char filename[MAX_FILENAME];
	sprintf(filename, "./itemdata/%07d.csp", num );
	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);
		dw_TotalImageSize+=s->size;

		MemFree( s->img );		
		MemAlloc( s->img, s->size );
		fread(s->img, s->size, 1, fp);
		convert565to555( s );
		fclose(fp);
	}
	else LoadItemIconData(s, 0);	// 0锅弊覆 肺靛
}



//------------------------------------------------------------------------
//	酒捞能 弊覆 嘛绢林绰 窃荐 ( 俊聪皋捞记档 啊瓷 )
//------------------------------------------------------------------------
void PutItemIcon(int x, int y, int item_number, int delay, int effect, int is_not_equip)
{
	if( !item_number ) return;
	int image;					// 酒捞袍捞 啊瘤绊 乐绰 捞固瘤
	int kind;						// 酒捞能 弊覆 鸥涝
	int index;
	
	GetItemNumber(item_number, kind, index);
	CItem *t = ItemUnit(kind, index);
	if( !t ) 
	{
		DeleteItemByItemNumber( item_number );
		return;
	}

	image = t->GetImageNumber();
	if( !GetItemNumber((int)image/100, kind, index) ) 
	{
		if( GetSysInfo( SI_GAME_MAKE_MODE ) ) 
		{
			JustMsg( lan->OutputMessage(6,81), item_number );//010215 lsw
			exit( 0 );
		} 		
		return;
	}
	if( !index )		// 酒捞袍 弊覆捞 0捞搁
	{
		DeleteItemByItemNumber( item_number );
		return;
	}
	Spr* s;

	if( GetSysInfo( SI_GAME_MAKE_MODE ) )
	if( index >= ITEM_MAX ) 
	{
		JustMsg( lan->OutputMessage(6,69), item_number  );//010215 lsw
	}
	switch(kind)
	{
		case 0 :	s = &Icon1[index][0]; break;
		case 1 :	s = &Icon2[index][0]; break;
		case 2 :	s = &Icon3[index][0]; break;
		case 3 :	s = &Icon4[index][0]; break;
		case 4 :	s = &Icon5[index][0]; break;
		case 5 :	s = &Icon6[index][0]; break;
		case 6 :	s = &Icon7[index][0]; break;
		case 7 :	s = &Icon8[index][0]; break;
		case 8 :	s = &Icon9[index][0]; break;
		case 9 :	s = &Icon10[index][0]; break;

⌨️ 快捷键说明

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