Bläddra i källkod

删除零散的函数

Jeff 4 år sedan
förälder
incheckning
a8f8ee3e9d

+ 15 - 2
GameAssist/GameAssist/Assist.cpp

@@ -1207,7 +1207,7 @@ namespace GAssist
 		// 指定源图片区域来做模块比较,提高效率;
 		cv::Mat imgROI;
 		imgROI = srcImg(cv::Rect(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top));
-		cv::imwrite(szSaveName, imgROI);
+		return cv::imwrite(szSaveName, imgROI);
 	}
 
 	BOOL IsSimilarPicture(const char* szp1, const char* szp2, double lowestMatchValue)
@@ -1249,6 +1249,17 @@ namespace GAssist
 
 namespace GameAssist
 {
+	std::vector<GameWndInfo> g_vtGameWndInfo;
+	void ClearGameInfo(std::vector<GameWndInfo>& vtGWnd)
+	{
+		for (std::vector<GameWndInfo>::iterator it = vtGWnd.begin(); it != vtGWnd.end(); it++)
+		{
+			if (it->pAction)
+				delete it->pAction;
+			it->pAction = NULL;
+		}
+	}
+	
 	void SetGameForeground(HWND hWnd)
 	{
 		if (!IsWindow(hWnd))
@@ -1686,6 +1697,7 @@ namespace GameAssist
 		TCHAR szGameServer[MAX_PATH] = { 0 };
 		TCHAR szGameRoleName[MAX_PATH] = { 0 };
 		// 清空队列;
+		ClearGameInfo(vtGWnd);
 		vtGWnd.clear();
 		for (std::vector<DWORD>::const_iterator it = vtPid.begin(); it != vtPid.end(); it++)
 		{
@@ -1739,6 +1751,7 @@ namespace GameAssist
 				gameInfo.strGameZoon = szGameZoon;
 				gameInfo.strGameServer = szGameServer;
 				gameInfo.strGameRoleName = szGameRoleName;
+				gameInfo.pAction = NULL;
 				vtGWnd.push_back(gameInfo);
 				ZeroMemory(szGameZoon, MAX_PATH);
 				ZeroMemory(szGameServer, MAX_PATH);
@@ -2098,7 +2111,7 @@ namespace ImgAssist
 		// 指定源图片区域来做模块比较,提高效率;
 		cv::Mat imgROI;
 		imgROI = srcImg(cv::Rect(rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top));
-		cv::imwrite(szSaveName, imgROI);
+		return cv::imwrite(szSaveName, imgROI);
 	}
 
 	BOOL IsSimilarPicture(const char* szp1, const char* szp2, double lowestMatchValue)

+ 2 - 0
GameAssist/GameAssist/Assist.h

@@ -172,8 +172,10 @@ namespace GameAssist{
 		std::string			strGameRoleName;		// 角色名称;
 		std::string			strGameZoon;			// 区域;
 		std::string			strGameServer;			// 服务站
+		LPVOID				pAction;				// CAction类对象;
 	}GameWndInfo, * pGameWndInfo;
 	extern std::vector<GameWndInfo> g_vtGameWndInfo;
+	void ClearGameInfo(std::vector<GameWndInfo> &vtGWnd);
 
 	// 设置游戏窗口前置;
 	void SetGameForeground(HWND hWnd);

+ 360 - 19
GameAssist/GameAssist/CAction.cpp

@@ -1,7 +1,7 @@
 #include "stdafx.h"
 #include "CAction.h"
 
-namespace GameAssist 
+namespace GameAssist
 {
 #define SETGAMEFOREGROUND AutoThreadSection ats(&m_ts);\
 if (!::IsWindow(m_hGameWnd)) return;\
@@ -53,8 +53,11 @@ if (!::IsWindow(m_hGameWnd)) return;\
 		OutputDebugStringA(szData);
 	}
 
-	CAction::CAction(HWND hWnd) :m_hGameWnd(hWnd), m_ptCur({0,0})
+	CAction::CAction(HWND hWnd) :m_hGameWnd(hWnd), m_ptCur({ 0,0 })
 	{
+		m_hBattleJY = NULL;
+		m_hBattleJYEvent = NULL;
+		m_hBattleZYTZ = NULL;
 		InitNPCInfo();
 	}
 
@@ -74,7 +77,7 @@ if (!::IsWindow(m_hGameWnd)) return;\
 		SETGAMEFOREGROUND;
 		GameAssist::GamePos2Screen(m_hGameWnd, ptStart);
 		GameAssist::MouseMove(ptStart, bSetCurPos);
-
+		Sleep(50);
 		GameAssist::GamePos2Screen(m_hGameWnd, ptEnd);
 		GameAssist::MouseMove(ptEnd, bSetCurPos);
 	}
@@ -267,7 +270,7 @@ if (!::IsWindow(m_hGameWnd)) return;\
 	{
 		CRect rc;
 		//// 打开世界地图;
-		SendKey(VK_TAB); SRAND(300, 500);
+		SendKey(VK_TAB); SRAND(550, 800);
 		// 判断是否打开了地图;
 		if (!ImgAssist::GetImgMatchtemplate(m_hGameWnd, GAssist::g_strAppdir + _T("img\\世界地图.bmp"), rc))
 			return;
@@ -290,7 +293,7 @@ if (!::IsWindow(m_hGameWnd)) return;\
 		{	// 将鼠标移动到指定位置;
 			DebugLog(_T("IsWattingAttack:镜妖中……"));
 			POINT ptDest = { 20, 50 }; // 左上角;
-			MouseMove(ptDest);
+			MouseMove(ptDest, false);
 			if (ImgAssist::IsMatchIcon(m_hGameWnd, GameGlobal::g_strAppdir + _T("img\\我方攻击.bmp"), { 0, 50, 60, 115 }, rc)) {
 				DebugLog(_T("IsWattingAttack:我方攻击"));
 				bIsAttack = TRUE;
@@ -318,17 +321,22 @@ if (!::IsWindow(m_hGameWnd)) return;\
 
 	bool CAction::ClickDlgSetup(LPCSTR lpszTemplateImage)
 	{
-		CRect rc = FindMatchIcon(lpszTemplateImage);
+		CRect rc = FindMatchIcon(_T("img\\对话框关闭按钮.bmp"));
 		if (rc.IsRectEmpty() || rc.IsRectNull())
 			return false;
 
+		// 移动到关闭按钮;
+		MouseMove({rc.left, rc.top});
+		SRAND(30, 50);
+		// 再找目标;
+		rc = FindMatchIcon(lpszTemplateImage);
 		// 单击目标;
-		MouseClick(CPoint((rc.right + rc.left) / 2 + rand() % 3, (rc.top + rc.bottom) / 2 + rand() % 3));
+		MouseClick(CPoint((rc.right + rc.left) / 2, (rc.top + rc.bottom) / 2 + rand() % 3));
 		// 单击后,系统切图可能要的时间会比较长;
-		SRAND(350, 600);
+		SRAND(150, 300);
 		// 单击目标后,要往移走鼠标,防止下面匹配的时候被鼠标挡住;
 		MouseMove(CPoint(rc.top - RAND(5, 12), rc.left - RAND(5, 10))); // 移动到左上角;
-		SRAND(300, 500);
+		SRAND(100, 200);
 
 		return true;
 	}
@@ -342,7 +350,7 @@ if (!::IsWindow(m_hGameWnd)) return;\
 			return false;
 
 		//// 单击寻路窗口;
-		MouseClick( CPoint((rc.right + rc.left) / 2 + rand() % 2, (rc.top + rc.bottom) / 2 + rand() % 2)); SRAND(500, 800);
+		MouseClick(CPoint((rc.right + rc.left) / 2 + rand() % 2, (rc.top + rc.bottom) / 2 + rand() % 2)); SRAND(500, 800);
 		//// 设置剪切板:职业大挑战;
 		GameAssist::SetClipboardString(lpszNPCName); SRAND(200, 500);
 		//// Ctrl+V
@@ -419,7 +427,7 @@ if (!::IsWindow(m_hGameWnd)) return;\
 			if (rc.IsRectEmpty() || rc.IsRectNull())
 			{
 				// 可能还是未刷新出来,再次等待;
-				Sleep(300);
+				Sleep(600);
 				rc = FindMatchIcon(szNPC);
 				if (rc.IsRectEmpty() || rc.IsRectNull())
 				{
@@ -429,7 +437,7 @@ if (!::IsWindow(m_hGameWnd)) return;\
 		}
 
 		// 找到目标,单击;
-		MouseMove(CPoint(rc.left, rc.top));
+		MouseMove(CPoint(rc.left - rand() % 30, rc.top + rand() % 50));
 		// 单击:我要挑战他们;
 		MouseClick(ptNpc);
 
@@ -447,7 +455,7 @@ if (!::IsWindow(m_hGameWnd)) return;\
 		}
 
 		// 移动鼠标:不要停留在人物身上;
-		MouseMove({ ptNpc.x - rand() % 10, ptNpc.y - rand() % 10 });
+		MouseMove({ ptNpc.x - rand() % 30, ptNpc.y - rand() % 30 });
 
 		return bFind;
 	}
@@ -475,7 +483,7 @@ if (!::IsWindow(m_hGameWnd)) return;\
 				DebugLog(_T("BattleJY:我方攻击……"));
 				if (bFirstAttack)
 				{
-					SRAND(250, 300);
+					//SRAND(250, 300);
 					DebugLog(_T("BattleJY:第一次攻击……"));
 					// 根据角色选择技能;
 					SendKey(VK_F1);
@@ -630,8 +638,6 @@ if (!::IsWindow(m_hGameWnd)) return;\
 			SRAND(20, 50);
 			MouseClick(CPoint((rc.right + rc.left) / 2, (rc.top + rc.bottom) / 2));
 			SRAND(500, 800); // 切图时间长;
-			MouseMoveEx({ rc.left, rc.top }, { rc.right + rand() % 10, rc.bottom + rand() % 10 });
-			SRAND(20, 60);
 			ClickDlgSetup(_T("img\\确定.bmp"));
 		}
 		else
@@ -644,6 +650,7 @@ if (!::IsWindow(m_hGameWnd)) return;\
 				DebugLog("只有离开这里:已经打过,右键并退出");
 				MouseRClick();
 				SRAND(200, 500);
+				return;
 			}
 			else
 			{
@@ -669,7 +676,7 @@ if (!::IsWindow(m_hGameWnd)) return;\
 						MouseClick(CPoint((rc.right + rc.left) / 2, (rc.top + rc.bottom) / 2));
 						SRAND(500, 800);
 						// 移动下,防止高亮识别失败;
-						MouseMoveEx({ rc.left, rc.top }, { rc.right - rand() % 10, rc.bottom - rand() % 10 });
+						MouseMove({ rc.left, rc.top }, { rc.right - rand() % 10, rc.bottom - rand() % 10 });
 						SRAND(250, 300);
 						ClickDlgSetup(_T("img\\确定.bmp"));
 						SRAND(350, 500);
@@ -681,8 +688,8 @@ if (!::IsWindow(m_hGameWnd)) return;\
 							MouseClick(CPoint((rc.right + rc.left) / 2, (rc.top + rc.bottom) / 2));
 							SRAND(500, 800);
 							// 移动下,防止高亮识别失败;
-							MouseMoveEx({ rc.left, rc.top }, { rc.left - rand() % 20, rc.top - rand() % 20 });
-							SRAND(250, 350);
+							MouseMove({ rc.left, rc.top }, { rc.left - rand() % 20, rc.top - rand() % 20 });
+							SRAND(150, 250);
 						}
 
 						ClickDlgSetup(_T("img\\确定.bmp"));
@@ -774,4 +781,338 @@ if (!::IsWindow(m_hGameWnd)) return;\
 
 		MouseRClick();
 	}
+
+	void CAction::BattleOthers(LPCTSTR lpszName, LPCTSTR lpszSkillName)
+	{
+		CRect rc;
+		BOOL bBattle = FALSE;
+		if (!FindNPCByMap(lpszName))
+			return;
+
+		// 废话少说:表示这个没打过;
+		rc = FindMatchIcon(_T("img\\gdd\\废话少说.bmp"));
+		if (!rc.IsRectEmpty() && !rc.IsRectNull())
+		{
+			MouseMove({ rc.left - RAND(30, 50), rc.top - RAND(30, 50) });
+			SRAND(120, 150);
+			MouseClick(CPoint((rc.right + rc.left) / 2, (rc.top + rc.bottom) / 2));
+			SRAND(330, 550);
+			// 确定
+			bBattle = TRUE;
+			ClickDlgSetup(_T("img\\确定.bmp"));
+			SRAND(250, 350);
+		}
+		else
+		{
+			rc = FindMatchIcon(_T("img\\gdd\\离开这里.bmp"));
+		}
+
+		int KeyValue, SkillTime;
+		if (bBattle) {
+			BOOL bRet = FindJNShortCut(lpszSkillName, KeyValue, SkillTime);
+			// 将鼠标移动到指定位置;
+			POINT ptDest = { 625, 28 }; // 左上角;
+			MouseMove(ptDest);
+			while (IsBattle())
+			{
+				// 判断是否我方攻击;
+				if (IsWattingAttack(1))
+				{
+					SendKey(VK_A, FALSE, TRUE);
+				}
+
+				SRAND(500, 750);
+			}
+		}
+
+		// 右键退出;
+		if (_tcsicmp(lpszName, _T("魂武独侠")))
+		{
+			SRAND(300, 500);
+			do
+			{
+				rc = FindMatchIcon("img\\对话框关闭按钮.bmp");
+				Sleep(900);
+			} while (rc.IsRectEmpty() || rc.IsRectNull());
+
+			MouseRClick();
+		}
+		else
+		{
+			// 回到应天府;
+			MouseMoveEx({ rc.left, rc.top }, { rc.right + rand() % 10, rc.bottom + rand() % 10 });
+			ClickDlgSetup(_T("\\img\\gdd\\送我回应天府.bmp"));
+		}
+	}
+
+	void CAction::OpenChest(int nTimes)
+	{
+		CRect rc;
+		for (int i = 0; i < nTimes; i++)
+		{
+			if (!ImgAssist::GetImgMatchtemplate(m_hGameWnd, GameGlobal::g_strAppdir + _T("img\\开宝箱\\应天府铁匠.bmp"), rc))
+			{
+				// 没找到,要将鼠标从目标中移走;并且要右击一次将目标的高亮状态取消;
+				MouseMove({ rc.top - rand() % 5, rc.left - rand() % 5 });
+				MouseRClick();
+			}
+			else
+			{
+				MouseClick(CPoint((rc.right + rc.left) / 2 + rand() % 3, (rc.top + rc.bottom) / 2 + rand() % 5));
+				Sleep(600 + rand() % 30);
+				// 再移动下,会更高精度;
+				MouseMove({ rc.top - rand() % 15, rc.left - rand() % 15 });
+				// 判断是否还有对话,如果没有的话表明不是第一次进入;
+				if (ImgAssist::GetImgMatchtemplate(m_hGameWnd, GameGlobal::g_strAppdir + _T("img\\开宝箱\\开宝箱.bmp"), rc)) {
+
+					MouseClick(CPoint((rc.right + rc.left) / 2 + rand() % 2, (rc.top + rc.bottom) / 2 + rand() % 2));
+					Sleep(rand() % 200 + 190);
+					// 然后移动出去;
+					//GAssist::MouseMove(hProcessMainWnd, CPoint(rc.top - 50 - rand()%20, rc.left - 50 - rand() % 20));
+					MouseMoveEx({ rc.top + RAND(0, rc.Height()), rc.left + RAND(0, rc.Width()) });
+				}
+			}
+
+			Sleep(600 + rand() % 300);
+		}
+	}
+
+	void CAction::GetSaturdayPresents()
+	{
+		FindNPCByWorldMap(_T("送礼协会会长丙"));
+		IsWalkStop();
+
+		if (ClickDlgSetup(_T("img\\活动\\周六礼物\\我来领取礼物.bmp")))
+		{
+			if (ClickDlgSetup(_T("img\\活动\\周六礼物\\好的.bmp")))
+			{
+				FindNPCByWorldMap(_T("【星】铜钱怪"));
+				IsWalkStop();
+
+				CRect rc;
+				//铜钱怪:好的,要问些什么问题呢?
+				struct MyStruct
+				{
+					BOOL bDone = FALSE;
+					TCHAR szQuestion[MAX_PATH] = { 0 };
+				};
+
+				if (ClickDlgSetup(_T("img\\活动\\周六礼物\\铜钱怪:好的,要问些什么问题呢?.bmp")))
+				{
+					// 第一次回答;
+					std::vector<MyStruct> vtMyst1 = { {FALSE, _T("img\\活动\\周六礼物\\铜钱怪:帮派就象个大家庭.bmp")},
+					{FALSE, _T("img\\活动\\周六礼物\\铜钱怪:交流的场所.bmp")},
+					{FALSE, _T("img\\活动\\周六礼物\\铜钱怪:能够认识很多.bmp")},
+					{FALSE, _T("img\\活动\\周六礼物\\铜钱怪:我希望能够.bmp")},
+					{FALSE, _T("img\\活动\\周六礼物\\铜钱怪:由系统定时发布.bmp")},
+					{FALSE, _T("img\\活动\\周六礼物\\铜钱怪:好的,快点问吧.bmp")}
+					};
+
+					for (; vtMyst1.size();)
+					{
+						for (std::vector<MyStruct>::iterator it = vtMyst1.begin(); it != vtMyst1.end(); it++)
+						{
+							rc = FindMatchIcon(it->szQuestion);
+							if (!rc.IsRectEmpty() && !rc.IsRectNull())
+							{
+								// 单击目标回答;
+								MouseClick(CPoint((rc.right + rc.left) / 2 + rand() % 3, (rc.top + rc.bottom) / 2 + rand() % 5));
+								// 再移动下鼠标,防止高亮影响下次的判断;
+								MouseMove(CPoint(rc.right + RAND(6, 20), rc.bottom + RAND(6, 20)));
+								// 等待下一个问题出现;
+								SRAND(200, 300);
+								it = vtMyst1.erase(it);
+								break;
+							}
+						}
+					}
+
+					// 第二次回答;
+					std::vector<MyStruct> vtMyst2 = { {FALSE, _T("img\\活动\\周六礼物\\铜钱怪:帮派就象个大家庭.bmp")},
+					{FALSE, _T("img\\活动\\周六礼物\\铜钱怪:交流的场所.bmp")},
+					{FALSE, _T("img\\活动\\周六礼物\\铜钱怪:能够认识很多.bmp")},
+					{FALSE, _T("img\\活动\\周六礼物\\铜钱怪:我希望能够.bmp")},
+					{FALSE, _T("img\\活动\\周六礼物\\铜钱怪:由系统定时发布.bmp")}
+					};
+					for (; vtMyst2.size();)
+					{
+						for (std::vector<MyStruct>::iterator it = vtMyst2.begin(); it != vtMyst2.end(); it++)
+						{
+							rc = FindMatchIcon(it->szQuestion);
+							if (!rc.IsRectEmpty() && !rc.IsRectNull())
+							{
+								// 单击目标回答;
+								MouseClick(CPoint((rc.right + rc.left) / 2 + rand() % 3, (rc.top + rc.bottom) / 2 + rand() % 5));
+								// 再移动下鼠标,防止高亮影响下次的判断;
+								MouseMove(CPoint(rc.right + RAND(6, 20), rc.bottom + RAND(6, 20)));
+								// 等待下一个问题出现;
+								SRAND(200, 300);
+								it = vtMyst2.erase(it);
+								break;
+							}
+						}
+					}
+
+					// 回答完所有问题,右键退出;
+					SRAND(200, 300);
+					MouseRClick();
+				}
+
+				// 再次回到送礼协会会长;
+				FindNPCByWorldMap(_T("送礼协会会长丙"));
+				IsWalkStop();
+				// 再右键一次;
+				SRAND(200, 300);
+				MouseRClick();
+				FindNPCByWorldMap(_T("送礼协会会长丙"));
+				if (ClickDlgSetup(_T("img\\活动\\周六礼物\\好,现在就去.bmp")))
+				{
+					// 等待切换地图;
+					SRAND(800, 900);
+				}
+			}
+		}
+
+		if (IsOnMap(_T("img\\地图\\汴京城.bmp")))
+		{
+			// 找送礼协会会长丁
+			FindNPCByWorldMap(_T("送礼协会会长丁"));
+			IsWalkStop();
+			SRAND(300, 500); // 等对话框出现;
+			if (ClickDlgSetup(_T("img\\活动\\周六礼物\\我来领取礼物.bmp")))
+			{
+				if (ClickDlgSetup(_T("img\\活动\\周六礼物\\好的.bmp")))
+				{
+					// 找铜钱怪;
+					FindNPCByWorldMap(_T("【汴】铜钱怪"));
+					IsWalkStop();
+					SRAND(300, 500);
+					if (ClickDlgSetup(_T("img\\活动\\周六礼物\\铜钱怪:进入战斗.bmp")))
+					{
+						// 将鼠标移动到指定位置;
+						POINT ptDest = { 625, 28 }; // 左上角;
+						MouseMove(ptDest);
+						while (IsBattle())
+						{
+							// 判断是否我方攻击;
+							if (IsWattingAttack(1))
+							{
+								SendKey(VK_A, FALSE, TRUE);
+							}
+
+							SRAND(500, 750);
+						}
+
+						// 送礼协会会长乙;
+						FindNPCByWorldMap(_T("送礼协会会长乙"));
+						IsWalkStop();
+						// 再右键一次;
+						SRAND(200, 300);
+						MouseRClick();
+						FindNPCByWorldMap(_T("送礼协会会长丙")); SRAND(200, 300);
+						if (ClickDlgSetup(_T("img\\活动\\周六礼物\\好,现在就去.bmp")))
+						{
+							// 等待切换地图;
+							SRAND(800, 900);
+						}
+					}
+				}
+			}
+		}
+
+		if (IsOnMap(_T("img\\地图\\应天府.bmp")))
+		{
+			// 找送礼协会会长丁
+			FindNPCByWorldMap(_T("送礼协会会长甲"));
+			IsWalkStop();
+			SRAND(300, 500); // 等对话框出现;
+			if (ClickDlgSetup(_T("img\\活动\\周六礼物\\我来领取礼物.bmp")))
+			{
+				if (ClickDlgSetup(_T("img\\活动\\周六礼物\\好的.bmp")))
+				{
+					// 找铜钱怪;
+					FindNPCByWorldMap(_T("【应】铜钱怪"));
+					IsWalkStop();
+					SRAND(300, 500);
+					if (ClickDlgSetup(_T("img\\活动\\周六礼物\\铜钱怪:进入战斗.bmp")))
+					{
+						// 将鼠标移动到指定位置;
+						POINT ptDest = { 625, 28 }; // 左上角;
+						MouseMove(ptDest);
+						while (IsBattle())
+						{
+							// 判断是否我方攻击;
+							if (IsWattingAttack(1))
+							{
+								SendKey(VK_A, FALSE, TRUE);
+							}
+
+							SRAND(500, 750);
+						}
+
+						// 送礼协会会长乙;
+						FindNPCByWorldMap(_T("送礼协会会长甲"));
+						IsWalkStop();
+						SRAND(1000, 2000);
+						MouseRClick();
+					}
+				}
+			}
+		}
+	}
+	
+	void CAction::StartBattleJY()
+	{
+		m_hBattleJYEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
+		if (m_hBattleJYEvent == NULL) {
+			_tprintf_s(_T("创建事件失败\n"));
+			return;
+		}
+
+		m_hBattleJY = CreateThread(NULL, 0, BattleJYThread, this, 0, NULL);
+		if (m_hBattleJY == NULL) {
+			_tprintf_s(_T("创建线程失败\n"));
+
+			if (m_hBattleJYEvent) {
+				SetEvent(m_hBattleJYEvent);
+				CloseHandle(m_hBattleJYEvent);
+				m_hBattleJYEvent = NULL;
+			}
+		}
+	}
+
+	void CAction::StopBattleJY()
+	{
+		// 设置事件有信号;
+		if (m_hBattleJYEvent)
+			SetEvent(m_hBattleJYEvent);
+
+		// 等待线程结束;
+		if (m_hBattleJY) {
+			WaitForSingleObject(m_hBattleJY, INFINITE);
+			CloseHandle(m_hBattleJY);
+			m_hBattleJY = NULL;
+		}
+
+		// 关闭事件句柄;
+		if (m_hBattleJYEvent) {
+			CloseHandle(m_hBattleJYEvent);
+			m_hBattleJYEvent = NULL;
+		}
+
+	}
+	
+	DWORD __stdcall CAction::BattleJYThread(LPVOID lpParam)
+	{
+		int i = 0;
+		CAction* pThis = (CAction*)lpParam;
+		do 
+		{
+			DebugLog(_T("start.打镜妖 %d----------------------------"), i);
+			pThis->BattleJY(pThis->m_bHasSummoner, pThis->m_nSummonerSkillType, pThis->m_bTargetOfRoleSkill);
+			DebugLog(_T("end.打镜妖 %d----------------------------\n"), i++);
+		} while (WaitForSingleObject(pThis->m_hBattleJYEvent, 200) == WAIT_TIMEOUT);
+
+		return 0;
+	}
 };

+ 25 - 3
GameAssist/GameAssist/CAction.h

@@ -16,6 +16,8 @@ namespace GameAssist {
 		POINT ptNpc;	// npc具体坐标;
 	}PNPC, * pPNPC;
 
+	extern std::map<std::string, POINT> g_mapZYNPC;
+	extern std::map<std::string, PNPC> g_mapZYNPC2;
 	// 单击:POINT
 	// 右击:POINT
 	// 双击:POINT
@@ -38,7 +40,7 @@ namespace GameAssist {
 		HWND m_hGameWnd;
 		static ThreadSection m_ts;
 		POINT m_ptCur;
-	private:
+public:
 		// 鼠标移动;
 		void MouseMove(POINT pt, bool bSetCurPos = true);
 		void MouseMove(POINT ptStart, POINT ptEnd, bool bSetCurPos = true);
@@ -64,7 +66,7 @@ namespace GameAssist {
 		~CAction();
 
 		// 初始NPC坐标;
-		void InitNPCInfo();
+		static void InitNPCInfo();
 		// 窗口前置;
 		void SetGameForeground();
 		// 是否停止走路;
@@ -95,10 +97,30 @@ namespace GameAssist {
 		// 与镜妖战斗;
 		// bHasSummoner是否有召唤兽;
 		// nZJType:重击类型;
-		// bAggressiveSkill:人物攻击技能还是辅助技能;
+		// bAggressiveSkill:技能是作用在敌人身上还是自己身上; true:敌人, false:自己
 		void BattleJY(BOOL bHasSummoner, int nZJType, BOOL bAggressiveSkill);
 		// 与职业医师战斗;
 		void BattleYS(LPCTSTR lpszSkillName);
+		// 与职业医师以外的战斗;
+		void BattleOthers(LPCTSTR lpszName, LPCTSTR lpszSkillName);
+
+		// 开宝箱;
+		void OpenChest(int nTimes=10);
+		// 周六领礼物;
+		void GetSaturdayPresents();
+
+	private:
+		HANDLE m_hBattleJY;
+		HANDLE m_hBattleJYEvent;
+		HANDLE m_hBattleZYTZ;
+	public:
+		bool m_bHasSummoner;		// 是否有召唤曽;
+		int m_nSummonerSkillType;	// 重击技能类型;
+		bool m_bTargetOfRoleSkill;	// 人物技能作用对象:true = 敌人、 false = 自己;
+
+		void StartBattleJY();
+		void StopBattleJY();
+		static DWORD WINAPI BattleJYThread(LPVOID lpParam);
 	};
 
 };

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 986
GameAssist/GameAssist/GameAssistDlg.cpp


+ 1 - 0
GameAssist/GameAssist/GameAssistDlg.h

@@ -32,6 +32,7 @@ protected:
 
 	MouseAssist m_mouseAssist;
 	HWND GetCurGameWnd();
+	GameAssist::GameWndInfo* GetCurGameInfo();
 public:
 	afx_msg void OnBnClickedOpengame();
 	afx_msg void OnBnClickedButton2();

Vissa filer visades inte eftersom för många filer har ändrats