فهرست منبع

完善职业挑战

Wang Jeff 4 سال پیش
والد
کامیت
e3263ffd76

+ 12 - 10
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++ 缂傚倸鍊搁崐鎼佸磹閹间礁纾圭憸鐗堝笚閸嬪鏌i幇顒備粵妞ゆ劘濮ら妵鍕箛閸洘顎嶉梺绋块缁夊綊寮诲☉銏犲嵆闁靛鍎查悘鎾绘⒑闂堟稓澧遍柛瀣噽閹?\n"
-    "#include ""l.CHS\\afxres.rc""      // 闂傚倸鍊风粈渚€骞栭銈囩煋闁哄鍤氬ú顏勎у璺猴躬濡嘲顪冮妶鍡欏缂侇喖娴锋竟鏇熺附閸涘﹦鍘遍梺鍝勬储閸斿鑺遍崗绗轰簻?\n"
+    "#include ""res\\GameAssist.rc2""  // 闂?Microsoft Visual C++ 缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧湱鎲搁悧鍫濈瑲闁稿顑夐弻锝夊箛椤掑倷绮靛銈嗗姌婵倝濡甸崟顖氱疀闁割偅娲橀宥夋⒑缁嬪潡顎楃紒澶婄秺瀵鈽夐姀鐘插祮闂侀潧顭堥崕鏌ユ倶閹剧粯鈷戦梻鍫熺〒婢ч亶鏌涚€n亝鍣介柟?\n"
+    "#include ""l.CHS\\afxres.rc""      // 闂傚倸鍊搁崐椋庣矆娓氣偓楠炴牠顢曢妶鍥╃厠闂佸搫顦伴崵姘洪鍕幯冾熆鐠虹尨韬俊顐㈠槻椤啴濡堕崱娆忣潷缂備緡鍠栧ù閿嬬珶閺囩喓闄勯柛娑橈功閸橀亶姊洪崫鍕偍闁告柨顑囬懞閬嶅礂缁楄桨绨?\n"
     "#endif\r\n"
     "\0"
 END
@@ -88,14 +88,14 @@ BEGIN
     DEFPUSHBUTTON   "确定",IDOK,113,41,50,14,WS_GROUP
 END
 
-IDD_GAMEASSIST_DIALOG DIALOGEX 0, 0, 269, 237
+IDD_GAMEASSIST_DIALOG DIALOGEX 0, 0, 269, 344
 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
 EXSTYLE WS_EX_APPWINDOW
 CAPTION "GameAssist"
 FONT 9, "MS Shell Dlg", 0, 0, 0x1
 BEGIN
-    DEFPUSHBUTTON   "确定",IDOK,151,215,50,14
-    PUSHBUTTON      "取消",IDCANCEL,212,215,50,14
+    DEFPUSHBUTTON   "确定",IDOK,151,322,50,14
+    PUSHBUTTON      "取消",IDCANCEL,212,322,50,14
     PUSHBUTTON      "打开",BTN_OPENGAME,7,87,50,14
     PUSHBUTTON      "截图",IDC_BUTTON2,7,33,50,14
     PUSHBUTTON      "镜妖",IDC_BUTTON3,7,51,50,14
@@ -121,7 +121,9 @@ BEGIN
     PUSHBUTTON      "复制战斗",IDC_BUTTON10,7,188,50,14
     COMBOBOX        IDC_COMBO1,9,8,149,30,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
     PUSHBUTTON      "刷新",IDC_BUTTON11,167,7,50,14
-    PUSHBUTTON      "Alt+A",IDC_BUTTON12,7,215,50,14
+    PUSHBUTTON      "Alt+A",IDC_BUTTON12,7,207,50,14
+    PUSHBUTTON      "到指定NPC坐标",IDC_BUTTON13,7,230,57,14
+    COMBOBOX        IDC_COMBO2,66,231,101,97,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
 END
 
 
@@ -185,8 +187,8 @@ BEGIN
         LEFTMARGIN, 7
         RIGHTMARGIN, 262
         TOPMARGIN, 7
-        BOTTOMMARGIN, 229
-        HORZGUIDE, 229
+        BOTTOMMARGIN, 336
+        HORZGUIDE, 336
     END
 END
 #endif    // APSTUDIO_INVOKED
@@ -231,8 +233,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++ 缂傚倸鍊搁崐鎼佸磹閹间礁纾圭憸鐗堝笚閸嬪鏌i幇顒備粵妞ゆ劘濮ら妵鍕箛閸洘顎嶉梺绋块缁夊綊寮诲☉銏犲嵆闁靛鍎查悘鎾绘⒑闂堟稓澧遍柛瀣噽閹?
-#include "l.CHS\afxres.rc"      // 闂傚倸鍊风粈渚€骞栭銈囩煋闁哄鍤氬ú顏勎у璺猴躬濡嘲顪冮妶鍡欏缂侇喖娴锋竟鏇熺附閸涘﹦鍘遍梺鍝勬储閸斿鑺遍崗绗轰簻?
+#include "res\GameAssist.rc2"  // 闂?Microsoft Visual C++ 缂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧湱鎲搁悧鍫濈瑲闁稿顑夐弻锝夊箛椤掑倷绮靛銈嗗姌婵倝濡甸崟顖氱疀闁割偅娲橀宥夋⒑缁嬪潡顎楃紒澶婄秺瀵鈽夐姀鐘插祮闂侀潧顭堥崕鏌ユ倶閹剧粯鈷戦梻鍫熺〒婢ч亶鏌涚€n亝鍣介柟?
+#include "l.CHS\afxres.rc"      // 闂傚倸鍊搁崐椋庣矆娓氣偓楠炴牠顢曢妶鍥╃厠闂佸搫顦伴崵姘洪鍕幯冾熆鐠虹尨韬俊顐㈠槻椤啴濡堕崱娆忣潷缂備緡鍠栧ù閿嬬珶閺囩喓闄勯柛娑橈功閸橀亶姊洪崫鍕偍闁告柨顑囬懞閬嶅礂缁楄桨绨?
 #endif
 
 /////////////////////////////////////////////////////////////////////////////

+ 108 - 4
GameAssist/GameAssist/GameAssistDlg.cpp

@@ -15,13 +15,21 @@
 #define RAND(a,b) (rand()%(b-a)+a)
 #define SRAND(a,b) (Sleep(rand()%(b-a)+a))
 
+typedef struct POINT_NPC
+{
+	POINT ptMap;
+	POINT ptNpc;
+}PNPC, * pPNPC;
+
 std::map<std::string, POINT> g_mapZYNPC;
+std::map<std::string, PNPC> g_mapZYNPC2;
 
 void InitZYNPC();
 BOOL IsWalkStop(HWND hWnd);
 CRect FindMatchIcon(HWND hWnd, LPCSTR lpszTemplateImage);
 void WorldMapPositioning(HWND hWnd, POINT ptMap);
 BOOL FindNPC(HWND hWnd, POINT ptMap, LPCTSTR lpszNPCName);
+BOOL FindNPC(HWND hWnd, LPCTSTR lpNPCName, POINT ptMap, POINT ptNpc);
 
 VOID DebugLog(CHAR* pszStr, ...)
 {
@@ -55,6 +63,18 @@ void InitZYNPC()
 		// 应天府NPC
 		g_mapZYNPC.insert(std::pair<std::string, POINT>(_T("职业训导大师"), { 315, 415 }));
 
+		g_mapZYNPC2.insert(std::pair<std::string, PNPC>(_T("医师独侠"), { { 305, 325 }, { 590, 380 } }));
+		g_mapZYNPC2.insert(std::pair<std::string, PNPC>(_T("术士独侠"), { { 305, 325 }, { 610, 160 } }));
+		g_mapZYNPC2.insert(std::pair<std::string, PNPC>(_T("道士独侠"), { { 305, 325 }, { 140, 160 } }));
+		g_mapZYNPC2.insert(std::pair<std::string, PNPC>(_T("武师独侠"), { { 305, 325 }, { 140, 380 } }));
+		g_mapZYNPC2.insert(std::pair<std::string, PNPC>(_T("浪子独侠"), { { 160, 435 }, { 190, 370 } }));
+		g_mapZYNPC2.insert(std::pair<std::string, PNPC>(_T("剑客独侠"), { { 420, 215 }, { 540, 170 } }));
+		g_mapZYNPC2.insert(std::pair<std::string, PNPC>(_T("弓手独侠"), { { 265, 230 }, { 460, 150 } }));
+		g_mapZYNPC2.insert(std::pair<std::string, PNPC>(_T("禁卫独侠"), { { 155, 205 }, { 605, 235 } }));
+		g_mapZYNPC2.insert(std::pair<std::string, PNPC>(_T("墨者独侠"), { { 155, 205 }, { 315, 380 } }));
+		g_mapZYNPC2.insert(std::pair<std::string, PNPC>(_T("巫煞独侠"), { { 155, 205 }, { 270, 175 } }));
+		g_mapZYNPC2.insert(std::pair<std::string, PNPC>(_T("魂武独侠"), { { 165, 335 }, { 270, 305 } }));
+
 		bInit = true;
 	}
 }
@@ -133,12 +153,61 @@ BOOL FindNPC(HWND hWnd, POINT ptMap, LPCTSTR lpszNPCName)
 	return TRUE;
 }
 
+BOOL FindNPC(HWND hWnd, LPCTSTR lpszNPCName, POINT ptMap, POINT ptNpc)
+{
+	TCHAR szNPC[MAX_PATH] = { 0 };
+	_stprintf_s(szNPC, _T("img\\npc\\%s.bmp"), lpszNPCName);
+	CRect rc = FindMatchIcon(hWnd, szNPC);
+	if (rc.IsRectEmpty() || rc.IsRectNull())
+	{
+		WorldMapPositioning(hWnd, ptMap);
+		Sleep(600); // 有时走到目标点,NPC还未刷新出来;
+		rc = FindMatchIcon(hWnd, szNPC);
+		if (rc.IsRectEmpty() || rc.IsRectNull())
+		{
+			// 可能还是未刷新出来,再次等待;
+			Sleep(300);
+			rc = FindMatchIcon(hWnd, szNPC);
+			if (rc.IsRectEmpty() || rc.IsRectNull())
+			{
+				return FALSE;
+			}
+		}
+	}
+
+	// 找到目标,单击;
+	GAssist::MouseMove(hWnd, CPoint(rc.left, rc.top));
+	// 单击:我要挑战他们;
+	GAssist::MouseClick(hWnd, ptNpc, TRUE);
+
+	// 遍历3次;
+	BOOL bFind = FALSE;
+	for (int i = 0; i < 3; i++)
+	{
+		Sleep(800 - i * 150);
+		CRect rc = FindMatchIcon(hWnd, "img\\对话框关闭按钮.bmp");
+		if (!rc.IsRectEmpty() && !rc.IsRectNull())
+		{
+			bFind = TRUE;
+			break;
+		}
+	}
+
+	// 移动鼠标:不要停留在人物身上;
+	GAssist::MouseMove(hWnd, { ptNpc.x - rand() % 10, ptNpc.y - rand() % 10 });
+
+	return bFind;
+}
+
 BOOL FindZYPNC(HWND hWnd, LPCTSTR lpNPCName)
 {
-	auto it = g_mapZYNPC.find(lpNPCName);
-	if (it != g_mapZYNPC.end())
+	auto it = g_mapZYNPC2.find(lpNPCName);
+	if (it != g_mapZYNPC2.end())
 	{
-		return FindNPC(hWnd, it->second, it->first.c_str());
+		if (FindNPC(hWnd, it->first.c_str(), it->second.ptMap, it->second.ptNpc))
+		{
+			return TRUE;
+		}
 	}
 
 	return FALSE;
@@ -807,6 +876,7 @@ void BattleYS(HWND hWnd, const char* lpszJN)
 					if (nRet == 1)
 					{
 						// 没有找到技能;
+						SRAND(300, 500);
 						continue;
 					}
 
@@ -896,6 +966,7 @@ void BattleOthers(HWND hWnd, const char* lpszName, const char* lpszSkillName)
 		GAssist::MouseClick(hWnd, CPoint((rc.right + rc.left) / 2, (rc.top + rc.bottom) / 2), TRUE);
 		SRAND(330, 550);
 		GAssist::MouseMoveEx(hWnd, { rc.left, rc.top }, { rc.right + rand() % 10, rc.bottom + rand() % 10 });
+		SRAND(50, 100);
 		// 确定
 		bBattle = TRUE;
 		ClickDlgSetup(hWnd, _T("img\\确定.bmp"));
@@ -994,6 +1065,7 @@ void CGameAssistDlg::DoDataExchange(CDataExchange* pDX)
 	DDX_Control(pDX, IDC_CHECK3, m_cbZJ2);
 	DDX_Control(pDX, IDC_CHECK6, m_cbAggressiveSkill);
 	DDX_Control(pDX, IDC_COMBO1, m_cbGameRole);
+	DDX_Control(pDX, IDC_COMBO2, m_cbZYNPC);
 }
 
 BEGIN_MESSAGE_MAP(CGameAssistDlg, CDialog)
@@ -1013,6 +1085,7 @@ BEGIN_MESSAGE_MAP(CGameAssistDlg, CDialog)
 	ON_BN_CLICKED(IDC_BUTTON10, &CGameAssistDlg::OnBnClickedButton10)
 	ON_BN_CLICKED(IDC_BUTTON11, &CGameAssistDlg::OnBnClickedButton11)
 	ON_BN_CLICKED(IDC_BUTTON12, &CGameAssistDlg::OnBnClickedButton12)
+	ON_BN_CLICKED(IDC_BUTTON13, &CGameAssistDlg::OnBnClickedButton13)
 END_MESSAGE_MAP()
 
 
@@ -1021,7 +1094,7 @@ END_MESSAGE_MAP()
 BOOL CGameAssistDlg::OnInitDialog()
 {
 	CDialog::OnInitDialog();
-	InitZYNPC();
+	
 	// 将“关于...”菜单项添加到系统菜单中。
 
 	// IDM_ABOUTBOX 必须在系统命令范围内。
@@ -1049,6 +1122,14 @@ BOOL CGameAssistDlg::OnInitDialog()
 
 	// TODO: 在此添加额外的初始化代码
 	GAssist::Init();
+	InitZYNPC();
+
+	int nIndex = 0;
+	for each (auto it in g_mapZYNPC)
+	{
+		m_cbZYNPC.InsertString(nIndex++, it.first.c_str());
+	}
+	m_cbZYNPC.SetCurSel(0);
 
 	return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
 }
@@ -1816,10 +1897,14 @@ void CGameAssistDlg::OnBnClickedButton12()
 {
 	// TODO: 在此添加控件通知处理程序代码
 	HWND hWnd = GAssist::GetProcessMainWnd();
+	// 将鼠标移动到指定位置;
+	POINT ptDest = { 625, 28 }; // 左上角;
+	
 	while ( true )
 	{
 		while (IsBattle(hWnd))
 		{
+			GAssist::MouseMove(hWnd, ptDest);
 			if ( IsWattingAttack(hWnd,1) )
 			{
 				GAssist::SendKey(hWnd, VK_A, FALSE, TRUE);
@@ -1830,3 +1915,22 @@ void CGameAssistDlg::OnBnClickedButton12()
 		Sleep(600);
 	}
 }
+
+
+void CGameAssistDlg::OnBnClickedButton13() // 地图找挑战NPC;
+{
+	HWND hWnd = GAssist::GetProcessMainWnd();
+	int nCurSel = m_cbZYNPC.GetCurSel();
+	if (nCurSel == CB_ERR)
+		return;
+
+	CString strNPC;
+	m_cbZYNPC.GetLBText(nCurSel, strNPC);
+	auto it = g_mapZYNPC.find(strNPC.GetString());
+	if (it != g_mapZYNPC.end())
+	{
+		//FindNPC(hWnd, { it->second.x, it->second.y }, it->first.c_str());
+		WorldMapPositioning(hWnd, { it->second.x, it->second.y });
+	}
+
+}

+ 2 - 0
GameAssist/GameAssist/GameAssistDlg.h

@@ -49,4 +49,6 @@ public:
 	CComboBox m_cbGameRole;
 	afx_msg void OnBnClickedButton11();
 	afx_msg void OnBnClickedButton12();
+	CComboBox m_cbZYNPC;
+	afx_msg void OnBnClickedButton13();
 };

+ 3 - 1
GameAssist/GameAssist/resource.h

@@ -33,6 +33,8 @@
 #define IDC_COMBO1                      1023
 #define IDC_BUTTON11                    1024
 #define IDC_BUTTON12                    1025
+#define IDC_BUTTON13                    1026
+#define IDC_COMBO2                      1027
 
 // Next default values for new objects
 // 
@@ -40,7 +42,7 @@
 #ifndef APSTUDIO_READONLY_SYMBOLS
 #define _APS_NEXT_RESOURCE_VALUE        129
 #define _APS_NEXT_COMMAND_VALUE         32771
-#define _APS_NEXT_CONTROL_VALUE         1026
+#define _APS_NEXT_CONTROL_VALUE         1028
 #define _APS_NEXT_SYMED_VALUE           101
 #endif
 #endif

BIN
GameAssist/img/npc/剑客独侠.bmp


BIN
GameAssist/img/npc/医师独侠.bmp


BIN
GameAssist/img/npc/墨者独侠.bmp


BIN
GameAssist/img/npc/巫煞独侠.bmp


BIN
GameAssist/img/npc/弓手独侠.bmp


BIN
GameAssist/img/npc/术士独侠.bmp


BIN
GameAssist/img/npc/武师独侠.bmp


BIN
GameAssist/img/npc/浪子独侠.bmp


BIN
GameAssist/img/npc/禁卫独侠.bmp


BIN
GameAssist/img/npc/道士独侠.bmp


BIN
GameAssist/img/npc/魂武独侠.bmp