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

📄 mirminimap.cpp

📁 传奇世界网络游戏的一个小外挂,大家可以参考借鉴一下
💻 CPP
字号:
// MirMiniMap.cpp: implementation of the CMirMiniMap class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MirMiniMap.h"
#include <stdio.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CMirMiniMap::CMirMiniMap()
{
	m_fpWilFile = NULL;
	m_ImageData = NULL;

	m_dwImageWidth = 0;
	m_dwImageHeight = 0;
	m_dwMapIndex = 0;

	m_xpos = 0;
	m_ypos = 0;

}

CMirMiniMap::~CMirMiniMap()
{

}

BOOL CMirMiniMap::InitMiniMap(char *wixfile, char *wilfile)
{

	m_fpWilFile = fopen( wilfile, "rb" );
	if( m_fpWilFile == NULL )
		return FALSE;
	m_dwCntMMap = LoadOfs( wixfile, &m_pResOfs );
	if( m_dwCntMMap == 0 || m_pResOfs == NULL )
		return FALSE;
	if( !LoadPal( m_BitmapHeader.pals ))
		return FALSE;

	return TRUE;
}



DWORD	CMirMiniMap::LoadOfs( char * szWixFile, DWORD ** ofsbuf )
{
	FILE * fp = NULL;
	DWORD	dwcnt = 0;
	fp = fopen( szWixFile, "rb" );
	if( fp == NULL )
		return 0;
	fseek( fp, 0x2c, SEEK_SET );
	fread( &dwcnt, 4, 1, fp );
	if( dwcnt == 0 )
	{
		fclose( fp );
		return 0;
	}
	*ofsbuf = new DWORD[dwcnt];
	fread( (void*)(*ofsbuf), dwcnt* 4, 1, fp );
	fclose( fp );
	return dwcnt;
}

char	*	CMirMiniMap::LoadBuf( DWORD idx, DWORD & width, DWORD & height )
{	
	char	*	pData = NULL;
	WORD	w,h;
	DWORD	dwSize;
	if( m_fpWilFile == NULL )
		return	NULL;
	fseek( m_fpWilFile, m_pResOfs[idx], SEEK_SET );
	fread( &w, 2, 1, m_fpWilFile );
	if( w == 0 )
	{
		return NULL;
	}
	fread( &h, 2, 1, m_fpWilFile );
	if( h == 0 )
	{
		return NULL;
	}
	width = w;
	height = h;
	dwSize = width * height;
	pData = new char[dwSize];
	if( pData == NULL )
		return NULL;
	fseek( m_fpWilFile, 4, SEEK_CUR );
	fread( (void*)pData, dwSize, 1, m_fpWilFile );

	return pData;
}

BOOL	CMirMiniMap::LoadPal( char * ppal)
{
	if( ppal == NULL )
		return FALSE;
	fseek( m_fpWilFile, 0x38, SEEK_SET );
	if( ftell( m_fpWilFile ) != 0x38 )
		return FALSE;
	fread( (void*)ppal, 1024, 1, m_fpWilFile);
	return TRUE;
}

BOOL CMirMiniMap::SetMMap(DWORD index)
{
//	BITMAP	bm;

	if( m_ImageData != NULL )
		delete []m_ImageData;
	m_ImageData = LoadBuf( index-1, m_dwImageWidth, m_dwImageHeight );
	if( m_ImageData == NULL )
		return FALSE;
	if( m_dwImageWidth == 0 || m_dwImageHeight == 0 )
		return FALSE;
	BITMAPFILEHEADER	bfheader;
	MakeBitmapHeader( &bfheader, &m_BitmapHeader.header , m_dwImageWidth, m_dwImageHeight, 8 );
	return TRUE;
}
int CMirMiniMap::MakeBitmapHeader( BITMAPFILEHEADER * pBfHeader, BITMAPINFOHEADER * pBiHeader, int width, int height, int bits )
{
	int imagesize = width * height * (bits/ 8 );
	int headersize = sizeof( BITMAPFILEHEADER ) + sizeof( BITMAPINFOHEADER );
	memset( (void*)pBfHeader, 0, sizeof( BITMAPFILEHEADER ) );
	memset( (void*)pBiHeader, 0, sizeof( BITMAPINFOHEADER ) );
	if( bits == 8 )
	{
		headersize += sizeof( DWORD) * 256;
		pBiHeader->biClrImportant = 0x100;
		pBiHeader->biClrUsed = 0x100;
	}

	/*
	if( (balian % 4) )
	{
		imagesize = width * height * ( bits/8  );
	}
	*/
	pBfHeader->bfSize = headersize + imagesize;
	pBfHeader->bfType = 0x4d42;
	pBfHeader->bfOffBits = headersize;

	pBiHeader->biWidth = width;
	pBiHeader->biHeight = height;
	pBiHeader->biBitCount = bits;
	pBiHeader->biPlanes = 1;
	pBiHeader->biCompression = 0;
	pBiHeader->biSize = 40;
	pBiHeader->biSizeImage = imagesize;
	return 1;

}

void CMirMiniMap::Draw(HDC dc, int x, int y, int w, int h )
{
	if( m_ImageData == NULL )
		return;
	SetDIBitsToDevice( dc, x, y, w, h, (m_xpos + m_xpos/2 ) - (w/2), (m_dwImageHeight - m_ypos - (h/2)), 0, m_dwImageHeight,(void*)m_ImageData, (BITMAPINFO*)&m_BitmapHeader, DIB_RGB_COLORS );
	SetPixel( dc, x + w/2,y + h/2, RGB( 255,255,255));
}

void CMirMiniMap::SetCurPos(int x, int y)
{
	m_xpos = x;
	m_ypos = y;
}

⌨️ 快捷键说明

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