Parcourir la source

添加是否停止走路函数和其他辅助函数。

Wang Jeff il y a 4 ans
Parent
commit
ebca03361c

+ 41 - 0
GameAssist/GameAssist/Assist.cpp

@@ -1179,6 +1179,47 @@ namespace GAssist
 		return (lv_nMaxVal >= lowestMatchValue ? TRUE : FALSE);
 	}
 
+	BOOL CropPicture(HWND hWnd, CRect rc, const char *szSaveName)
+	{
+		GAssist::SaveHwndToBmpFile(hWnd, g_strAppdir + _T("Game.bmp"));
+		cv::Mat srcImg, tempImg, matchImg;
+		if (!OpenImage(g_strAppdir + _T("Game.bmp"), srcImg) )
+		{
+			if (srcImg.data) srcImg.release();
+			return FALSE;
+		}
+
+		// 指定源图片区域来做模块比较,提高效率;
+		cv::Mat imgROI;
+		imgROI = srcImg(cv::Rect(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top));
+		cv::imwrite(szSaveName, imgROI);
+	}
+
+	BOOL IsSimilarPicture(const char* szp1, const char* szp2, double lowestMatchValue)
+	{
+		cv::Mat src, dest, matchImg;
+		src = cv::imread(szp1);
+		dest = cv::imread(szp2);
+		
+		cv::matchTemplate(src, dest, matchImg, cv::TM_CCOEFF_NORMED);
+		// 归一化到0~1
+		//cv::normalize(matchImg, matchImg, 0, 1, cv::NORM_MINMAX, -1);
+
+		double lv_nMinVal = 0.0;
+		double lv_nMaxVal = 0.0;
+		cv::Point lv_nMinLoc = cv::Point(0, 0);
+		cv::Point lv_nMaxLoc = cv::Point(0, 0);
+		cv::Point lv_MatchLoc = cv::Point(0, 0);
+		cv::minMaxLoc(matchImg, &lv_nMinVal, &lv_nMaxVal, &lv_nMinLoc, &lv_nMaxLoc);
+
+		src.release();
+		matchImg.release();
+		dest.release();
+
+		// 是否大于最低匹配度;
+		return (lv_nMaxVal >= lowestMatchValue ? TRUE : FALSE);
+	}
+
 	void ZhiYeDaTiaoZhan()
 	{
 		// 判断当前地图是否在应天府;

+ 2 - 0
GameAssist/GameAssist/Assist.h

@@ -178,6 +178,8 @@ namespace GAssist
 	BOOL GetImgMatchtemplate(HWND hWnd, std::string strTempImg, RECT& rc, double lowestMatchValue = 0.900);
 	BOOL GetImgMatchtemplate(std::string strSrcImg, std::string strTempImg, RECT &rc, double lowestMatchValue = 0.900);
 	BOOL IsMatchIcon(HWND hWnd, std::string strTempImg, RECT srcRect, RECT& matchRect, double lowestMatchValue = 0.900);
+	BOOL CropPicture(HWND hWnd, CRect rc, const char* szSaveName); // ¼ô²ÃͼƬ;
+	BOOL IsSimilarPicture(const char* szp1, const char* szp2, double lowestMatchValue = 0.99);
 	
 	// Ö°Òµ´óÌôÕ½;
 	void ZhiYeDaTiaoZhan();

+ 15 - 4
GameAssist/GameAssist/GameAssist.rc

@@ -53,8 +53,8 @@ BEGIN
     "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)\r\n"
     "LANGUAGE 4, 2\r\n"
     "#pragma code_page(936)\r\n"
-    "#include ""res\\GameAssist.rc2""  // 闂?Microsoft Visual C++ 缂傚倹鐗炵欢顐︽儍閸曨喚銈繝?\n"
-    "#include ""l.CHS\\afxres.rc""      // 闁哄秴娲ら崳顖滅磼閸曨亝顐?\n"
+    "#include ""res\\GameAssist.rc2""  // 闂?Microsoft Visual C++ 缂傚倸鍊归悧鐐垫椤愶附鍎嶉柛鏇ㄥ枤閵堫偅绻?\n"
+    "#include ""l.CHS\\afxres.rc""      // 闂佸搫绉村ú銈夊闯椤栨粎纾奸柛鏇ㄤ簼椤?\n"
     "#endif\r\n"
     "\0"
 END
@@ -106,6 +106,17 @@ BEGIN
     PUSHBUTTON      "家园任务",IDC_BUTTON7,7,115,50,14
     CONTROL         "普通重击",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,112,28,43,10
     CONTROL         "镜妖重击",IDC_CHECK3,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,160,28,52,10
+    PUSHBUTTON      "职业大挑战",IDC_BUTTON8,60,79,50,14
+    PUSHBUTTON      "移动到目标",IDC_BUTTON9,7,140,50,14
+    EDITTEXT        IDC_EDIT1,63,140,40,14,ES_AUTOHSCROLL | ES_NUMBER
+    EDITTEXT        IDC_EDIT2,106,140,40,14,ES_AUTOHSCROLL | ES_NUMBER
+    CONTROL         "打开地图",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,150,143,43,10
+    EDITTEXT        IDC_EDIT3,62,7,21,14,ES_AUTOHSCROLL | ES_NUMBER
+    EDITTEXT        IDC_EDIT4,85,7,21,14,ES_AUTOHSCROLL | ES_NUMBER
+    EDITTEXT        IDC_EDIT5,118,7,21,14,ES_AUTOHSCROLL | ES_NUMBER
+    EDITTEXT        IDC_EDIT6,141,7,21,14,ES_AUTOHSCROLL | ES_NUMBER
+    LTEXT           "-",IDC_STATIC,109,9,8,8
+    CONTROL         "裁剪",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,164,9,30,10
 END
 
 
@@ -215,8 +226,8 @@ END
 #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_CHS)
 LANGUAGE 4, 2
 #pragma code_page(936)
-#include "res\GameAssist.rc2"  // 闂?Microsoft Visual C++ 缂傚倹鐗炵欢顐︽儍閸曨喚銈繝?
-#include "l.CHS\afxres.rc"      // 闁哄秴娲ら崳顖滅磼閸曨亝顐?
+#include "res\GameAssist.rc2"  // 闂?Microsoft Visual C++ 缂傚倸鍊归悧鐐垫椤愶附鍎嶉柛鏇ㄥ枤閵堫偅绻?
+#include "l.CHS\afxres.rc"      // 闂佸搫绉村ú銈夊闯椤栨粎纾奸柛鏇ㄤ簼椤?
 #endif
 
 /////////////////////////////////////////////////////////////////////////////

+ 199 - 107
GameAssist/GameAssist/GameAssistDlg.cpp

@@ -136,31 +136,31 @@ BOOL IsWattingAttack(HWND hWnd, int nAttackNPCType)
 	BOOL bIsAttack = FALSE;
 	switch (nAttackNPCType)
 	{
-		case 0:
-		{	// 将鼠标移动到指定位置;
-			DebugLog(_T("IsWattingAttack:镜妖中……"));
-			POINT ptDest = { 20, 50 }; // 左上角;
-			GAssist::MouseMove(hWnd, ptDest);
-			if (GAssist::IsMatchIcon(hWnd, GAssist::g_strAppdir + _T("img\\我方攻击.bmp"), { 0, 50, 60, 115 }, rc)) {
-				DebugLog(_T("IsWattingAttack:我方攻击"));
-				bIsAttack = TRUE;
-			}
-			break;
+	case 0:
+	{	// 将鼠标移动到指定位置;
+		DebugLog(_T("IsWattingAttack:镜妖中……"));
+		POINT ptDest = { 20, 50 }; // 左上角;
+		GAssist::MouseMove(hWnd, ptDest);
+		if (GAssist::IsMatchIcon(hWnd, GAssist::g_strAppdir + _T("img\\我方攻击.bmp"), { 0, 50, 60, 115 }, rc)) {
+			DebugLog(_T("IsWattingAttack:我方攻击"));
+			bIsAttack = TRUE;
 		}
-		case 1:
-		{
-			// 将鼠标移动到指定位置;
-			DebugLog(_T("IsWattingAttack:职业挑战中……"));// 要求角色:自定全黑头像;
-			//POINT ptDest = { 625, 28 }; // 左上角;
-			//GAssist::MouseMove(hWnd, ptDest);
-			if (!GAssist::IsMatchIcon(hWnd, GAssist::g_strAppdir + _T("img\\战斗中.bmp"), { 600, 25, 655, 80 }, rc)) {
-				DebugLog(_T("IsWattingAttack:我方攻击"));
-				bIsAttack = TRUE;
-			}
-			break;
+		break;
+	}
+	case 1:
+	{
+		// 将鼠标移动到指定位置;
+		DebugLog(_T("IsWattingAttack:职业挑战中……"));// 要求角色:自定全黑头像;
+		//POINT ptDest = { 625, 28 }; // 左上角;
+		//GAssist::MouseMove(hWnd, ptDest);
+		if (!GAssist::IsMatchIcon(hWnd, GAssist::g_strAppdir + _T("img\\战斗中.bmp"), { 600, 25, 655, 80 }, rc)) {
+			DebugLog(_T("IsWattingAttack:我方攻击"));
+			bIsAttack = TRUE;
 		}
-		default:
-			break;
+		break;
+	}
+	default:
+		break;
 	}
 
 	return bIsAttack;
@@ -169,7 +169,7 @@ BOOL IsWattingAttack(HWND hWnd, int nAttackNPCType)
 void BattleOnece(HWND hWnd, BOOL bHasSummoner)
 {
 	BOOL bBattle = FALSE;
-	if ( IsBattle(hWnd) )
+	if (IsBattle(hWnd))
 	{
 		SRAND(300, 500);
 		// 是否我方攻击;
@@ -183,13 +183,13 @@ void BattleOnece(HWND hWnd, BOOL bHasSummoner)
 			//GAssist::MouseMove(hWnd, CPoint(220 - 5, 180 - 10));// 打主镜妖;
 			SRAND(100, 200);
 
-			
+
 		}
 	}
 	else
 	{
 		// 非战斗中,是否在贫民房中;
-		if (!IsOnMap(hWnd, _T("img\\地图\\贫民房.bmp"))) 
+		if (!IsOnMap(hWnd, _T("img\\地图\\贫民房.bmp")))
 		{
 			// 找小米;
 			CRect rc = FindNPC(hWnd, "臭美的小米");
@@ -295,14 +295,14 @@ void BattleJY(HWND hWnd, BOOL bHasSummoner, BOOL bZJ)
 					CRect rc;
 					// 召唤兽技能;
 					DebugLog(_T("BattleJY:召唤兽技能选择"));
-					
+
 					// 选择重击;
 					if (bZJ) {
 						SRAND(150, 350);
 						GAssist::SendKey(hWnd, VK_S, FALSE, TRUE);
 						if (GAssist::GetImgMatchtemplate(hWnd, GAssist::g_strAppdir + _T("img\\活动\\镜妖\\重击.bmp"), rc))
 						{
-							SRAND(100,300);
+							SRAND(100, 300);
 							GAssist::MouseClick(hWnd, CPoint((rc.right + rc.left) / 2 + rand() % 3, (rc.top + rc.bottom) / 2 + rand() % 3), TRUE);
 						}
 					}
@@ -328,7 +328,7 @@ void BattleJY(HWND hWnd, BOOL bHasSummoner, BOOL bZJ)
 
 		SRAND(500, 850);
 	}
-	
+
 	// 非战斗中,是否在贫民房中;
 	if (!IsOnMap(hWnd, _T("img\\地图\\贫民房.bmp"))) {
 		// 找小米;
@@ -457,7 +457,7 @@ void BattleJY2(HWND hWnd, BOOL bSummoner)
 	CRect rc;
 	//POINT spt[4] = { { 175, 280 }, { 225,305 }, { 300, 266 }, { 225,305 } };
 	POINT spt[4] = { { 260, 360 }, { 300,390}, { 390, 350}, { 280,300 } };
-	for( int i =0; !GAssist::GetImgMatchtemplate(hWnd, GAssist::g_strAppdir + _T("img\\活动\\镜妖\\镜妖3.bmp"), rc); i++ )
+	for (int i = 0; !GAssist::GetImgMatchtemplate(hWnd, GAssist::g_strAppdir + _T("img\\活动\\镜妖\\镜妖3.bmp"), rc); i++)
 	{
 		// 打开世界地图;
 		GAssist::SendKey(hWnd, VK_TAB); SRAND(200, 300);
@@ -493,11 +493,11 @@ void BattleJY2(HWND hWnd, BOOL bSummoner)
 
 		BOOL bBattle = FALSE;
 		//while (GAssist::GetImgMatchtemplate(hWnd, GAssist::g_strAppdir + _T("img\\活动\\镜妖\\战斗中.bmp"), rc))
-		while (IsBattle(hWnd) )
+		while (IsBattle(hWnd))
 		{
 			DebugLog(_T("BattleJY:战斗中"));
 			//while (GAssist::GetImgMatchtemplate(hWnd, GAssist::g_strAppdir + _T("img\\活动\\镜妖\\技能选择.bmp"), rc))
-			while ( IsWattingAttack(hWnd,0) )
+			while (IsWattingAttack(hWnd, 0))
 			{
 				DebugLog(_T("BattleJY:我方攻击……"));
 				if (!bBattle)
@@ -508,7 +508,7 @@ void BattleJY2(HWND hWnd, BOOL bSummoner)
 					// 打镜妖喽罗;
 					GAssist::MouseClick(hWnd, CPoint(290 - 3, 140 - 20));
 					//GAssist::MouseMove(hWnd, CPoint(220 - 5, 180 - 10));// 打主镜妖;
-					SRAND(200,300);
+					SRAND(200, 300);
 
 					if (bSummoner) {
 						// 召唤兽技能;
@@ -544,7 +544,7 @@ void BattleJY2(HWND hWnd, BOOL bSummoner)
 					SRAND(50, 100);
 					GAssist::SendKey(hWnd, VK_A, FALSE, TRUE);
 					SRAND(600, 900);
-				}		
+				}
 
 				SRAND(300, 550);
 			}
@@ -555,12 +555,50 @@ void BattleJY2(HWND hWnd, BOOL bSummoner)
 	}
 }
 
-
-void AttachGDD(HWND hWnd)
+// 是否停止走路;
+BOOL IsWalkStop(HWND hWnd)
 {
-	// 人物技能:Alt+S,双击选中,单击敌人;
+	// 将鼠标移走,不要在抠图区域;
+	// 截图,抠指定区域;
+	// 再截图,抠指定区域与上次抠图结果比较;
+	// 比较结果相同,表示停止走路;
+	//POINT pt1 = { 635, 20 }; 
+	//POINT pt2 = { 780, 38 };
+	CRect rc = { 630, 40, 800, 65 };
+	CRect rc2 = { 640, 45, 770, 63 };
+	for (int i = 0; i < 100; i++)
+	{
+		GAssist::CropPicture(hWnd, rc, _T("walk1.bmp"));
+		Sleep(800);
+		GAssist::CropPicture(hWnd, rc2, _T("walk2.bmp"));
+		// 判断2张图片是否一样;
+		if (GAssist::IsSimilarPicture(_T("walk1.bmp"), _T("walk2.bmp")))
+		{
+			DebugLog(_T("停止走路"));
+			return TRUE;
+		}
+	}
+
+	return FALSE;
 }
 
+// 世界地图定位;
+void WorldMapPositioning(HWND hWnd, POINT ptMap)
+{
+	CRect rc;
+	//// 打开世界地图;
+	GAssist::SendKey(hWnd, VK_TAB); SRAND(500, 600);
+	// 判断是否打开了地图;
+	if (!GAssist::GetImgMatchtemplate(hWnd, GAssist::g_strAppdir + _T("img\\世界地图.bmp"), rc))
+		return;
+
+	//// 单击寻路窗口;
+	GAssist::MouseClick(hWnd, ptMap); SRAND(300, 600);
+	//// 退出世界地址;
+	GAssist::SendKey(hWnd, VK_TAB); SRAND(200, 300);
+
+	IsWalkStop(hWnd);
+}
 
 // 使用快捷键来处理:读取配置文件
 auto FindJNShortCut = [](LPCTSTR lpSkillName, int& nKeyValue, int& nSkilltime)->BOOL {
@@ -619,7 +657,7 @@ void BattleYS(HWND hWnd, const char* lpszJN)
 		rc = FindMatchIcon(hWnd, _T("img\\gdd\\离开这里.bmp"));
 		if (!rc.IsRectEmpty() && !rc.IsRectNull())
 		{
-			SRAND(150,250);
+			SRAND(150, 250);
 			// 只有离开这里:已经打过,右键并退出 ;
 			DebugLog("只有离开这里:已经打过,右键并退出");
 			GAssist::MouseRClick(hWnd);
@@ -647,19 +685,19 @@ void BattleYS(HWND hWnd, const char* lpszJN)
 					GAssist::MouseClick(hWnd, CPoint((rc.right + rc.left) / 2, (rc.top + rc.bottom) / 2), TRUE);
 					SRAND(300, 500);
 					// 移动下,防止高亮识别失败;
-					GAssist::MouseMoveEx(hWnd, {rc.left, rc.top}, {rc.right+rand()%10, rc.bottom + rand()%10});
+					GAssist::MouseMoveEx(hWnd, { rc.left, rc.top }, { rc.right + rand() % 10, rc.bottom + rand() % 10 });
 					SRAND(150, 200);
 					ClickDlgSetup(hWnd, _T("img\\确定.bmp"));
 					//SRAND(150, 200);
-					
+
 					rc = FindMatchIcon(hWnd, _T("img\\gdd\\接受挑战.bmp"));
-					if ( !rc.IsRectEmpty() && !rc.IsRectNull() )
+					if (!rc.IsRectEmpty() && !rc.IsRectNull())
 					{// 第二次开始都会多这个;
 						// 找到目标,单击;
 						GAssist::MouseClick(hWnd, CPoint((rc.right + rc.left) / 2, (rc.top + rc.bottom) / 2), TRUE);
 						SRAND(300, 500);
 						// 移动下,防止高亮识别失败;
-						GAssist::MouseMoveEx(hWnd, { rc.left, rc.top }, { rc.right + rand() % 10, rc.bottom + rand() % 10 });
+						GAssist::MouseMoveEx(hWnd, { rc.left, rc.top }, { rc.right + rand() % 20, rc.bottom + rand() % 20 });
 					}
 
 					ClickDlgSetup(hWnd, _T("img\\确定.bmp"));
@@ -734,18 +772,28 @@ void BattleYS(HWND hWnd, const char* lpszJN)
 			{
 				GAssist::SendKey(hWnd, VK_A, FALSE, TRUE);
 			}
-			SRAND(500, 9000);
+			SRAND(500, 900);
 		}
 	}
 
 	// 右键退出;
+	SRAND(300, 500); //必要的等待时间;
 	GAssist::MouseRClick(hWnd);
 }
 
-void BattleOthers(HWND hWnd, const char* lpszName, const char * lpszSkillName)
+void BattleOthers(HWND hWnd, const char* lpszName, const char* lpszSkillName)
 {
 	CRect rc;
 	BOOL bBattle = FALSE;
+	if (!_tcsicmp("浪子独侠", lpszName))
+	{
+		// 有时会寻路失败;
+		GAssist::SendKey(hWnd, VK_TAB); SRAND(300, 600);
+		// 单击指定坐标;
+		GAssist::MouseClick(hWnd, { 140,430 });
+		// 关闭地图;
+		GAssist::SendKey(hWnd, VK_TAB); SRAND(100, 300);
+	}
 	FindNPC(hWnd, lpszName);
 
 	do
@@ -789,8 +837,11 @@ void BattleOthers(HWND hWnd, const char* lpszName, const char * lpszSkillName)
 	}
 
 	// 右键退出;
-	if ( _tcsicmp(lpszName, _T("魂武独侠")) )
+	if (_tcsicmp(lpszName, _T("魂武独侠")))
+	{
+		SRAND(300, 500);
 		GAssist::MouseRClick(hWnd);
+	}
 	else
 	{
 		// 回到应天府;
@@ -860,6 +911,8 @@ BEGIN_MESSAGE_MAP(CGameAssistDlg, CDialog)
 	ON_BN_CLICKED(IDC_BUTTON5, &CGameAssistDlg::OnBnClickedButton5)
 	ON_BN_CLICKED(IDC_BUTTON6, &CGameAssistDlg::OnBnClickedButton6)
 	ON_BN_CLICKED(IDC_BUTTON7, &CGameAssistDlg::OnBnClickedButton7)
+	ON_BN_CLICKED(IDC_BUTTON8, &CGameAssistDlg::OnBnClickedButton8)
+	ON_BN_CLICKED(IDC_BUTTON9, &CGameAssistDlg::OnBnClickedButton9)
 END_MESSAGE_MAP()
 
 
@@ -1147,38 +1200,45 @@ void CGameAssistDlg::OnBnClickedOpengame()
 void CGameAssistDlg::OnBnClickedButton2()  // 截图;
 {
 	// TODO: 在此添加控件通知处理程序代码
+	HWND hWnd = GAssist::GetProcessMainWnd();
+	UpdateData();
+	INT nX = GetDlgItemInt(IDC_EDIT3);
+	INT nY = GetDlgItemInt(IDC_EDIT4);
+	INT nX2 = GetDlgItemInt(IDC_EDIT5);
+	INT nY2 = GetDlgItemInt(IDC_EDIT6);
+	BOOL bCropPicture = ((CButton*)GetDlgItem(IDC_CHECK5))->GetCheck();
+
+	if (bCropPicture)
+	{
+		GAssist::CropPicture(hWnd, { nX, nY, nX2, nY2 }, _T("裁剪结果.bmp"));
+	}
+	else
+	{
+		CString strImg;
+		strImg = CTime::GetCurrentTime().Format("%H%M%S-Game.bmp");
+		GAssist::SaveHwndToBmpFile(hWnd, strImg.GetString());
+	}
 
-// 	VideoDXGICaptor vdx;
-// 	if (vdx.Init())
-// 	{
-// 		INT len = 1024 * 1024 * 1024;
-// 		BYTE* pData = new BYTE[len];
-// 		vdx.CaptureImage(pData, len);
-// 		vdx.Deinit();
-// 	}
 #if 0
-	DWORD dwPid = GAssist::GetProcessId();
-	HWND hProWnd = GAssist::GetProMainHwnd(dwPid);
-	// 截图;
-	CString strImg;
-	//strImg = CTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S %W-%A");
-	strImg = CTime::GetCurrentTime().Format("%H%M%S-Game.bmp");
-	GAssist::SaveHwndToBmpFile(hProWnd, strImg.GetString());
-#endif
-
-#if 1
-	HWND hProWnd = GAssist::GetProcessMainWnd();
+	HWND hWnd = GAssist::GetProcessMainWnd();
 
 #if 1
 	// 快捷键;
-	GAssist::SendKey(hProWnd, VK_F3);
-	SRAND(350, 650);
-	// 单击指定位置;
-	GAssist::MouseClick(hProWnd, 230, 170);
-	SRAND(260, 380);
-	// 将鼠标移动到指定位置;
-	POINT ptDest = { 625, 28 }; // 左上角;
-	GAssist::MouseMove(hProWnd, ptDest);
+	//GAssist::SendKey(hProWnd, VK_F3);
+	//SRAND(350, 650);
+	//// 单击指定位置;
+	//GAssist::MouseClick(hProWnd, 230, 170);
+	//SRAND(260, 380);
+	//// 将鼠标移动到指定位置;
+	//POINT ptDest = { 625, 28 }; // 左上角;
+	//GAssist::MouseMove(hProWnd, ptDest);
+	// 有时会寻路失败;
+	GAssist::SendKey(hWnd, VK_TAB); SRAND(300, 600);
+	// 单击指定坐标;
+	//GAssist::MouseClick(hWnd, { 80,500 });
+	GAssist::MouseMove(hWnd, { 80, 580 });
+	// 关闭地图;
+	GAssist::SendKey(hWnd, VK_TAB); SRAND(100, 300);
 #else
 	//IsWattingAttack(hProWnd, 1);
 	//BattleYS(hProWnd, "缚神诀");
@@ -1187,31 +1247,31 @@ void CGameAssistDlg::OnBnClickedButton2()  // 
 
 	BattleOthers(hProWnd, szName[9], _T("缚神诀"));
 #endif
-//	auto FindJNShortCut = [](LPCTSTR lpSkillName)->int {
-//		// 读取文件:jnmap.bin
-//		// 格式:技能=快捷键的键值;
-//		std::string line;
-//		std::ifstream ifJN("..\\img\\jnmap.bin");
-//		if (ifJN)
-//		{
-//			TCHAR szKeyValue[MAX_PATH] = { 0 };
-//			TCHAR szSkillName[MAX_PATH] = { 0 };
-//			while (std::getline(ifJN, line))
-//			{
-//				int nRet = _stscanf_s(line.c_str(), _T("%[^=]%s"), szSkillName, MAX_PATH, szKeyValue, MAX_PATH);
-//				if (nRet == 2 && _tcsicmp(lpSkillName, szSkillName) == 0) {
-//					// 将快捷键值
-//					return atol(szKeyValue);
-//				}
-//	}
-//}
-//
-//		// 没有找到jnmap.bin文件;
-//		return -1;
-//		};
-//
-	//int KeyValue, SkillTime;
-	//FindJNShortCut("缚神诀", KeyValue, SkillTime);
+	//	auto FindJNShortCut = [](LPCTSTR lpSkillName)->int {
+	//		// 读取文件:jnmap.bin
+	//		// 格式:技能=快捷键的键值;
+	//		std::string line;
+	//		std::ifstream ifJN("..\\img\\jnmap.bin");
+	//		if (ifJN)
+	//		{
+	//			TCHAR szKeyValue[MAX_PATH] = { 0 };
+	//			TCHAR szSkillName[MAX_PATH] = { 0 };
+	//			while (std::getline(ifJN, line))
+	//			{
+	//				int nRet = _stscanf_s(line.c_str(), _T("%[^=]%s"), szSkillName, MAX_PATH, szKeyValue, MAX_PATH);
+	//				if (nRet == 2 && _tcsicmp(lpSkillName, szSkillName) == 0) {
+	//					// 将快捷键值
+	//					return atol(szKeyValue);
+	//				}
+	//	}
+	//}
+	//
+	//		// 没有找到jnmap.bin文件;
+	//		return -1;
+	//		};
+	//
+		//int KeyValue, SkillTime;
+		//FindJNShortCut("缚神诀", KeyValue, SkillTime);
 #endif
 
 #if 0
@@ -1222,12 +1282,12 @@ void CGameAssistDlg::OnBnClickedButton2()  // 
 	POINT spt = { 625, 28 }; // 战斗时的右上角
 
 		// 选择坐标点;
-		GAssist::MouseMove(hProWnd, spt);
+	GAssist::MouseMove(hProWnd, spt);
 
-		CString strImg;
-		//strImg = CTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S %W-%A");
-		strImg = CTime::GetCurrentTime().Format("%H%M%S-Game.bmp");
-		GAssist::SaveHwndToBmpFile(hProWnd, strImg.GetString());
+	CString strImg;
+	//strImg = CTime::GetCurrentTime().Format("%Y-%m-%d %H:%M:%S %W-%A");
+	strImg = CTime::GetCurrentTime().Format("%H%M%S-Game.bmp");
+	GAssist::SaveHwndToBmpFile(hProWnd, strImg.GetString());
 #endif
 
 #if 0
@@ -1235,7 +1295,7 @@ void CGameAssistDlg::OnBnClickedButton2()  // 
 	HWND hProWnd = GAssist::GetProcessMainWnd();
 	POINT spt[4] = { { 250, 335 }, { 310,360}, { 385, 315}, { 280,295 } };
 	static int i = 2;
-	if ( i < 4 )
+	if (i < 4)
 	{
 		// 打开世界地图;
 		GAssist::SendKey(hProWnd, VK_TAB); SRAND(200, 300);
@@ -1253,10 +1313,10 @@ void CGameAssistDlg::OnBnClickedButton2()  // 
 		i = 0;
 	}
 #endif
-// 	GAssist::MouseMove(hProWnd, CPoint(290 - 5, 140 - 20));
-// 
-// 	Sleep(5000);
-// 	GAssist::MouseMove(hProWnd, CPoint(220 - 5, 180 - 10));
+	// 	GAssist::MouseMove(hProWnd, CPoint(290 - 5, 140 - 20));
+	// 
+	// 	Sleep(5000);
+	// 	GAssist::MouseMove(hProWnd, CPoint(220 - 5, 180 - 10));
 }
 
 
@@ -1377,3 +1437,35 @@ void CGameAssistDlg::OnBnClickedButton7()	// 
 {
 	// TODO: 在此添加控件通知处理程序代码
 }
+
+
+void CGameAssistDlg::OnBnClickedButton8() // 职业挑战2;
+{
+	// TODO: 在此添加控件通知处理程序代码
+	CRect rc;
+	DebugLog(_T("进入孤独洞========="));
+	HWND hProWnd = GAssist::GetProcessMainWnd();
+
+	DebugLog(_T("进入孤独洞"));
+	char szName[10][32] = { "术士独侠","道士独侠","武师独侠","浪子独侠","剑客独侠","弓手独侠","禁卫独侠","墨者独侠","巫煞独侠","魂武独侠" };
+	for (int i = 0; i < 10; i++)
+	{
+		BattleOthers(hProWnd, szName[i], "缚神诀");
+	}
+}
+
+
+void CGameAssistDlg::OnBnClickedButton9() // 移动到目标点
+{
+	// TODO: 在此添加控件通知处理程序代码
+	HWND hWnd = GAssist::GetProcessMainWnd();
+	UpdateData();
+	INT nX = GetDlgItemInt(IDC_EDIT1);
+	INT nY = GetDlgItemInt(IDC_EDIT2);
+	BOOL bOpenMap = ((CButton*)GetDlgItem(IDC_CHECK4))->GetCheck();
+
+	if (bOpenMap)
+		WorldMapPositioning(hWnd, {nX, nY});
+	else
+		GAssist::MouseMove(hWnd, { nX, nY });
+}

+ 2 - 0
GameAssist/GameAssist/GameAssistDlg.h

@@ -41,4 +41,6 @@ public:
 	CButton m_cbSummoner;
 	afx_msg void OnBnClickedButton7();
 	CButton m_cbZJ;
+	afx_msg void OnBnClickedButton8();
+	afx_msg void OnBnClickedButton9();
 };

+ 11 - 1
GameAssist/GameAssist/resource.h

@@ -18,6 +18,16 @@
 #define IDC_BUTTON7                     1007
 #define IDC_CHECK2                      1008
 #define IDC_CHECK3                      1009
+#define IDC_BUTTON8                     1010
+#define IDC_BUTTON9                     1011
+#define IDC_EDIT1                       1012
+#define IDC_EDIT2                       1013
+#define IDC_CHECK4                      1014
+#define IDC_EDIT3                       1015
+#define IDC_EDIT4                       1016
+#define IDC_EDIT5                       1017
+#define IDC_EDIT6                       1018
+#define IDC_CHECK5                      1019
 
 // Next default values for new objects
 // 
@@ -25,7 +35,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        129
 #define _APS_NEXT_COMMAND_VALUE         32771
-#define _APS_NEXT_CONTROL_VALUE         1009
+#define _APS_NEXT_CONTROL_VALUE         1020
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif

BIN
GameAssist/GameAssist/walk1.bmp


BIN
GameAssist/GameAssist/walk2.bmp


BIN
GameAssist/img/世界地图.bmp