GameAssistDlg.cpp 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685
  1. // GameAssistDlg.cpp : 实现文件
  2. //
  3. #include "stdafx.h"
  4. #include "GameAssist.h"
  5. #include "GameAssistDlg.h"
  6. //#include "VideoDXGICaptor.h"
  7. #include "MouseAssist.h"
  8. #include "CAction.h"
  9. #ifdef _DEBUG
  10. #define new DEBUG_NEW
  11. #endif
  12. // 用于应用程序“关于”菜单项的 CAboutDlg 对话框
  13. VOID DebugLog(CHAR* pszStr, ...)
  14. {
  15. char szData[MAX_PATH] = { 0 };
  16. _stprintf_s(szData, _T("%s %s "), _T("[GameAssist] "), CTime::GetCurrentTime().Format(_T("%Y-%m-%d %H:%M:%S")).GetString());
  17. int len = strlen(szData);
  18. va_list args;
  19. va_start(args, pszStr);
  20. _vsnprintf_s(szData + len, MAX_PATH - len, MAX_PATH - len, pszStr, args);
  21. va_end(args);
  22. strcat_s(szData, "\n");
  23. OutputDebugStringA(szData);
  24. }
  25. class CAboutDlg : public CDialog
  26. {
  27. public:
  28. CAboutDlg();
  29. // 对话框数据
  30. enum { IDD = IDD_ABOUTBOX };
  31. protected:
  32. virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
  33. // 实现
  34. protected:
  35. DECLARE_MESSAGE_MAP()
  36. };
  37. CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
  38. {
  39. }
  40. void CAboutDlg::DoDataExchange(CDataExchange* pDX)
  41. {
  42. CDialog::DoDataExchange(pDX);
  43. }
  44. BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
  45. END_MESSAGE_MAP()
  46. // CGameAssistDlg 对话框
  47. CGameAssistDlg::CGameAssistDlg(CWnd* pParent /*=NULL*/)
  48. : CDialog(CGameAssistDlg::IDD, pParent)
  49. {
  50. m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
  51. }
  52. void CGameAssistDlg::DoDataExchange(CDataExchange* pDX)
  53. {
  54. CDialog::DoDataExchange(pDX);
  55. DDX_Control(pDX, IDC_CHECK1, m_cbSummoner);
  56. DDX_Control(pDX, IDC_CHECK2, m_cbZJ);
  57. DDX_Control(pDX, IDC_CHECK3, m_cbZJ2);
  58. DDX_Control(pDX, IDC_CHECK6, m_cbAggressiveSkill);
  59. DDX_Control(pDX, IDC_COMBO1, m_cbGameRole);
  60. DDX_Control(pDX, IDC_COMBO2, m_cbZYNPC);
  61. DDX_Control(pDX, IDC_COMBO_SKILL_LIST, m_cb_skill_list);
  62. }
  63. BEGIN_MESSAGE_MAP(CGameAssistDlg, CDialog)
  64. ON_WM_SYSCOMMAND()
  65. ON_WM_PAINT()
  66. ON_WM_QUERYDRAGICON()
  67. //}}AFX_MSG_MAP
  68. ON_BN_CLICKED(BTN_OPENGAME, &CGameAssistDlg::OnBnClickedOpengame)
  69. ON_BN_CLICKED(IDC_BUTTON2, &CGameAssistDlg::OnBnClickedButton2)
  70. ON_BN_CLICKED(IDC_BUTTON3, &CGameAssistDlg::OnBnClickedButton3)
  71. ON_BN_CLICKED(IDC_BUTTON4, &CGameAssistDlg::OnBnClickedButton4)
  72. ON_BN_CLICKED(IDC_BUTTON5, &CGameAssistDlg::OnBnClickedButton5)
  73. ON_BN_CLICKED(IDC_BUTTON6, &CGameAssistDlg::OnBnClickedButton6)
  74. ON_BN_CLICKED(IDC_BUTTON7, &CGameAssistDlg::OnBnClickedButton7)
  75. ON_BN_CLICKED(IDC_BUTTON8, &CGameAssistDlg::OnBnClickedButton8)
  76. ON_BN_CLICKED(IDC_BUTTON9, &CGameAssistDlg::OnBnClickedButton9)
  77. ON_BN_CLICKED(IDC_BUTTON10, &CGameAssistDlg::OnBnClickedButton10)
  78. ON_BN_CLICKED(IDC_BUTTON11, &CGameAssistDlg::OnBnClickedButton11)
  79. ON_BN_CLICKED(IDC_BUTTON12, &CGameAssistDlg::OnBnClickedButton12)
  80. ON_BN_CLICKED(IDC_BUTTON13, &CGameAssistDlg::OnBnClickedButton13)
  81. ON_BN_CLICKED(IDC_BUTTON14, &CGameAssistDlg::OnBnClickedButton14)
  82. END_MESSAGE_MAP()
  83. // CGameAssistDlg 消息处理程序
  84. BOOL CGameAssistDlg::OnInitDialog()
  85. {
  86. CDialog::OnInitDialog();
  87. // 将“关于...”菜单项添加到系统菜单中。
  88. // IDM_ABOUTBOX 必须在系统命令范围内。
  89. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
  90. ASSERT(IDM_ABOUTBOX < 0xF000);
  91. CMenu* pSysMenu = GetSystemMenu(FALSE);
  92. if (pSysMenu != NULL)
  93. {
  94. BOOL bNameValid;
  95. CString strAboutMenu;
  96. bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
  97. ASSERT(bNameValid);
  98. if (!strAboutMenu.IsEmpty())
  99. {
  100. pSysMenu->AppendMenu(MF_SEPARATOR);
  101. pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
  102. }
  103. }
  104. // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
  105. // 执行此操作
  106. SetIcon(m_hIcon, TRUE); // 设置大图标
  107. SetIcon(m_hIcon, FALSE); // 设置小图标
  108. // TODO: 在此添加额外的初始化代码
  109. GameGlobal::Init();
  110. int nIndex = 0;
  111. for each (auto it in GameAssist::g_mapZYNPC)
  112. {
  113. m_cbZYNPC.InsertString(nIndex++, it.first.c_str());
  114. }
  115. m_cbZYNPC.SetCurSel(0);
  116. OnBnClickedButton11();
  117. InitSkillList();
  118. return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
  119. }
  120. void CGameAssistDlg::OnSysCommand(UINT nID, LPARAM lParam)
  121. {
  122. if ((nID & 0xFFF0) == IDM_ABOUTBOX)
  123. {
  124. CAboutDlg dlgAbout;
  125. dlgAbout.DoModal();
  126. }
  127. else
  128. {
  129. CDialog::OnSysCommand(nID, lParam);
  130. }
  131. }
  132. // 如果向对话框添加最小化按钮,则需要下面的代码
  133. // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
  134. // 这将由框架自动完成。
  135. void CGameAssistDlg::OnPaint()
  136. {
  137. if (IsIconic())
  138. {
  139. CPaintDC dc(this); // 用于绘制的设备上下文
  140. SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
  141. // 使图标在工作区矩形中居中
  142. int cxIcon = GetSystemMetrics(SM_CXICON);
  143. int cyIcon = GetSystemMetrics(SM_CYICON);
  144. CRect rect;
  145. GetClientRect(&rect);
  146. int x = (rect.Width() - cxIcon + 1) / 2;
  147. int y = (rect.Height() - cyIcon + 1) / 2;
  148. // 绘制图标
  149. dc.DrawIcon(x, y, m_hIcon);
  150. }
  151. else
  152. {
  153. CDialog::OnPaint();
  154. }
  155. }
  156. //当用户拖动最小化窗口时系统调用此函数取得光标
  157. //显示。
  158. HCURSOR CGameAssistDlg::OnQueryDragIcon()
  159. {
  160. return static_cast<HCURSOR>(m_hIcon);
  161. }
  162. HWND CGameAssistDlg::GetCurGameWnd()
  163. {
  164. int nCurSel = m_cbGameRole.GetCurSel();
  165. if (nCurSel == CB_ERR)
  166. return NULL;
  167. GameAssist::GameWndInfo* pInfo = (GameAssist::GameWndInfo*)m_cbGameRole.GetItemDataPtr(nCurSel);
  168. return pInfo->hWnd;
  169. }
  170. GameAssist::GameWndInfo* CGameAssistDlg::GetCurGameInfo()
  171. {
  172. int nCurSel = m_cbGameRole.GetCurSel();
  173. if (nCurSel == CB_ERR)
  174. return NULL;
  175. return (GameAssist::GameWndInfo*)m_cbGameRole.GetItemDataPtr(nCurSel);
  176. }
  177. void CGameAssistDlg::InitSkillList()
  178. {
  179. m_cb_skill_list.AddString("F1");
  180. m_cb_skill_list.AddString("F2");
  181. m_cb_skill_list.AddString("F3");
  182. m_cb_skill_list.AddString("F4");
  183. m_cb_skill_list.AddString("F5");
  184. m_cb_skill_list.AddString("F6");
  185. m_cb_skill_list.AddString("F7");
  186. m_cb_skill_list.AddString("F8");
  187. m_cb_skill_list.SetCurSel(7);
  188. }
  189. void CGameAssistDlg::OnBnClickedOpengame() // 打开游戏;
  190. {
  191. // TODO: 在此添加控件通知处理程序代码
  192. if (!PathFileExists(GameGlobal::g_szGameApp))
  193. {
  194. MessageBox(_T("游戏程序不存在"), _T("温馨提示"));
  195. return;
  196. }
  197. // 设置辅助程序工作目录为游戏目录;
  198. //SetCurrentDirectory(_T("E:\\dhsh\\shdata\\"));
  199. SetCurrentDirectory(_T("D:\\tools\\dhsh\\shdata\\"));
  200. #if 1
  201. ShellExecute(NULL, "open", GameGlobal::g_szGameApp, NULL, NULL, SW_SHOWNORMAL);//SW_HIDE无用,因为会自动结;
  202. Sleep(500); // Main.exe设置了陷阱(自己再开启了一个进程,结束上一个进程),需要等5秒;
  203. #else
  204. SHELLEXECUTEINFO stuExecInfo = { 0 };
  205. DWORD dwExitCode = STILL_ACTIVE;
  206. //CString strCommandLine = _T("open");
  207. stuExecInfo.cbSize = sizeof(SHELLEXECUTEINFO);
  208. stuExecInfo.lpFile = GameGlobal::g_szGamePath;
  209. stuExecInfo.lpParameters = "open";
  210. stuExecInfo.nShow = SW_SHOWNORMAL;
  211. stuExecInfo.fMask = SEE_MASK_NOCLOSEPROCESS | SEE_MASK_FLAG_NO_UI;
  212. if (!ShellExecuteEx(&stuExecInfo))
  213. {
  214. DWORD dwError = GetLastError();
  215. CString strError = _T("");
  216. strError.Format(_T("执行ShellExecuteEx失败,错误码:%d"), dwError);
  217. AfxMessageBox(strError);
  218. return;
  219. }
  220. HANDLE hProcess = stuExecInfo.hProcess;
  221. if (hProcess != NULL)
  222. {
  223. WaitForSingleObject(hProcess, INFINITE);
  224. CloseHandle(hProcess);
  225. }
  226. #endif
  227. DWORD dwPID = GameAssist::GetProcessId(_T("Main.exe"));
  228. #if 1
  229. EnumWindows(GameAssist::EnumChildWindowCallBack, dwPID);
  230. if (GameAssist::g_vtCtrlInfo.size())
  231. {
  232. GameAssist::CtrlInfo* gp = NULL;
  233. GameAssist::CtrlInfo* gbmin = NULL;
  234. GameAssist::CtrlInfo* gbentry = NULL;
  235. for (std::vector<GameAssist::CtrlInfo>::iterator it = GameAssist::g_vtCtrlInfo.begin(); it != GameAssist::g_vtCtrlInfo.end(); it++)
  236. {
  237. if (_tcsicmp(it->strWinText.c_str(), _T("最小化")) == 0)
  238. {
  239. gbmin = &*it;
  240. }
  241. if (_tcsicmp(it->strWinText.c_str(), _T("大话水浒")) == 0)
  242. {
  243. gp = &*it;
  244. }
  245. if (_tcsicmp(it->strWinText.c_str(), _T("进入游戏")) == 0)
  246. {
  247. gbentry = &*it;
  248. }
  249. }
  250. if (gp && gbentry && gbmin)
  251. {
  252. //::SendMessage(gp->hwnd, WM_LBUTTONDOWN, (WPARAM)gb->dwId, 0);
  253. //::SendMessage(gp->hwnd, WM_LBUTTONUP, (WPARAM)gb->dwId, 0);
  254. // 发送点击事件;
  255. // 先最小化;
  256. ::SendMessage(gp->hwnd, WM_COMMAND, gbmin->dwId, NULL);
  257. // 再进入;
  258. ::SendMessage(gp->hwnd, WM_COMMAND, gbentry->dwId, NULL);
  259. Sleep(1500);
  260. dwPID = GameAssist::GetProcessId();
  261. if (dwPID)
  262. {
  263. GameAssist::g_vtCtrlInfo.clear();
  264. EnumWindows(GameAssist::EnumChildWindowCallBack, dwPID);
  265. HWND hwnd = GameAssist::GetProcessMainWnd(dwPID);
  266. if (hwnd)
  267. {
  268. TCHAR szName[MAX_PATH] = { 0 };
  269. ::GetWindowText(hwnd, szName, MAX_PATH);
  270. CRect rc;
  271. ::GetWindowRect(hwnd, &rc);
  272. TCHAR szLogMsg[MAX_PATH] = { 0 };
  273. _stprintf_s(szLogMsg, _T("窗口标题:%s, [%d,%d, %d,%d], width=%d, height=%d\n"), szName, rc.top, rc.left, rc.right, rc.bottom, rc.Width(), rc.Height());
  274. OutputDebugString(szLogMsg);
  275. if (1)
  276. { // 800x600
  277. // 发送按钮消息;进入游戏;
  278. GameAssist::MouseClick({ 585, 116 });
  279. // 发送按钮消息;下一步;
  280. GameAssist::MouseClick({ 536, 481 });
  281. // 发送按钮消息;电信一区;
  282. GameAssist::MouseClick({ 229, 342 });
  283. // 发送按钮消息;忘忧谷;
  284. GameAssist::MouseClick({ 335, 244 });
  285. // 发送按钮消息;下一步;
  286. GameAssist::MouseClick({ 559, 516 });
  287. }
  288. else
  289. {
  290. // 640x480
  291. // 发送按钮消息;进入游戏;
  292. GameAssist::MouseClick({ 440, 75 });
  293. // 发送按钮消息;下一步;
  294. GameAssist::MouseClick({ 468, 454 });
  295. // 发送按钮消息;电信一区;
  296. GameAssist::MouseClick({ 165, 241 });
  297. // 发送按钮消息;忘忧谷;
  298. GameAssist::MouseClick({ 289, 195 });
  299. // 发送按钮消息;下一步;
  300. GameAssist::MouseClick({ 494, 469 });
  301. }
  302. }
  303. }
  304. }
  305. }
  306. #endif
  307. }
  308. void CGameAssistDlg::OnBnClickedButton2() // 截图;
  309. {
  310. HWND hWnd = GetCurGameWnd();
  311. if (hWnd == NULL)
  312. return;
  313. UpdateData();
  314. INT nX = GetDlgItemInt(IDC_EDIT3);
  315. INT nY = GetDlgItemInt(IDC_EDIT4);
  316. INT nX2 = GetDlgItemInt(IDC_EDIT5);
  317. INT nY2 = GetDlgItemInt(IDC_EDIT6);
  318. BOOL bCropPicture = ((CButton*)GetDlgItem(IDC_CHECK5))->GetCheck();
  319. if (bCropPicture)
  320. {
  321. std::string strImg = GameGlobal::g_szTempDir;
  322. strImg.append(_T("裁剪结果.bmp"));
  323. ImgAssist::CropPicture(hWnd, { nX, nY, nX2, nY2 }, strImg.c_str());
  324. }
  325. else
  326. {
  327. CString strImg;
  328. strImg = CTime::GetCurrentTime().Format("%H%M%S-Game.bmp");
  329. ImgAssist::CaptureGameWnd(hWnd, strImg.GetString());
  330. }
  331. }
  332. void CGameAssistDlg::OnBnClickedButton3() // 镜妖;
  333. {
  334. UpdateData();
  335. /*
  336. -- 是否在星秀村
  337. -- 是否在贫民房
  338. |-- 否:我帮您抓
  339. |-- -- 是否进入过贫民房
  340. | |-- 否:我这就去
  341. | | |-- 选择:幸运镜妖
  342. | | |-- 我就选择它
  343. | |-- 是:直接进入贫民房
  344. |-- 是:找到镜妖NPC
  345. | |-- 我来抓您的
  346. | |
  347. | |
  348. |
  349. |
  350. */
  351. int nZJType = 0;
  352. if (m_cbZJ.GetCheck() || m_cbZJ2.GetCheck())
  353. {
  354. if (m_cbZJ.GetCheck())
  355. nZJType = 1;
  356. if (m_cbZJ2.GetCheck())
  357. nZJType = 2;
  358. }
  359. GameAssist::GameWndInfo* pGameInfo = GetCurGameInfo();
  360. if (pGameInfo && pGameInfo->pAction)
  361. {
  362. GameAssist::CAction* pAction = (GameAssist::CAction*)pGameInfo->pAction;
  363. pAction->m_bHasSummoner = m_cbSummoner.GetCheck();
  364. pAction->m_nSummonerSkillType = nZJType;
  365. pAction->m_bTargetOfRoleSkill = m_cbAggressiveSkill.GetCheck();
  366. pAction->StartBattleJY();
  367. }
  368. }
  369. void CGameAssistDlg::OnBnClickedButton4() // 周六领礼物
  370. {
  371. GameAssist::GameWndInfo* pGameInfo = GetCurGameInfo();
  372. if (pGameInfo && pGameInfo->pAction)
  373. {
  374. GameAssist::CAction* pAction = (GameAssist::CAction*)pGameInfo->pAction;
  375. pAction->GetSaturdayPresents();
  376. }
  377. }
  378. void CGameAssistDlg::OnBnClickedButton5() // 开宝箱;
  379. {
  380. GameAssist::GameWndInfo* pGameInfo = GetCurGameInfo();
  381. if (pGameInfo && pGameInfo->pAction)
  382. {
  383. GameAssist::CAction* pAction = (GameAssist::CAction*)pGameInfo->pAction;
  384. pAction->OpenChest(20);
  385. }
  386. }
  387. const char g_szHeros[12][10] = { "医师独侠","术士独侠","道士独侠","武师独侠","浪子独侠","剑客独侠","弓手独侠","禁卫独侠","墨者独侠","巫煞独侠","魂武独侠","寒星独侠" };
  388. void CGameAssistDlg::OnBnClickedButton6() // 职业挑战;
  389. {
  390. GameAssist::GameWndInfo* pGameInfo = GetCurGameInfo();
  391. if (pGameInfo && pGameInfo->pAction)
  392. {
  393. GameAssist::CAction* pAction = (GameAssist::CAction*)pGameInfo->pAction;
  394. if (!pAction->FindNPCByWorldMap("职业训导大师"))
  395. return;
  396. // 选择进入;
  397. BOOL bMatch = FALSE;
  398. int trySize = 20;
  399. // 我要挑战他们;
  400. while (!(bMatch = pAction->ClickDlgSetup(_T("img\\zyxdds-wytztm.bmp")))) {
  401. SRAND(1200, 2200);
  402. if (!trySize--) break;
  403. }
  404. // 准备好了
  405. if (pAction->ClickDlgSetup(_T("img\\zyxdds-zbhl.bmp")))
  406. {
  407. // 地图切换,等出图;
  408. SRAND(2000, 2500);
  409. if (pAction->IsOnMap(_T("img\\gdd\\name.bmp")))
  410. {
  411. pAction->FightingYS("缚神诀");
  412. for (int i = 1; i < 12; i++)
  413. {
  414. pAction->FightingOthers(g_szHeros[i], "缚神诀");
  415. }
  416. }
  417. }
  418. }
  419. }
  420. void CGameAssistDlg::OnBnClickedButton7() // 家园任务;
  421. {
  422. // TODO: 在此添加控件通知处理程序代码
  423. }
  424. void CGameAssistDlg::OnBnClickedButton8() // 职业挑战2;
  425. {
  426. CComboBox* pList = (CComboBox*)GetDlgItem(CB_HERO);
  427. int nIndex = pList->GetCurSel();
  428. if (nIndex == CB_ERR)
  429. return;
  430. GameAssist::GameWndInfo* pGameInfo = GetCurGameInfo();
  431. if (pGameInfo && pGameInfo->pAction)
  432. {
  433. GameAssist::CAction* pAction = (GameAssist::CAction*)pGameInfo->pAction;
  434. for (int i = nIndex; i < 12; i++)
  435. {
  436. //SRAND(250, 350);
  437. //pAction->SendKey(VK_A, FALSE, TRUE);
  438. if (pAction->IsSPBelowSafeValue(TRUE, TRUE, 30))
  439. {
  440. DebugLog(_T("低SP安全值"));
  441. // 右键;
  442. pAction->MouseMove({ (GameAssist::g_rcRoleIdleSP.right + GameAssist::g_rcRoleIdleSP.left) / 2 - 3, (GameAssist::g_rcRoleIdleSP.bottom + GameAssist::g_rcRoleIdleSP.top) / 2 - 20 });
  443. pAction->MouseRClick({ (GameAssist::g_rcRoleIdleSP.right + GameAssist::g_rcRoleIdleSP.left) / 2 - 3, (GameAssist::g_rcRoleIdleSP.bottom + GameAssist::g_rcRoleIdleSP.top) / 2 - 20 });
  444. }
  445. pAction->FightingOthers(g_szHeros[i], "缚神诀");
  446. }
  447. }
  448. }
  449. void CGameAssistDlg::OnBnClickedButton9() // 移动到目标点
  450. {
  451. UpdateData();
  452. INT nX = GetDlgItemInt(IDC_EDIT1);
  453. INT nY = GetDlgItemInt(IDC_EDIT2);
  454. BOOL bOpenMap = ((CButton*)GetDlgItem(IDC_CHECK4))->GetCheck();
  455. GameAssist::GameWndInfo* pGameInfo = GetCurGameInfo();
  456. if (pGameInfo && pGameInfo->pAction)
  457. {
  458. GameAssist::CAction* pAction = (GameAssist::CAction*)pGameInfo->pAction;
  459. if (bOpenMap)
  460. pAction->WorldMapPositioning({ nX, nY });
  461. else
  462. pAction->MouseMove({ nX, nY });
  463. }
  464. }
  465. void CGameAssistDlg::OnBnClickedButton10() // Alt+A
  466. {
  467. GameAssist::GameWndInfo* pGameInfo = GetCurGameInfo();
  468. if (pGameInfo && pGameInfo->pAction)
  469. {
  470. GameAssist::CAction* pAction = (GameAssist::CAction*)pGameInfo->pAction;
  471. while (true)
  472. {
  473. BOOL bFirst = TRUE;
  474. while (pAction->IsFighting())
  475. {
  476. if (pAction->IsWattingAttack(-1))
  477. {
  478. SRAND(250, 350);
  479. pAction->SendKey(VK_A, FALSE, TRUE);
  480. }
  481. Sleep(650);
  482. }
  483. if (pAction->IsSPBelowSafeValue(TRUE, TRUE, 10))
  484. {
  485. DebugLog(_T("低SP安全值"));
  486. // 右键;
  487. pAction->MouseMove({ (GameAssist::g_rcRoleIdleSP.right + GameAssist::g_rcRoleIdleSP.left) / 2 - 3, (GameAssist::g_rcRoleIdleSP.bottom + GameAssist::g_rcRoleIdleSP.top) / 2 - 20 });
  488. pAction->MouseRClick({ (GameAssist::g_rcRoleIdleSP.right + GameAssist::g_rcRoleIdleSP.left) / 2 - 3, (GameAssist::g_rcRoleIdleSP.bottom + GameAssist::g_rcRoleIdleSP.top) / 2 - 20 });
  489. }
  490. Sleep(800);
  491. }
  492. }
  493. }
  494. void CGameAssistDlg::OnBnClickedButton11() // 刷新;
  495. {
  496. std::vector<DWORD> vtPID;
  497. GameAssist::GetAllProcessId(vtPID);
  498. GameAssist::GetAllProcessMainWnd(vtPID, GameAssist::g_vtGameWndInfo);
  499. int nIndx = 0;
  500. m_cbGameRole.ResetContent();
  501. for (std::vector<GameAssist::GameWndInfo>::iterator it = GameAssist::g_vtGameWndInfo.begin(); it != GameAssist::g_vtGameWndInfo.end(); it++)
  502. {
  503. if (it->strGameRoleName.size() == 0)
  504. continue;
  505. if (it->pAction == NULL)
  506. it->pAction = new GameAssist::CAction(it->hWnd);
  507. nIndx = m_cbGameRole.AddString(it->strGameRoleName.c_str());
  508. m_cbGameRole.SetItemDataPtr(nIndx, &*it);
  509. }
  510. m_cbGameRole.SetCurSel(0);
  511. }
  512. void CGameAssistDlg::OnBnClickedButton12() // 野练技能;
  513. {
  514. std::map<std::string, int> SkillMap = {
  515. {"F1",VK_F1},
  516. {"F2",VK_F2},
  517. {"F3",VK_F3},
  518. {"F4",VK_F4},
  519. {"F5",VK_F5},
  520. {"F6",VK_F6},
  521. {"F7",VK_F7},
  522. {"F8",VK_F8},
  523. };
  524. BOOL bCheckAttack = ((CButton*)GetDlgItem(IDC_CHECK_ATTACK))->GetCheck();
  525. CString strSkill;
  526. int nCurSel = m_cb_skill_list.GetCurSel();
  527. if (nCurSel == CB_ERR)
  528. return;
  529. m_cb_skill_list.GetLBText(nCurSel, strSkill);
  530. GameAssist::GameWndInfo* pGameInfo = GetCurGameInfo();
  531. if (pGameInfo && pGameInfo->pAction)
  532. {
  533. GameAssist::CAction* pAction = (GameAssist::CAction*)pGameInfo->pAction;
  534. while (true)
  535. {
  536. BOOL bFirst = TRUE;
  537. while (pAction->IsFighting())
  538. {
  539. if (pAction->IsWattingAttack(-1))
  540. {
  541. if (bFirst)
  542. {
  543. SRAND(250, 350);
  544. pAction->SendKey(SkillMap[strSkill.GetBuffer()]);
  545. if (bCheckAttack)
  546. {
  547. Sleep(30);
  548. pAction->MouseClick({ 226, 158 });
  549. }
  550. bFirst = FALSE;
  551. }
  552. else
  553. {
  554. if (bCheckAttack)
  555. pAction->SendKey(VK_A, FALSE, TRUE);
  556. else
  557. pAction->SendKey(SkillMap[strSkill.GetBuffer()]);
  558. }
  559. }
  560. Sleep(650);
  561. }
  562. if (pAction->IsSPBelowSafeValue(TRUE, TRUE, 10))
  563. {
  564. DebugLog(_T("低SP安全值"));
  565. // 右键;
  566. pAction->MouseMove({ (GameAssist::g_rcRoleIdleSP.right + GameAssist::g_rcRoleIdleSP.left) / 2 - 3, (GameAssist::g_rcRoleIdleSP.bottom + GameAssist::g_rcRoleIdleSP.top) / 2 - 20 });
  567. pAction->MouseRClick({ (GameAssist::g_rcRoleIdleSP.right + GameAssist::g_rcRoleIdleSP.left) / 2 - 3, (GameAssist::g_rcRoleIdleSP.bottom + GameAssist::g_rcRoleIdleSP.top) / 2 - 20 });
  568. }
  569. Sleep(800);
  570. }
  571. }
  572. }
  573. void CGameAssistDlg::OnBnClickedButton13() // 地图找挑战NPC;
  574. {
  575. GameAssist::GameWndInfo* pGameInfo = GetCurGameInfo();
  576. if (pGameInfo && pGameInfo->pAction)
  577. {
  578. GameAssist::CAction* pAction = (GameAssist::CAction*)pGameInfo->pAction;
  579. int nCurSel = m_cbZYNPC.GetCurSel();
  580. if (nCurSel == CB_ERR)
  581. return;
  582. CString strNPC;
  583. m_cbZYNPC.GetLBText(nCurSel, strNPC);
  584. auto it = GameAssist::g_mapZYNPC.find(strNPC.GetString());
  585. if (it != GameAssist::g_mapZYNPC.end())
  586. {
  587. pAction->WorldMapPositioning({ it->second.x, it->second.y });
  588. }
  589. }
  590. }
  591. void CGameAssistDlg::OnBnClickedButton14()
  592. {
  593. }