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

📄 齐卡卡dlg.cpp

📁 arcAE中自己编写面积,长度测量工具,返回测量结果
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			::SetKeyData(false,NULL);
			break;
		}
		if(InfoMyRole.nCurrentMp>(::GetDlgItemInt(this->m_hWnd,IDC_SKILLEDIT2,NULL,NULL)))
		{
			nSelect=m_SkillCombo1.GetCurSel();
			::SetKeyData(true,0x70+nSelect);
			::SendMessage(hWndZT,WM_KEYDOWN,0x70+nSelect,::MapVirtualKey(0x70+nSelect,NULL));
			::SetKeyData(false,NULL);
			break;
		}
		if(InfoMyRole.nCurrentMp>(::GetDlgItemInt(this->m_hWnd,IDC_SKILLEDIT3,NULL,NULL)))
		{
			nSelect=m_SkillCombo1.GetCurSel();
			::SetKeyData(true,0x70+nSelect);
			::SendMessage(hWndZT,WM_KEYDOWN,0x70+nSelect,::MapVirtualKey(0x70+nSelect,NULL));
			::SetKeyData(false,NULL);
			break;
		}

		break;

	default:
		break;
	}
	
	CDialog::OnTimer(nIDEvent);
}

void CMyDlg::OnStart() 
{
	// TODO: Add your control notification handler code here
	if(NULL==bStart)
	{
		if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_STATECHECK1))
		{
			SetTimer(STATETIMER1,(::GetDlgItemInt(this->m_hWnd,IDC_STATEEDIT1,NULL,NULL))*1000+150,NULL);
		}
		if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_STATECHECK2))
		{
			SetTimer(STATETIMER2,(::GetDlgItemInt(this->m_hWnd,IDC_STATEEDIT2,NULL,NULL))*1000+350,NULL);
		}
		if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_STATECHECK3))
		{
			SetTimer(STATETIMER3,(::GetDlgItemInt(this->m_hWnd,IDC_STATEEDIT3,NULL,NULL))*1000+550,NULL);
		}

		SetTimer(SKILLTIMER,2000,NULL);
				
		bStart=true;
		::SetDlgItemText(this->m_hWnd,IDC_START,"停止");
		if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_AUTOWORKCHECK) || BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_AUTOPICKUPCHECK))
		{
			bControlAuto=true;
			//如果设置了定点打怪,给全局变量赋值
			if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_CENTERCHECK))
			{
				AutoSetPoint.x=InfoMyRole.InfoRole.nCoorPointX;
				AutoSetPoint.y=InfoMyRole.InfoRole.nCoorPointY;
				nRange=::GetDlgItemInt(this->m_hWnd,IDC_RANGEEDIT,NULL,NULL);
				bFixPoint=true;
			}
					
			::CloseHandle(::CreateThread(NULL,NULL,SetAuto,this->m_hWnd,NULL,NULL));
		}

		//初始化过滤物品名称
		InfoPickUp.n=m_GoodsList.GetCount();
		for(int i=0;i<InfoPickUp.n;i++)
		{
			m_GoodsList.GetText(i,InfoPickUp.PickUpName[i]);
		}
		
	}
	else
	{
		if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_STATECHECK1))
		{
			KillTimer(STATETIMER1);
		}
		if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_STATECHECK2))
		{
			KillTimer(STATETIMER2);
		}
		if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_STATECHECK3))
		{
			KillTimer(STATETIMER3);
		}
		if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_AUTOWORKCHECK) || BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_AUTOPICKUPCHECK))
		{
			bControlAuto=NULL;
			bFixPoint=NULL;
		}
				
		KillTimer(SKILLTIMER);

		bStart=NULL;
		
		::SetDlgItemText(this->m_hWnd,IDC_START,"开始");
	}
	
}
void CMyDlg::OnClose() 
{
	// TODO: Add your message handler code here and/or call default
		if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_STATECHECK1))
		{
			KillTimer(STATETIMER1);
		}
		if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_STATECHECK2))
		{
			KillTimer(STATETIMER2);
		}
		if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_STATECHECK3))
		{
			KillTimer(STATETIMER3);
		}
		if(BST_CHECKED==::IsDlgButtonChecked(this->m_hWnd,IDC_AUTOWORKCHECK))
		{
			KillTimer(AUTOWORKTIMER);
		}
		
		KillTimer(SKILLTIMER);
		::InitHook(false,dwThreadIDZT,hProcessZT);
	
	CDialog::OnClose();
}

//负责自动捡物和打怪的线程
DWORD WINAPI SetAuto(LPVOID lpParameter)
{//1
	//bControlAuto起到线程控制的作用
	HWND	hDlgWnd=(HWND)lpParameter;
	POINT   PMove ;
	POINT   PSend ;
	int     nSend =0;
	int     n,i,j;//计数用
	int     nSel;
	int     tempCmpX1,tempCmpX2;
	int     tempCmpY1,tempCmpY2;
	bool    bHaveCanANpc=NULL;
	bool    bHaveCanProp=NULL;
	while(bControlAuto)
	{//2
		
		//如果当前选中的怪为NULL
		if(NULL==InfoSelObject.dwStartAddress)
		{//3
			bHaveCanANpc=NULL;
			bHaveCanProp=NULL;
			//判别地上是否有符合条件的道具
		    for(n=0;n<(int)InfoByProp.nByPropCount;n++)
			{
				if(BST_CHECKED==::IsDlgButtonChecked(hDlgWnd,IDC_FILTERCHECK))
				{
					for(i=0;i<InfoPickUp.n;i++)
					{
						if(NULL==::strcmp(InfoPickUp.PickUpName[i],InfoByProp.nProp[n].szName))
						{
							bHaveCanProp=true;
							nSel=n;
							break;
						}
						
					}
				}
				else
				{
					bHaveCanProp=true;
				}
				if(bHaveCanProp)
					break;
			}//判别地上是否有符合条件的道具

			if(BST_CHECKED==::IsDlgButtonChecked(hDlgWnd,IDC_AUTOPICKUPCHECK) 
				&& 
				true==bHaveCanProp)
			{//4
				//选中符合条件,具离玩家最近的道具
				for(n=0;n<(int)InfoByProp.nByPropCount;n++)
				{//5
					if(BST_CHECKED==::IsDlgButtonChecked(hDlgWnd,IDC_FILTERCHECK))
					{//6
						for(i=0;i<InfoPickUp.n;i++)
						{//7
							if(NULL==::strcmp(InfoPickUp.PickUpName[i],InfoByProp.nProp[n].szName))
							{//8
								tempCmpX1=abs(InfoByProp.nProp[nSel].nCoorPointX-InfoMyRole.InfoRole.nCoorPointX);
								tempCmpX2=abs(InfoByProp.nProp[n].nCoorPointX-InfoMyRole.InfoRole.nCoorPointX);
								tempCmpY1=abs(InfoByProp.nProp[nSel].nCoorPointY-InfoMyRole.InfoRole.nCoorPointY);
								tempCmpY2=abs(InfoByProp.nProp[n].nCoorPointY-InfoMyRole.InfoRole.nCoorPointY);
								if((tempCmpX1*tempCmpX1+tempCmpY1*tempCmpY1)
									>
									(tempCmpX2*tempCmpX2+tempCmpY2*tempCmpY2))
								{//9
							
									nSel=n;
								}//-9
			
							}//-8
						}//-7
					}//-6
					else
					{//6
						tempCmpX1=abs(InfoByProp.nProp[nSel].nCoorPointX-InfoMyRole.InfoRole.nCoorPointX);
						tempCmpX2=abs(InfoByProp.nProp[n].nCoorPointX-InfoMyRole.InfoRole.nCoorPointX);
						tempCmpY1=abs(InfoByProp.nProp[nSel].nCoorPointY-InfoMyRole.InfoRole.nCoorPointY);
						tempCmpY2=abs(InfoByProp.nProp[n].nCoorPointY-InfoMyRole.InfoRole.nCoorPointY);
						if((tempCmpX1*tempCmpX1+tempCmpY1*tempCmpY1)
							>
						(tempCmpX2*tempCmpX2+tempCmpY2*tempCmpY2))
						{//7
							
							nSel=n;
						}//-7
					}//-6
				}//-5

				PMove.x=InfoByProp.nProp[nSel].nCoorPointX-InfoMyRole.InfoRole.nCoorPointX;
				PMove.y=InfoByProp.nProp[nSel].nCoorPointY-InfoMyRole.InfoRole.nCoorPointY;
								
				if(PMove.x<-3)
				{//5
					PMove.x=0-3;
				}//-5
				else if(PMove.x>3)
				{//5
					PMove.x=3;
				}//-5
				if(PMove.y<-3)
				{//5
					PMove.y=0-3;
				}//-5
				else if(PMove.y>3)
				{//5
					PMove.y=3;
				}//-5
				PSend.x=PMove.x*64+485;
				PSend.y=PMove.y*32+395;
				::SetCursorData(true,&PSend);
				nSend=(PSend.y<<16) | PSend.x;
				::SendMessage(hWndZT,WM_MOUSEMOVE,NULL,nSend);
				::SendMessage(hWndZT,WM_LBUTTONDOWN,NULL,nSend);
				::SendMessage(hWndZT,WM_LBUTTONUP,NULL,nSend);
				::SetCursorData(false,NULL);
				
				if(2>abs(PMove.x) && 2>abs(PMove.y))
				{//5
					::SetKeyData(true,0xc0);
					::SendMessage(hWndZT,WM_KEYDOWN,0xc0,::MapVirtualKey(0xc0,NULL));
					::SetKeyData(false,NULL);
				}//-5
			}//-4
			
			else 
			{//4
				//如果傍边有怪,则进行判断哪个怪符合条件
				if(InfoActiveNpc.nANpcCount)
				{//5
					bHaveCanANpc=NULL;
					nSel=NULL;
					for(n=0;n<(int)InfoActiveNpc.nANpcCount;n++)
					{//6
						
						tempCmpX1=abs(InfoActiveNpc.stANpc[nSel].nCoorPointX-InfoMyRole.InfoRole.nCoorPointX);
						tempCmpX2=abs(InfoActiveNpc.stANpc[n].nCoorPointX-InfoMyRole.InfoRole.nCoorPointX);
						tempCmpY1=abs(InfoActiveNpc.stANpc[nSel].nCoorPointY-InfoMyRole.InfoRole.nCoorPointY);
						tempCmpY2=abs(InfoActiveNpc.stANpc[n].nCoorPointY-InfoMyRole.InfoRole.nCoorPointY);
						if(bFixPoint)//如果选中了定点打怪
						{//7
							if( (InfoActiveNpc.stANpc[n].nCoorPointX >= (AutoSetPoint.x-nRange))
								&&
								(InfoActiveNpc.stANpc[n].nCoorPointX <= (AutoSetPoint.x+nRange))
								&&
								(InfoActiveNpc.stANpc[n].nCoorPointY >= (AutoSetPoint.y-nRange))
								&&
								(InfoActiveNpc.stANpc[n].nCoorPointY <= (AutoSetPoint.y+nRange)))
							{//8
								if((tempCmpX1*tempCmpX1+tempCmpY1*tempCmpY1)
									>
									(tempCmpX2*tempCmpX2+tempCmpY2*tempCmpY2))
								{//9									
									if(InfoActiveNpc.stANpc[n].nAllHp==1
										&&
										NULL != ::strcmp(InfoActiveNpc.stANpc[n].szName,"野果")
										&&
										InfoActiveNpc.stANpc[n].nGrade>0x01000000
										&&
										InfoActiveNpc.lpANpc[n] != hPre
										)
									{//10
										nSel=n;
										bHaveCanANpc=true;
									}//-10
									else
									{//10
										if(InfoActiveNpc.stANpc[n].nCurrentHp != NULL
										&&
										InfoActiveNpc.stANpc[n].nGrade>0x01000000
										&&
										InfoActiveNpc.lpANpc[n] != hPre)
										{//11
											nSel=n;
											bHaveCanANpc=true;
										}//-11
									}//-10

								}//-9
								else
								{//9
									if(NULL==nSel)
									{//10
										if(InfoActiveNpc.stANpc[n].nGrade>0x01000000
											&&
											InfoActiveNpc.lpANpc[n] != hPre)
										{//11
											nSel=n;
											bHaveCanANpc=true;
										}//-11
									}//-10
								}//-9
							}//-8
						}//-7
						else//如果没有选定点打怪
						{//7
							if((tempCmpX1*tempCmpX1+tempCmpY1*tempCmpY1)
								>
								(tempCmpX2*tempCmpX2+tempCmpY2*tempCmpY2))
							{//8
								if(InfoActiveNpc.stANpc[n].nAllHp==1 
									&&
									NULL != ::strcmp(InfoActiveNpc.stANpc[n].szName,"野果")
									&&
									InfoActiveNpc.stANpc[n].nGrade>0x01000000
									&&
									InfoActiveNpc.lpANpc[n] != hPre)
								{//9
									nSel=n;
									bHaveCanANpc=true;
								}//-9
								else
								{//9
									if( InfoActiveNpc.lpANpc[n] != hPre
										&&
										InfoActiveNpc.stANpc[n].nCurrentHp != NULL
										&&
										InfoActiveNpc.stANpc[n].nGrade>0x01000000)
									{//10
										nSel=n;
										bHaveCanANpc=true;
									}//-10
								}//-9
							}//-8
						}//-7

					}//-6
				}//-5
				//如果有怪符合条件的怪,则去杀
				if(bHaveCanANpc)
				{//5
					PMove.x=InfoActiveNpc.stANpc[nSel].nCoorPointX-InfoMyRole.InfoRole.nCoorPointX;
					PMove.y=InfoActiveNpc.stANpc[nSel].nCoorPointY-InfoMyRole.InfoRole.nCoorPointY;
					if(PMove.x<-3)
					{//6
						PMove.x=0-3;
					}//-6
					else if(PMove.x>3)
					{//6
						PMove.x=3;
					}//-6
					if(PMove.y<-3)
					{//6
						PMove.y=0-3;
					}//-6
					else if(PMove.y>3)
					{//6
						PMove.y=3;
					}//-6
					PSend.x=PMove.x*64+510;
					PSend.y=PMove.y*32+374;
					::SetCursorData(true,&PSend);
					nSend=(PSend.y<<16) | PSend.x;
					::SendMessage(hWndZT,WM_MOUSEMOVE,NULL,nSend);
					::SendMessage(hWndZT,WM_LBUTTONDOWN,NULL,nSend);
					::SendMessage(hWndZT,WM_LBUTTONUP,NULL,nSend);
					::SetCursorData(false,NULL);
				}//-5
				
				//如果没有怪被选中,则判断自已的坐标是否在打怪区内
				else
				{//5
					if(bFixPoint)
					{//6
						PMove.x=InfoMyRole.InfoRole.nCoorPointX-AutoSetPoint.x;
						PMove.y=InfoMyRole.InfoRole.nCoorPointY-AutoSetPoint.y;
					}//-6
					else
					{//6
						PMove.x=3;
						PMove.y=3;
					}//-6
					if(PMove.x<-3)
					{//6
						PMove.x=0-3;
					}//-6
					else if(PMove.x>3)
					{//6
						PMove.x=3;
					}//-6
					if(PMove.y<-3)
					{//6
						PMove.y=0-3;
					}//-6
					else if(PMove.y>3)
					{//6
						PMove.y=3;
					}//-6
					PSend.x=512-PMove.x*64;
					PSend.y=384-PMove.y*32;
					::SetCursorData(true,&PSend);
					nSend=(PSend.y<<16) | PSend.x;
					::SendMessage(hWndZT,WM_MOUSEMOVE,NULL,nSend);
					::SendMessage(hWndZT,WM_LBUTTONDOWN,NULL,nSend);
					::SendMessage(hWndZT,WM_LBUTTONUP,NULL,nSend);
					::SetCursorData(false,NULL);
				}//-5
				//如果没有怪被选中,则判断自已的坐标是否在打怪区内				
			}//-4								
		}//-3
		
		//如果有怪被选中
		else
		{//3
			PMove.x=InfoSelObject.SelInfo.nCoorPointX-InfoMyRole.InfoRole.nCoorPointX;
			PMove.y=InfoSelObject.SelInfo.nCoorPointY-InfoMyRole.InfoRole.nCoorPointY;
			PSend.x=PMove.x*64+512;
			PSend.y=PMove.y*32+374;
			::SetCursorData(true,&PSend);
			nSend=(PSend.y<<16) | PSend.x;
			::SendMessage(hWndZT,WM_MOUSEMOVE,NULL,nSend);
			::SendMessage(hWndZT,WM_LBUTTONDOWN,NULL,nSend);
			::SendMessage(hWndZT,WM_LBUTTONUP,NULL,nSend);
			::SetCursorData(false,NULL);
			hPre=InfoSelObject.dwStartAddress;
			::Sleep(1000);
		}//-3
		::Sleep(1000);
	}//-2
	return true;
}//-1

void CMyDlg::OnGoodsbutton() 
{
	// TODO: Add your control notification handler code here
	char szTemp[30];
	if(::GetDlgItemText(this->m_hWnd,IDC_GOODSEDIT,szTemp,30))
	{
		m_GoodsList.AddString(szTemp);
	}	
}

void CMyDlg::OnGoodsbutton2() 
{
	// TODO: Add your control notification handler code here
	int i=0;
	i=m_GoodsList.GetCurSel();
	m_GoodsList.DeleteString(i);
	
}

void CMyDlg::OnSelchangeGoodslist() 
{
	// TODO: Add your control notification handler code here
	char szTemp[30];
	int i=0;
	i=m_GoodsList.GetCurSel();
	m_GoodsList.GetText(i,szTemp);
	::SetDlgItemText(this->m_hWnd,IDC_GOODSEDIT,szTemp);
}

⌨️ 快捷键说明

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