www.pudn.com > 2007071212243513681.rar > Dialog3.cpp


// Dialog3.cpp : 实现文件 
// 
 
#include "stdafx.h" 
#include "fun.h" 
#include "Dialog3.h" 
#include "CallFun.h" 
 
extern SKILL	g_Skill[20]; 
 
UINT AutoAttack(LPVOID pParam); 
 
// CDialog3 对话框 
 
IMPLEMENT_DYNAMIC(CDialog3, CDialog) 
CDialog3::CDialog3(CWnd* pParent /*=NULL*/) 
	: CDialog(CDialog3::IDD, pParent) 
	, m_iGetResCount(0) 
	, m_iUserSkillCount(0) 
	, m_iYUserSkillCount(0) 
	, m_dwYSkillTime(0) 
	, m_OpenMutex() 
{ 
	::InitializeCriticalSection(&m_cs); 
	for (int i = 0; i < 20; i++) 
		m_dwSkillCode[i]	= 0; 
	for (int i = 0; i < 10; i++) 
		m_dwYSkillCode[i]	= 0; 
	m_pAutoWorkThread	= NULL; 
} 
 
CDialog3::~CDialog3() 
{ 
	::DeleteCriticalSection(&m_cs); 
} 
 
void CDialog3::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	DDX_Control(pDX, IDC_SKILL_LIST, m_skill_list); 
	DDX_Control(pDX, IDC_USERSKILL_LIST, m_userskill_list); 
	DDX_Control(pDX, IDC_BDATT_CHK, m_bdatt_chk); 
	DDX_Control(pDX, IDC_YSKILL_LIST, m_yskill_list); 
	DDX_Control(pDX, IDC_YUSERSKILL_LIST, m_yuserskill_list); 
	DDX_Control(pDX, IDC_ZYTIME_CMB, m_zytime_cmb); 
} 
 
 
BEGIN_MESSAGE_MAP(CDialog3, CDialog) 
	ON_BN_CLICKED(IDC_GETSKILL_BTN, OnBnClickedGetskillBtn) 
	ON_BN_CLICKED(IDC_SETSKILL_BTN, OnBnClickedSetskillBtn) 
	ON_BN_CLICKED(IDC_JOINSKILL_BTN, OnBnClickedJoinskillBtn) 
	ON_BN_CLICKED(IDC_DELSKILL_BTN, OnBnClickedDelskillBtn) 
	ON_BN_CLICKED(IDC_YJOINSKILL_BTN, OnBnClickedYjoinskillBtn) 
	ON_BN_CLICKED(IDC_YDELSKILL_BTN, OnBnClickedYdelskillBtn) 
	ON_LBN_SELCHANGE(IDC_SKILL_LIST, OnLbnSelchangeSkillList) 
	ON_BN_CLICKED(IDC_STARTATT_BTN, OnBnClickedStartattBtn) 
	ON_BN_CLICKED(IDC_STOPATT_BTN, OnBnClickedStopattBtn) 
END_MESSAGE_MAP() 
 
 
// CDialog3 消息处理程序 
BOOL CDialog3::OnInitDialog() 
{ 
	CDialog::OnInitDialog(); 
 
	wchar_t	*pwstrTime[]	= { L"10", L"20", L"30", L"40", L"50", L"60", L"70", L"80", L"90" }; 
	for (int i = 0; i < 9; i++) 
		m_zytime_cmb.InsertString(i, pwstrTime[i]); 
	m_zytime_cmb.SetCurSel(2); 
 
	UpdateData(FALSE); 
 
	return TRUE; 
} 
 
void CDialog3::OnBnClickedGetskillBtn() 
{ 
	// TODO: 在此添加控件通知处理程序代码 
	m_dwYSkillTime	= 0; 
	if ( GetSkillInfo() ) 
	{ 
		m_skill_list.ResetContent(); 
		m_userskill_list.ResetContent(); 
		m_yskill_list.ResetContent(); 
		m_yuserskill_list.ResetContent(); 
		for (DWORD i = 0; i < g_ci.dwMSkillCount; i++) 
		{ 
			if ( g_Skill[i].dwType == 1 ) 
				m_skill_list.AddString(g_Skill[i].wstrName); 
			else if ( g_Skill[i].dwType == 2 ) 
				m_yskill_list.AddString(g_Skill[i].wstrName); 
		} 
	} 
} 
 
void CDialog3::OnBnClickedSetskillBtn() 
{ 
	// TODO: 在此添加控件通知处理程序代码 
	CString	str; 
	if ( (m_iUserSkillCount = m_userskill_list.GetCount()) > 0 ) 
	{ 
		for(int i = 0; i < m_iUserSkillCount; i++) 
		{ 
			m_dwSkillCode[i]	= 0; 
			m_userskill_list.GetText(i, str); 
			for (int k = 0; k < (int)g_ci.dwMSkillCount; k++) 
				if ( str.Compare(g_Skill[k].wstrName) == 0 ) 
					m_dwSkillCode[i]	= g_Skill[k].dwCode; 
		} 
	} 
	if ( (m_iYUserSkillCount = m_yuserskill_list.GetCount()) > 0 ) 
	{ 
		for (int i = 0; i < m_iYUserSkillCount; i++) 
		{ 
			m_dwYSkillCode[i]	= 0; 
			m_yuserskill_list.GetText(i, str); 
			for (int k = 0; k < (int)g_ci.dwMSkillCount; k++) 
				if ( str.Compare(g_Skill[k].wstrName) == 0 ) 
					m_dwYSkillCode[i]	= g_Skill[k].dwCode; 
		} 
	} 
} 
 
void CDialog3::OnBnClickedJoinskillBtn() 
{ 
	// TODO: 在此添加控件通知处理程序代码 
	if ( m_skill_list.GetCount() ) 
	{ 
		CString	str; 
		int	nSelect	= m_skill_list.GetCurSel(); 
		m_skill_list.GetText(nSelect, str); 
		m_userskill_list.AddString(str); 
		m_skill_list.DeleteString(nSelect); 
	} 
} 
 
void CDialog3::OnBnClickedDelskillBtn() 
{ 
	// TODO: 在此添加控件通知处理程序代码 
	if ( m_userskill_list.GetCount() ) 
	{ 
		CString	str; 
		int	nSelect	= m_userskill_list.GetCurSel(); 
		m_userskill_list.GetText(nSelect, str); 
		m_skill_list.AddString(str); 
		m_userskill_list.DeleteString(nSelect); 
	} 
} 
 
void CDialog3::OnBnClickedYjoinskillBtn() 
{ 
	// TODO: 在此添加控件通知处理程序代码 
	if ( m_yskill_list.GetCount() ) 
	{ 
		CString	str; 
		int	nSelect	= m_yskill_list.GetCurSel(); 
		m_yskill_list.GetText(nSelect, str); 
		m_yuserskill_list.AddString(str); 
		m_yskill_list.DeleteString(nSelect); 
	} 
} 
 
void CDialog3::OnBnClickedYdelskillBtn() 
{ 
	// TODO: 在此添加控件通知处理程序代码 
	if ( m_yuserskill_list.GetCount() ) 
	{ 
		CString	str; 
		int	nSelect	= m_yuserskill_list.GetCurSel(); 
		m_yuserskill_list.GetText(nSelect, str); 
		m_yskill_list.AddString(str); 
		m_yuserskill_list.DeleteString(nSelect); 
	} 
} 
 
void CDialog3::OnLbnSelchangeSkillList() 
{ 
	// TODO: 在此添加控件通知处理程序代码 
} 
 
void CDialog3::OnBnClickedStartattBtn() 
{ 
	// TODO: 在此添加控件通知处理程序代码 
	GetDlgItem(IDC_STOPATT_BTN)->EnableWindow(TRUE); 
	GetDlgItem(IDC_STARTATT_BTN)->EnableWindow(FALSE); 
	m_pAutoWorkThread	= AfxBeginThread((AFX_THREADPROC)AutoAttack, this); 
	m_OpenMutex.Lock(); 
	m_bOpen	= TRUE; 
	m_OpenMutex.Unlock(); 
} 
 
void CDialog3::OnBnClickedStopattBtn() 
{ 
	// TODO: 在此添加控件通知处理程序代码 
	m_OpenMutex.Lock(); 
	m_bOpen	= FALSE; 
	m_OpenMutex.Unlock(); 
 
	DWORD	dwCode; 
	if ( m_pAutoWorkThread && GetExitCodeThread(m_pAutoWorkThread->m_hThread, &dwCode) ) 
	{ 
		if ( dwCode == STILL_ACTIVE ) 
		{ 
			TerminateThread(m_pAutoWorkThread->m_hThread, 0); 
			CloseHandle(m_pAutoWorkThread->m_hThread); 
			m_pAutoWorkThread	= NULL; 
		} 
	} 
 
	GetDlgItem(IDC_STARTATT_BTN)->EnableWindow(TRUE); 
	GetDlgItem(IDC_STOPATT_BTN)->EnableWindow(FALSE); 
} 
 
UINT AutoAttack(LPVOID pParam) 
{ 
	CDialog3	*pDlg3	= (CDialog3*)pParam; 
	while ( pDlg3->m_bOpen ) 
	{ 
		if ( IsMon() ) 
		{ 
			NormalAttack(); 
			Sleep(1000); 
			if ( !IsMon() ) 
			{ 
				GetRes(); 
				Sleep(500); 
				if ( !pDlg3->m_bdatt_chk.GetCheck() ) 
					Tab_Key(); 
				Sleep(500); 
			} 
			else 
			{ 
				for (int i = 0; i < pDlg3->m_iUserSkillCount; i++) 
				{ 
					if ( g_ci.iCurMP >= 20 ) 
					{ 
						SkillAttack(pDlg3->m_dwSkillCode[i]); 
						Sleep(1000); 
					} 
					if ( !IsMon() ) 
					{ 
						GetRes(); 
						Sleep(500); 
						if ( !pDlg3->m_bdatt_chk.GetCheck() ) 
							Tab_Key(); 
						Sleep(500); 
						break; 
					} 
				} 
			} 
		} 
		else 
		{ 
			if ( !pDlg3->m_bdatt_chk.GetCheck() ) 
				Tab_Key(); 
			Sleep(500); 
		} 
		if ( pDlg3->m_yuserskill_list.GetCount() > 0 ) 
		{ 
			if ( (::GetTickCount() - pDlg3->m_dwYSkillTime) >= (DWORD)(((pDlg3->m_zytime_cmb.GetCurSel() * 10) + 10) * 60000) ) 
			{ 
				pDlg3->m_dwYSkillTime	= ::GetTickCount(); 
				for (int i = 0; i < pDlg3->m_yuserskill_list.GetCount(); i++) 
				{ 
					SkillAttack(pDlg3->m_dwYSkillCode[i]); 
					Sleep(1000); 
				} 
			} 
		} 
	} 
	return 0; 
}