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

📄 logetcpage.cpp

📁 墨香最新私服
💻 CPP
字号:
// LogEtcPage.cpp : implementation file
//

#include "stdafx.h"
#include "ds_rmtool.h"
#include "LogEtcPage.h"
#include "RMNetwork.h"
#include "LogDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CLogEtcPage property page

IMPLEMENT_DYNCREATE(CLogEtcPage, CLDPropPage)

CLogEtcPage::CLogEtcPage() : CLDPropPage(CLogEtcPage::IDD)
{
	//{{AFX_DATA_INIT(CLogEtcPage)
	m_bOneDay = FALSE;
	m_nLogKind = -1;
	//}}AFX_DATA_INIT
	m_bStart = FALSE;
	
	m_CheatLogTable.Initialize( 1000 );
	m_HackingLogTable.Initialize( 1000 );
}

CLogEtcPage::~CLogEtcPage()
{
	ReleaseCheatLogTable();
	ReleaseHackingLogTable();
}

void CLogEtcPage::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CLogEtcPage)
	DDX_Control(pDX, IDC_DATETIMEPICKER_END, m_EndTime);
	DDX_Control(pDX, IDC_DATETIMEPICKER_START, m_StartTime);
	DDX_Control(pDX, IDC_LISTCTRL_ETCLOG, m_lcEtc);
	DDX_Control(pDX, IDC_EDIT_LOG_CHARNAME, m_etCharName);
	DDX_Control(pDX, IDC_EDIT_CHARIDX, m_etCharIdx);
	DDX_Check(pDX, IDC_CHECK_LOG_ONEDAY, m_bOneDay);
	DDX_Radio(pDX, IDC_RADIO1, m_nLogKind);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CLogEtcPage, CLDPropPage)
	//{{AFX_MSG_MAP(CLogEtcPage)
	ON_WM_CREATE()
	ON_BN_CLICKED(IDC_BUTTON_LOG_SEARCH, OnButtonLogSearch)
	ON_BN_CLICKED(IDC_RADIO1, OnRadio1)
	ON_BN_CLICKED(IDC_RADIO2, OnRadio2)
	ON_BN_CLICKED(IDC_BTN_SAVETOFILE, OnBtnSavetofile)
	ON_BN_CLICKED(IDC_CHECK_LOG_ONEDAY, OnCheckLogOneday)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CLogEtcPage message handlers

int CLogEtcPage::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CLDPropPage::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	return 0;
}

BOOL CLogEtcPage::OnInitDialog() 
{
	CLDPropPage::OnInitDialog();
	
	m_bOneDay = TRUE;
	m_nLogKind = 0;	
	m_dwCharIdx = 0;

//	m_Font.CreatePointFont(100, "Arial");
//	m_lcEtc.SetFont( &m_Font );
	
	UpdateData( FALSE );
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CLogEtcPage::SetCheatLog( TMSG_CHEATLOG* pMsg )
{
	for( int i = 0; i < pMsg->wCount; ++i )
	{
		CHEATLOG* pData = new CHEATLOG;
		memcpy( pData, &pMsg->sLog[i], sizeof(CHEATLOG) );

		m_CheatLogTable.Add( pData, pData->dwLogIdx );
	}

	InitListControl( eEtcLogKind_Cheat );
	UpdateListControl( eEtcLogKind_Cheat );
}

void CLogEtcPage::SetHackingLog( TMSG_HACKINGLOG* pMsg )
{
	for( int i = 0; i < pMsg->wCount; ++i )
	{
		HACKINGLOG* pData = new HACKINGLOG;
		memcpy( pData, &pMsg->sLog[i], sizeof(HACKINGLOG) );

		m_HackingLogTable.Add( pData, pData->dwLogIdx );
	}

	InitListControl( eEtcLogKind_Hacking );
	UpdateListControl( eEtcLogKind_Hacking );
}

void CLogEtcPage::OnButtonLogSearch() 
{
	CString sName;

	if( m_etCharName.GetWindowTextLength() == 0 )
	{
		SetCharacterIdx( 0 );
	}
	else
	{
		m_etCharName.GetWindowText( sName );
	
		// Search
		TMSG_CHECKNAME Msg;
		Msg.Category = MP_RMTOOL_GAMELOG;
		Msg.Protocol = MP_RMTOOL_QUERY_CHARIDX_SYN;
		Msg.dwTemplateIdx = m_pDocument->GetDocumentIdx();
		strcpy( Msg.sName, (char*)(LPCTSTR)sName );

		NETWORK->Send( &Msg, sizeof(TMSG_CHECKNAME) );

		m_pDocument->m_dwPage = 2;
	}
}

void CLogEtcPage::SetCharacterIdx( DWORD dwCharIdx )
{
	char temp[128] = {0, };
	sprintf( temp, "%d", dwCharIdx );
	m_etCharIdx.SetWindowText( temp );
	m_etCharIdx.EnableWindow( TRUE );
	m_dwCharIdx = dwCharIdx;

	CString sName, sSDate, sEDate;
	// Date
	if( m_bOneDay )
	{
		m_StartTime.GetWindowText( sSDate );
		sEDate.Empty();		
	}
	else
	{
		m_StartTime.GetWindowText( sSDate );
		m_EndTime.GetWindowText( sEDate );
	}
	
	// Search
	TMSG_GAMELOGSEARCH GameLogSearch;
	GameLogSearch.Category = MP_RMTOOL_GAMELOG;

	switch( m_nLogKind )
	{
	case eEtcLogKind_Cheat:
		{
			GameLogSearch.Protocol = MP_RMTOOL_CHEATLOG_SYN;
			ReleaseCheatLogTable();
		}
		break;
	case eEtcLogKind_Hacking:
		{
			GameLogSearch.Protocol = MP_RMTOOL_HACKINGLOG_SYN;
			ReleaseHackingLogTable();
		}
		break;
	}

	GameLogSearch.dwTemplateIdx = m_pDocument->GetDocumentIdx();
	GameLogSearch.wServer = 0;
	GameLogSearch.wType = m_nLogKind;
//	strcpy( GameLogSearch.str, (char*)(LPCTSTR)sName );
	GameLogSearch.dwItem = m_dwCharIdx;
	GameLogSearch.bDayOnly = m_bOneDay;
	strcpy( GameLogSearch.sSDate, (char*)(LPCTSTR)sSDate );
	strcpy( GameLogSearch.sEDate, (char*)(LPCTSTR)sEDate );

	NETWORK->Send( &GameLogSearch, sizeof(TMSG_GAMELOGSEARCH) );

	m_pDocument->StartDlg();
}

void CLogEtcPage::OnRadio1() 
{
	m_nLogKind = eEtcLogKind_Cheat;
}

void CLogEtcPage::OnRadio2() 
{
	m_nLogKind = eEtcLogKind_Hacking;
}

void CLogEtcPage::ReleaseCheatLogTable()
{
	CHEATLOG* pData = NULL;
	m_CheatLogTable.SetPositionHead();
	while( pData = m_CheatLogTable.GetData() )
		delete pData;
	m_CheatLogTable.RemoveAll();	
}

void CLogEtcPage::ReleaseHackingLogTable()
{
	HACKINGLOG* pData = NULL;
	m_HackingLogTable.SetPositionHead();
	while( pData = m_HackingLogTable.GetData() )
		delete pData;
	m_HackingLogTable.RemoveAll();
}

void CLogEtcPage::InitListControl( DWORD dwKind )
{
	// Delete all of the columns.
	int i = 0;
	int nColumnCount = m_lcEtc.GetHeaderCtrl()->GetItemCount();
	for( i = 0; i < nColumnCount; ++i )
		m_lcEtc.DeleteColumn( 0 );
	m_lcEtc.DeleteAllItems();

	switch( dwKind )
	{
	case eEtcLogKind_Cheat:
		{
			char* tcolumn[7] = { "LogIdx", "CharIdx", "Type", "Parameter", "ItemDBIdx", "ItemIdx", "LogDate" };
			int tcolumnsize[7] = { 80, 80, 50, 50, 80, 80, 120 };

			// listctrl column 汲沥
			LV_COLUMN lvcolumn;
			lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
			lvcolumn.fmt = LVCFMT_CENTER;
			for( i = 0; i < 7; ++i )
			{
				lvcolumn.iSubItem = i;
				lvcolumn.cx = tcolumnsize[i];
				lvcolumn.pszText = tcolumn[i];
				m_lcEtc.InsertColumn( i, &lvcolumn );
			}
		}
		break;
	case eEtcLogKind_Hacking:
		{
			char* tcolumn[4] = { "LogIdx", "CharIdx", "Kind", "LogDate" };
			int tcolumnsize[4] = { 80, 80, 50, 120 };

			// listctrl column 汲沥
			LV_COLUMN lvcolumn;
			lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH;
			lvcolumn.fmt = LVCFMT_CENTER;
			for( i = 0; i < 4; ++i )
			{
				lvcolumn.iSubItem = i;
				lvcolumn.cx = tcolumnsize[i];
				lvcolumn.pszText = tcolumn[i];
				m_lcEtc.InsertColumn( i, &lvcolumn );
			}
		}
		break;
	}
	// style
	DWORD dwExStyle = m_lcEtc.GetExtendedStyle();
	dwExStyle |= LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT;
	m_lcEtc.SetExtendedStyle( dwExStyle );
}

void CLogEtcPage::UpdateListControl( DWORD dwKind )
{
	m_lcEtc.DeleteAllItems();

	char temp[256];	
	LV_ITEM lvitem;

	switch( dwKind )
	{
	case eEtcLogKind_Cheat:
		{
			CHEATLOG* pData = NULL;
			m_CheatLogTable.SetPositionHead();
			while( pData = m_CheatLogTable.GetData() )
			{
				lvitem.iItem = m_lcEtc.GetItemCount();	// 青
				
				lvitem.mask = LVIF_TEXT;
				lvitem.stateMask = LVIS_SELECTED;
				lvitem.state = INDEXTOSTATEIMAGEMASK(1);
				lvitem.iSubItem = 0;	
				lvitem.pszText = itoa( pData->dwLogIdx, temp, 10 );
				
				m_lcEtc.InsertItem( &lvitem );
				m_lcEtc.SetItemText( lvitem.iItem, 1, itoa( pData->dwChrIdx, temp, 10 ) );
				m_lcEtc.SetItemText( lvitem.iItem, 2, itoa( pData->dwLogType, temp, 10 ) );
				m_lcEtc.SetItemText( lvitem.iItem, 3, itoa( pData->dwParam, temp, 10 ) );
				m_lcEtc.SetItemText( lvitem.iItem, 4, itoa( pData->dwItemDBIdx, temp, 10 ) );
				m_lcEtc.SetItemText( lvitem.iItem, 5, itoa( pData->dwItemIdx, temp, 10 ) );
				m_lcEtc.SetItemText( lvitem.iItem, 6, pData->sLogDate );
			}
		}
		break;
	case eEtcLogKind_Hacking:
		{
			HACKINGLOG* pData = NULL;
			m_HackingLogTable.SetPositionHead();
			while( pData = m_HackingLogTable.GetData() )
			{
				lvitem.iItem = m_lcEtc.GetItemCount();	// 青
				
				lvitem.mask = LVIF_TEXT;
				lvitem.stateMask = LVIS_SELECTED;
				lvitem.state = INDEXTOSTATEIMAGEMASK(1);
				lvitem.iSubItem = 0;	
				lvitem.pszText = itoa( pData->dwLogIdx, temp, 10 );
				
				m_lcEtc.InsertItem( &lvitem );
				m_lcEtc.SetItemText( lvitem.iItem, 1, itoa( pData->dwChrIdx, temp, 10 ) );
				m_lcEtc.SetItemText( lvitem.iItem, 2, itoa( pData->dwCheatKind, temp, 10 ) );
				m_lcEtc.SetItemText( lvitem.iItem, 3, pData->sLogDate );
			}
		}
		break;
	}
}

void CLogEtcPage::OnBtnSavetofile() 
{
	switch( m_nLogKind )
	{
	case eEtcLogKind_Cheat:
		{
			DeleteFile( "CheatLog.txt" );

			FILE* fp = fopen( "CheatLog.txt", "a+" );
			if( !fp )
				return;

			char* tcolumn[7] = { "LogIdx", "CharIdx", "Type", "Parameter", "ItemDBIdx", "ItemIdx", "LogDate" };
			fprintf( fp, "%s\t%s\t%s\t%s\t%s\t%s\t%s\n", tcolumn[0], tcolumn[1], tcolumn[2], tcolumn[3],
				tcolumn[4], tcolumn[5], tcolumn[6] );

			char temp[128] = {0, };
			CHEATLOG* pData = NULL;
			m_CheatLogTable.SetPositionHead();
			while( pData = m_CheatLogTable.GetData() )
			{
				fprintf( fp, "%d\t%d\t%d\t%d\t%d\t%s\t%s\n", pData->dwLogIdx, pData->dwChrIdx, pData->dwLogType,
					pData->dwParam, pData->dwItemDBIdx, GetItemName( pData->dwItemIdx, temp),pData->sLogDate );
			}

			fclose( fp );
		}
		break;

	case eEtcLogKind_Hacking:
		{
			DeleteFile( "HackingLog.txt" );

			FILE* fp = fopen( "HackingLog.txt", "a+" );
			if( !fp )
				return;

			char* tcolumn[4] = { "LogIdx", "CharIdx", "Kind", "LogDate" };
			fprintf( fp, "%s\t%s\t%s\t%s\n", tcolumn[0], tcolumn[1], tcolumn[2], tcolumn[3] );

			char temp[128] = {0, };
			HACKINGLOG* pData = NULL;
			m_HackingLogTable.SetPositionHead();
			while( pData = m_HackingLogTable.GetData() )
			{
				fprintf( fp, "%d\t%d\t%d\t%s\n", pData->dwLogIdx, pData->dwChrIdx, pData->dwCheatKind, pData->sLogDate );
			}

			fclose( fp );
		}
		break;
	}
}

char* CLogEtcPage::GetItemName( DWORD dwItemIdx, char* temp )
{
	ITEM_INFO* pItem = GAMERESRCMNGR->GetItemInfo( dwItemIdx );

	if( pItem == NULL )
		sprintf( temp, "???" );
	else
		sprintf( temp, "%s", pItem->ItemName );

	return temp;
}

void CLogEtcPage::OnCheckLogOneday() 
{
	m_bOneDay = !m_bOneDay;
//	m_StartTime.EnableWindow( !m_bOneDay );
	m_EndTime.EnableWindow( !m_bOneDay );
	UpdateData( FALSE );
}

void CLogEtcPage::ChangeFont()
{
	m_Font.CreatePointFont(100, "Arial");
	m_lcEtc.SetFont( &m_Font );
}

⌨️ 快捷键说明

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