|
@@ -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;
|
|
|
+ }
|
|
|
};
|