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

📄 object.cpp

📁 完整龙族的无错反外挂登陆器,b编译后直接直接就可以放在客户端下运行
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				
		if( TotalMapObject == 0xffff )
		{
			newtoi = true;
			fread ( &TotalMapObject,	2,1, fp ); 
		}
		else
			newtoi = false;
			
		// 021117 YGI
		if( TotalMapObject > MAX_MAPOBJECT_ ) 
		{
			Error( "Too Many MapObject" );
		}
			
		fread ( &TotalMapObjectID,	2,1, fp );															
		fseek( fp, TotalMapObject * sizeof( int ), SEEK_CUR );										
			
		for( i = 0 ; i < TotalMapObject ; i ++)
		{	
			if( count == 140 )
			{
				_asm nop;
			}


			if( newtoi == true )
			{
				fread( &mo, sizeof( MAPOBJECT ), 1, fp );
			}
			else
			{
				fread( &moold, sizeof( MAPOBJECT_old ), 1, fp );
				memcpy( &mo, &moold, sizeof( MAPOBJECT_old ) );
				mo.soundno		= 0;
				mo.soundframe	= 0;
				mo.sounddelay	= 0;
			}
			
			// object 甫 辑滚客 楷搬 救窍绊 焊咯林妨搁.....
			if( mo.objectoritem == 0 || SysInfo.loaditemfromtoi2	|| 
				mo.objectoritem == ITEMTYPE_WORKTABLE_MINING		||	// 累诀措 侩堡肺(71)
				mo.objectoritem == ITEMTYPE_WORKTABLE_BATTLE		||
				mo.objectoritem == ITEMTYPE_WORKTABLE_SUNBAN		||
				mo.objectoritem == ITEMTYPE_WORKTABLE_MORU			||
				mo.objectoritem == ITEMTYPE_WORKTABLE_HWADUK		||	
				mo.objectoritem == ITEMTYPE_WORKTABLE_SIHUMKWAN		||	
				mo.objectoritem == ITEMTYPE_WORKTABLE_MULAE			||	
				mo.objectoritem == ITEMTYPE_WORKTABLE_BULDAE		||	
				mo.objectoritem == ITEMTYPE_SIGNBOARD				|| 
				mo.objectoritem == ITEMTYPE_DIRECTBOARD				||
				mo.objectoritem == ITEMTYPE_HP_UP					||
				mo.objectoritem == ITEMTYPE_MP_UP					||
				mo.objectoritem == ITEMTYPE_SCALE					||// 010614 khs
				mo.objectoritem == ITEMTYPE_NATION_STONE			||
				mo.objectoritem == ITEMTYPE_GUILD_STONE				||
				mo.objectoritem == ITEMTYPE_SENARIO_STONE			||
				mo.objectoritem == ITEMTYPE_COLOSSUS_STONE				)
			{
				//if( mo.id == 52428 ) continue;

				memcpy( &Mo[count], &mo, sizeof( MAPOBJECT ) );
													
				int frame = LoadMapObjectCSP( Mo[count].id, &MoImage[ Mo[count].id-1] );
				if( frame ) MoImage[ Mo[count].id-1].nFrameCount = frame;

				if (MoImage[ Mo[count].id-1].nFrameCount != 0)
				{
					Mo[count].curframe = Random(MoImage[ Mo[count].id-1].nFrameCount);
				}
				else
				{
					Mo[count].curframe = 0;
				}

				count ++;	
			}											
													
			if ( HandleRunning(&connections )  <= 0 )
			{										
				Release( &connections);
				return( 0 );
			}											
		}											
		fclose(fp);
			
		TotalMapObject = count;
			
		return 1;
	}		
	else	
	{		
		sprintf( szFilePath, "./object/%s/%s.toi", temptoiname, filename );
		fp = Fopen( szFilePath, "rb" );
		if( fp == NULL ) 
		{	
			TotalMapObject = 0;
		}	
		return 0;
	}			
			
	fread( &TotalMapObjectID, 2,1, fp );
	fseek( fp, 4 + 4 + 2, SEEK_CUR );
				
	for( i = 0 ; i < TotalMapObjectID ; i++ )
	{		
		fread( &no, 4,1, fp );
		fseek( fp, sizeof( SIZE ) + sizeof( WORD ) + sizeof( POINT ) + sizeof( LPDIRECTDRAWSURFACE) + sizeof( LPOBJECT ) * 2 +sizeof( struct tagOBJECTHEADER* ) * 2  + 2, SEEK_CUR );
			
		TempMoImageID[i] = no;
		for( j = 0 ; j < no ; j ++)
		{	
//			fread( &sizeof(t), sizeof( OBJECT ),1, fp);
			fread( &id,							2,1, fp );

			Mo[count].id	= id;		

			fread( &Mo[count].objectoritem,		2,1, fp );
			fread( &Mo[count].dum,				2,1, fp );
			fread( &Mo[count].animationType ,	1,1, fp );
			fread( &Mo[count].attr,				1,1, fp );
			fread( &Mo[count].attr1,			1,1, fp );
			fread( &Mo[count].attr2,			1,1, fp );
			
			fseek( fp, 2, SEEK_CUR );	
			fread( &Mo[count].dir,		2,1, fp );
			fseek( fp, 2, SEEK_CUR );	
			fread( &Mo[count].x,		4,1, fp );
			fread( &Mo[count].y,		4,1, fp );
			fread( &Mo[count].offx,		4,1, fp );
			fread( &Mo[count].offy,		4,1, fp );
			fread( &ox,	4,1, fp );		
			fread( &oy,	4,1, fp );
			fseek( fp, 8, SEEK_CUR );
			
			Mo[count].x = Mo[count].x * TILE_SIZE;
			Mo[count].y = Mo[count].y * TILE_SIZE;
			
			Mo[count].objectoritem = 0; // Mapobject... 

			if( j == 0 )
			{
//				MoImage[ Mo[count].id-1].spr[0].ox = ox;
//				MoImage[ Mo[count].id-1].spr[0].oy = oy;
							
				MoImage[ Mo[count].id-1].nFrameCount = LoadMapObjectCSP( Mo[count].id, &MoImage[ Mo[count].id-1] );
			}

			Mo[count].curframe = Random(MoImage[ Mo[count].id-1].nFrameCount );

			count ++;
		}	
	}				
			
	TotalMapObject = count;
	fclose(fp);
			
	return 1;
}		





int SaveTOI2( char *filename )
{
	FILE *fp, *wfp;
	char szFilePath[ FILENAME_MAX];
	char temptoiname[ FILENAME_MAX];
	WORD i,j,k;
	int  no = 0;
	int  count = 0;
	int  obcount = 0;
	int  code = 0xffff;

	typedef struct tt
	{
		int id;
		int animationType;
		int objectitem;
		int attr2;
		int light;
		int nFrameCount;
		int dx0[10],  dy0[10],  dx1[10],  dy1[10];
	}t_object;

	MAPOBJECT  **ob;

	changemapobjectname( filename, temptoiname );
	sprintf( szFilePath, "./object/%s/%s.toi2", temptoiname, filename );


	fp = Fopen( szFilePath, "rb" );
	if( fp ) 
	{
		fclose(fp);
		DWORD fileattr = GetFileAttributes( szFilePath );
		if( fileattr & FILE_ATTRIBUTE_READONLY )
		{
			JustMsg( "'%s'篮 '佬扁傈侩'栏肺 登绢 乐嚼聪促. \n 历厘窍瘤 臼疽嚼聪促.", szFilePath );
			return 0;
		}
	}

	fp = Fopen( szFilePath, "wb" );
	if( fp == NULL ) return 0;
					
	fwrite ( &code, 2,1, fp );
	fwrite ( &TotalMapObject, 2,1, fp );
	fwrite ( &TotalMapObjectID, 2,1, fp );
	fwrite ( TempMoImageID, TotalMapObject, sizeof( int ), fp );

	for( i = 0 ; i < TotalMapObject ; i++ )
	{
		////////////// 0810 lkh 眠啊 //////////////
		Mo[i].soundno = Mo[i].soundno%1000;		//窍困 3磊府啊 角力 荤款靛 锅龋捞绊 惑困 3磊府绰 荤款靛 墨款飘捞扁 锭巩
		fwrite( &Mo[i], sizeof( MAPOBJECT ), 1, fp );
	}
	fclose(fp);		
							
	sprintf( szFilePath, "./object/%s/%s_toi2.txt", temptoiname, filename );
	fp = Fopen( szFilePath, "wt" );
	if( fp == NULL ) 
	{
		fp = Fopen( szFilePath, "rb" );
		if( fp ) 
		{
			fclose(fp);
			DWORD fileattr = GetFileAttributes( szFilePath );
			if( fileattr & FILE_ATTRIBUTE_READONLY )
			{
				JustMsg( "'%s'篮 '佬扁傈侩'栏肺 登绢 乐嚼聪促. \n 历厘窍瘤 臼疽嚼聪促.", szFilePath );
				return 0;
			}
		}
		return 0;
	}
							
	fprintf( fp, "# 0:NO Animation  1:空汗  2:馆汗  3:巩凯覆   4:巩凯覆惑怕   5:巩摧塞   6:巩摧腮惑怕\n" );
	fprintf( fp, "# 笼阑荐乐促 AnimationType Type   Dir  嘛绰规过 嘛绰鉴辑 弊覆磊 Light  Lightxy            DontBox            醚弊覆荐		\n" );
					
	ob = NULL;
	MemAlloc( ob, sizeof( MAPOBJECT * ) * TotalMapObject );
	for( i = 0 ; i < TotalMapObject ; i ++)
		MemAlloc( ob[i], sizeof( MAPOBJECT ) );
	
	obcount =0;
	
	for( j = 0 ; j < TotalMapObject ; j ++)
	{		
		if( Mo[ j].objectoritem ) // item捞搁...
		{	
			for( i = 0 ; i < obcount ; i ++)
			{
				if( ob[i]->id == Mo[ j].id ) goto CONTINUE_;
			}

			memcpy( ob[ obcount], &Mo[j], sizeof( MAPOBJECT ) );
			
			fprintf( fp, "%d   0   %d   %d  1   %d 0  1  %d 0  -30   -20 0 0 -20 20 0 0 20     %d  ",
					Mo[ j].id + 13000,
					Mo[ j].animationType,
					Mo[ j].objectoritem,
					Mo[ j].attr2,
					Mo[ j].light,
					MoImage[ Mo[ j].id -1].nFrameCount );
					
				for( k = 0 ; k < MoImage[ Mo[ j].id-1 ].nFrameCount ; k ++)
					fprintf( fp, "%d %d %d %d   ", Mo[ j].dx0[k],  Mo[ j].dy0[k],  Mo[ j].dx1[k],  Mo[ j].dy1[k] );
				fprintf( fp, "\n"  );

				obcount++;
		}	
CONTINUE_:;
	}			

	fclose(fp);	



// Binary Data Save.....
	sprintf( szFilePath, "./object/%s/%s_toi2.c", temptoiname, filename );
	fp = Fopen( szFilePath, "wb" );
	if( fp == NULL ) return 0;
							
//		fprintf( fp, "# 0:NO Animation  1:空汗  2:馆汗  3:巩凯覆   4:巩凯覆惑怕   5:巩摧塞   6:巩摧腮惑怕\n" );
//		fprintf( fp, "# 笼阑荐乐促 AnimationType Type   Dir  嘛绰规过 嘛绰鉴辑 弊覆磊 Light  Lightxy            DontBox            醚弊覆荐		\n" );

	int t;
	fwrite( &obcount, sizeof( int ), 1, fp );
	for( i = 0 ; i < obcount ; i ++)
	{
		t = ob[ i]->id + 13000;						fwrite( &t, sizeof( int ), 1, fp);
		t = 0;										fwrite( &t, sizeof( int ), 1, fp);
		t = ob[ i]->animationType;					fwrite( &t, sizeof( int ), 1, fp);
		t = ob[ i]->objectoritem;					fwrite( &t, sizeof( int ), 1, fp);
		t = 1 ; 									fwrite( &t, sizeof( int ), 1, fp);
		t = ob[i]->attr2; 							fwrite( &t, sizeof( int ), 1, fp);
		t = 0 ; 									fwrite( &t, sizeof( int ), 1, fp);
		t = 1;  									fwrite( &t, sizeof( int ), 1, fp);
		t = ob[i]->light;							fwrite( &t, sizeof( int ), 1, fp);
		t = 0;  									fwrite( &t, sizeof( int ), 1, fp);
		t = -30;									fwrite( &t, sizeof( int ), 1, fp);
		t = -20;									fwrite( &t, sizeof( int ), 1, fp);
		t = 0; 										fwrite( &t, sizeof( int ), 1, fp);
		t = 0; 										fwrite( &t, sizeof( int ), 1, fp);
		t = -20;									fwrite( &t, sizeof( int ), 1, fp);
		t = 20 ;									fwrite( &t, sizeof( int ), 1, fp);
		t = 0; 										fwrite( &t, sizeof( int ), 1, fp);
		t = 0; 										fwrite( &t, sizeof( int ), 1, fp);
		t = 20;;									fwrite( &t, sizeof( int ), 1, fp);
		t = MoImage[ ob[i]->id -1].nFrameCount;		fwrite( &t, sizeof( int ), 1, fp); // 20俺 * sizeof( int ) = 80;

		fwrite( &ob[i]->dx0, sizeof( short ), ITEM_FRAME_MAX_, fp );
		fwrite( &ob[i]->dy0, sizeof( short ), ITEM_FRAME_MAX_, fp );
		fwrite( &ob[i]->dx1, sizeof( short ), ITEM_FRAME_MAX_, fp );
		fwrite( &ob[i]->dy1, sizeof( short ), ITEM_FRAME_MAX_, fp );	// sizeof( int ) * 40  = 160///
	}
	fclose(fp );

	for( i = 0 ; i < obcount ; i ++)
		MemFree( ob[i] );
	MemFree( ob );

	// 眉农级阑 笼绢持绰促. 
	sprintf( szFilePath, "./object/%s/%s_toi2.c", temptoiname, filename );
	fp = Fopen( szFilePath, "rb" );
	sprintf( szFilePath, "./object/%s/%s_toi2.b", temptoiname, filename );
	wfp = Fopen( szFilePath, "wb" );

	DWORD fl = filelength( fileno( fp ) );

	char crc = 0, tcrc;
	for( k = 0 ; k < fl ; k ++)
	{
		fread( &tcrc, 1,1, fp );
		crc += tcrc;
		fwrite( &tcrc, 1,1, wfp );
	}

	fwrite( &crc, 1,1, wfp );

	fclose( fp );
	fclose(wfp );
											
	return 1;				
}
//////////////////////////////// 咯扁鳖瘤 ////////////////////////////////

						
void FreeTOI( void )
{
	for( int i = 0 ; i < MAX_MAPOBJECTIMAGE ; i ++)
	{
		for( int j = 0 ; j < ITEM_FRAME_MAX_ ; j ++)
		{
			MemFree( MoImage[i].spr[j].img );
		}
	}
}


///////////////////////// SoundUp lkh 荐沥 /////////////////////////		
void InsertMapObject( int moid, int x, int y )
{	
	int i;
	
	if( TotalMapObject >= MAX_MAPOBJECT_ )
	{	
		JustMsg( "澜,, 国辑 MapObject肮荐啊 5000逞菌绢夸.. 歹捞惑篮 公府俊夸.." );
		return;
	}	
	
	for( i = 0 ; i < TotalMapObject ; i ++)
	{	
		if( Mo[i].id == moid ) break;
	}	
	
	if( i == TotalMapObject )
	{	
		memset( &Mo[TotalMapObject], 0, sizeof( MAPOBJECT ) );
	}	
	else
	{	
		memcpy( &Mo[ TotalMapObject], &Mo[i], sizeof( MAPOBJECT ));
	}		
	
	Mo[TotalMapObject].id	= moid;
	Mo[TotalMapObject].x	= x;
	Mo[TotalMapObject].y	= y;

	Mo[TotalMapObject].animationType = OBJECTANI_NO;
	
	LPMAPOBJECT mo = &Mo[TotalMapObject];

									
	int frame = LoadMapObjectCSP( mo->id, &MoImage[ mo->id-1] );
	if( frame ) MoImage[ mo->id-1].nFrameCount = frame;

	Mo[TotalMapObject].soundno		= 0;
	Mo[TotalMapObject].soundframe	= 0;
	Mo[TotalMapObject].sounddelay	= 0;
	TotalMapObject ++;
}

void DeleteMapObject_sub( int no )
{	
	MAPOBJECT mo;	
	
	memcpy( &mo, &Mo[ no], sizeof( MAPOBJECT ) );
	memmove(   &Mo[no],   &Mo[no+1], sizeof(MAPOBJECT) * (MAX_MAPOBJECT_ - no - 1 ));
	TotalMapObject --;
	
	int c = 0;
	for(int i = 0 ; i < TotalMapObject ; i ++)
	{	
		if( Mo[i].id == mo.id ) c++;
	}	
	if( c == 0 )
	{
		for( i = 0 ; i < ITEM_FRAME_MAX_ ; i ++)
			MemFree( MoImage[ mo.id-1].spr[i].img );
	}
}	

void DeleteMapObject( int no )
{	

	
	if( no == -1 ) return;
	
	if( YesOrNo( "甘坷宏璃飘甫 绝局妨备 ?", "趣矫唱.." ) == IDYES )
	{}
	else
	{
		return;
	}

	DeleteMapObject_sub( no );
}	



void DeleteMapObjectAll( int no )
{	
	int j;

	
	if( no == -1 ) return;
	
	if( YesOrNo( "甘俊辑 no锅 甘坷宏璃飘甫 葛滴 绝局妨备 ????", "趣矫唱.." ) == IDYES )
	{}
	else
	{
		return;
	}
	
	for( j = 0 ; j < TotalMapObject ; j ++)
	{
		if( Mo[ j].id == no )
		{
			DeleteMapObject_sub( j );
			j--;
		}
	}
}	
	
void LoadTempSprite( int id )
{	
	static int	mapobjectno = -1;
	if( id == mapobjectno ) return;
	mapobjectno = id;
	
	char	filename[ FILENAME_MAX];
	FILE   *fp;
	int    lev;
	
	MemFree( TempMoImage.spr[0].img );
	
	lev = id / 1000;
	if( lev == 1 ) lev = 0;
	
	sprintf( filename, "./object/%d/%04d.csp", lev, id );
	fp = Fopen( filename, "rb" );
	if( fp == NULL ) return;
		fread( &TempMoImage.spr[0].xl, sizeof( short ), 1, fp);
		fread( &TempMoImage.spr[0].yl, sizeof( short ), 1, fp);
		fread( &TempMoImage.spr[0].ox, sizeof( short ), 1, fp);
		fread( &TempMoImage.spr[0].oy, sizeof( short ), 1, fp);
		fread( &TempMoImage.spr[0].size, sizeof( unsigned int ), 1, fp);
		TempMoImage.spr[0].img = NULL;
		MemAlloc( TempMoImage.spr[0].img, TempMoImage.spr[0].size );
		fread( TempMoImage.spr[0].img, TempMoImage.spr[0].size, 1, fp);
		convert565to555( &TempMoImage.spr[0] );
		fclose(fp);	
}

⌨️ 快捷键说明

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