/// <summary> /// 查找指定区域是否存在图片,存在则点击图片,直到图片消失 /// </summary> /// <param name="_dm"></param> /// <param name="x1"></param> /// <param name="y1"></param> /// <param name="x2"></param> /// <param name="y2"></param> /// <param name="picname"></param> /// <param name="a"></param> /// <param name="b"></param> /// <param name="delay"></param> /// <returns></returns> public static bool FindPicAndClickClear(this DmPlugin _dm, int x1, int y1, int x2, int y2, string picname, int a = 0, int b = 0, int delay = 1000) { int intX, intY; while (true) { _dm.FindPic(x1, y1, x2, y2, picname, "101010", 0.9, 0, out intX, out intY); if (intX > 0 && intY > 0) { _dm.MoveToClick(intX + a, intY + b); _dm.Delay(delay); _dm.FindPic(x1, y1, x2, y2, picname, "101010", 0.9, 0, out intX, out intY); if (intX < 0 && intY < 0) { return(true); } } else { return(true); } _dm.Delay(50); } }
private void TaskStart() { TaskRunState = TaskRunState.Started; DmPlugin dm = Window.Dm; if (Window.Width != 1152 || Window.Height != 864) { throw new Exception("请将游戏分辨率设为1152*864!"); } bool flag = Delegater.WaitTrue(() => Window.BindFullBackground(), // dm.BindWindow(Window.Hwnd,DmBindDisplay.dx,DmBindMouse.windows,DmBindKeypad.normal,0)==1?true:false, () => dm.Delay(1000), 10); dm.Delay(500); if (!flag) { throw new Exception(string.Format("窗口“{0}”绑定失败.", Window.Title)); } else { Logger.Debug("窗口绑定成功!"); Window.IsBind = true; } TaskRunState = TaskRunState.Running; DoEventHandler(OnStateChanged, _taskEventArg); DoEventHandler(OnStarted, _taskEventArg); Logger.Debug("任务“{0}”启动成功.".FormatWith(_task.Name)); TaskResult result = null; try { result = _task.Run(); } catch (TaskRestartException ex) { Logger.Error("任务执行错误,正在重新启动:" + ex.Message); TaskStop(); TaskStart(); } catch (TaskInterruptException ex) { TaskStop(); Window.FlashWindow(); _workThread = null; SoftContext.MainWindow.ShowMessageAsync("任务中断", ex.Message); } if (result == null) { return; } if (result.ResultType == TaskResultType.Success) { SoftContext.MainWindow.ShowMessageAsync("任务完成", "任务“{0}”执行完毕:{1}".FormatWith(_task.Name, result.Message)); } if (result.ResultType == TaskResultType.Finished) { SoftContext.MainWindow.ShowMessageAsync("任务完成", "任务“{0}”执行结束,{1}".FormatWith(_task.Name, result.Message)); } }
public bool Teleport(Point point) { IRole role = SoftContext.Role; if (role == null) { return(false); } DmPlugin dm = role.Window.Dm; int hwnd = role.Window.Hwnd; if (point == null) { Debug.WriteLine("坐标不能为null"); return(false); } else { if (role.Window.IsAlive) { this.TeleportByHwnd(dm, hwnd, point); //大号瞬移 ObservableCollection <RoleInfo> roleList = new ViewModelLocator().SetXiaohao.GameRoleList; foreach (var roleInfo in roleList) { if (dm.GetWindowState(roleInfo.Hwnd, 0) != 1) //判断窗口是否存在 { continue; } if (roleInfo.IsTogether) { this.TeleportByHwnd(dm, roleInfo.Hwnd, point); } if (roleInfo.IsMove) //如果移动则写内存 { dm.WriteInt(roleInfo.Hwnd, "[1221740]+2320", 0, 131072); dm.Delay(200); dm.WriteInt(roleInfo.Hwnd, "[1221740]+2320", 0, 0); dm.Delay(100); } } return(true); } else { SoftContext.MainWindow.ShowMessageAsync("瞬移失败", "窗口不存在:" + hwnd); return(false); } } }
/// <summary> /// 滑动操作 /// </summary> /// <param name="_dm"></param> /// <param name="x1"></param> /// <param name="y1"></param> /// <param name="x2"></param> /// <param name="y2"></param> /// <param name="mousedelay">鼠标每步延时</param> /// <param name="mousestep">鼠标步长</param> public static void Swipe(this DmPlugin _dm, int x1, int y1, int x2, int y2, int mousedelay = 30, int mousestep = 10) { _dm.EnableRealMouse(1, mousedelay, mousestep); _dm.MoveTo(x1, y1); _dm.Delay(50); _dm.LeftDown(); _dm.Delay(50); _dm.MoveTo(x2, y2); _dm.Delay(50); _dm.LeftUp(); _dm.Delay(50); _dm.EnableRealMouse(0, mousedelay, mousestep); }
/// <summary> /// 防封,移动鼠标单击 /// </summary> /// <param name="dm"></param> /// <param name="x"></param> /// <param name="y"></param> /// <returns></returns> public static bool PMoveToClick(this DmPlugin dm, int x, int y) { int flag = dm.MoveTo(x, y); dm.Delay(dm.RanNumber(50, 200)); int a = dm.LeftDown(); dm.Delay(dm.RanNumber(50, 200)); int sjx = dm.RanNumber(1, 5); int sjy = dm.RanNumber(1, 5); int b = dm.MoveTo(x + sjx, y + sjy); int c = dm.LeftUp(); return(a == 1 && b == 1 && c == 1 && flag == 1 ? true : false); }
private TaskResult RunStep1(TaskContext context) { Role role = (Role)context.Role; DmPlugin dm = role.Window.Dm; role.GoToMap("世界"); role.CloseWindow(); dm.Delay(1000); if (Dm.IsExistPic(862, 454, 961, 537, @"\bmp\菜单打开.bmp")) { Delegater.WaitTrue(() => Dm.FindPicAndClick(862, 454, 961, 537, @"\bmp\菜单打开.bmp"), () => Dm.IsExistPic(862, 454, 961, 537, @"\bmp\菜单未打开.bmp"), () => Dm.Delay(1000), 2000); } role.OpenMap(); int intX, intY; while (true) { dm.FindStr(75, 246, 227, 296, "军资奖励", "44.34.64-10.10.25", 0.9, out intX, out intY); if (intX > 0 && intY > 0) { role.OutSubMessage("领取军资..."); dm.MoveToClick(156, 420); dm.Delay(50); if (dm.GetColorNum(157, 242, 227, 293, "f60000-101010", 0.9) > 5) { role.OutSubMessage("军资已经领取完成,正在冷却!"); break; } dm.Delay(300); } else { role.OutSubMessage("找不到军资奖励"); break; } } role.CloseMap(); return(TaskResult.Success); }
private TaskResult RunStep2(TaskContext context) { Role role = (Role)context.Role; DmPlugin dm = role.Window.Dm; if (dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp") && dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp") && dm.IsExistPic(818, 281, 953, 447, @"\bmp\世界.bmp")) { role.OutSubMessage("在建筑中..."); } else { role.GoToMap("主城"); //dm.MoveToClick(317, 460);//点击兵营 dm.MoveToClick(419, 245);//点击银币 //dm.MoveToClick(200, 200);//点击木材 dm.Delay(2000); } string a, b; dm.FindPicAndClick(852, 78, 952, 148, @"\bmp\自动升级.bmp"); dm.Delay(1000); Delegater.WaitTrue(() => { a = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (!dm.FindPicAndClick(102, 48, 857, 468, @"\bmp\加速锤.bmp", 0, 0, 0.7)) { dm.DebugPrint("不存在加速锤!等待5s"); dm.MoveToClick(152, 429); dm.Delay(5000); } dm.Delay(500); b = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (a != b) { dm.FindPicAndClick(852, 78, 952, 148, @"\bmp\自动升级.bmp"); } return(false); }); return(TaskResult.Finished); }
/// <summary> /// 多点找色并点击 /// </summary> /// <param name="_dm"></param> /// <param name="x1"></param> /// <param name="y1"></param> /// <param name="x2"></param> /// <param name="y2"></param> /// <param name="firstColor"></param> /// <param name="offsetColor"></param> /// <param name="a"></param> /// <param name="b"></param> /// <param name="sim"></param> /// <returns></returns> public static bool FindMultiColorAndClick(this DmPlugin _dm, int x1, int y1, int x2, int y2, string firstColor, string offsetColor, int a = 0, int b = 0, double sim = 0.8) { int intX, intY; _dm.FindMultiColor(x1, y1, x2, y2, firstColor, offsetColor, sim, 0, out intX, out intY); if (intX > 0 && intY > 0) { _dm.MoveToClick(intX + a, intY + b); _dm.Delay(50); return(true); } return(false); }
/// <summary> /// 查找色块并点击 /// </summary> /// <param name="_dm"></param> /// <param name="x1"></param> /// <param name="y1"></param> /// <param name="x2"></param> /// <param name="y2"></param> /// <param name="color"></param> /// <param name="count"></param> /// <param name="width"></param> /// <param name="height"></param> /// <param name="sim"></param> /// <returns></returns> public static bool FindColorBlockAndClick(this DmPlugin _dm, int x1, int y1, int x2, int y2, string color, int count, int width, int height, double sim = 0.9) { int intX, intY; bool result = _dm.FindColorBlock(x1, y1, x2, y2, color, sim, count, width, height, out intX, out intY); if (intX > 0 && intY > 0) { _dm.MoveToClick(intX, intY); _dm.DebugPrint(intX + " " + intY); _dm.Delay(50); } return(result); }
/// <summary> /// 找色并点击 /// </summary> /// <param name="_dm"></param> /// <param name="x1"></param> /// <param name="y1"></param> /// <param name="x2"></param> /// <param name="y2"></param> /// <param name="color"></param> /// <returns></returns> public static bool FindColorAndClick(this DmPlugin _dm, int x1, int y1, int x2, int y2, string color) { int intX, intY; _dm.FindColor(x1, y1, x2, y2, color, 0.9, 0, out intX, out intY); if (intX > 0 && intY > 0) { _dm.MoveToClick(intX, intY); _dm.Delay(50); return(true); } return(false); }
private TaskResult RunStep1(TaskContext context) { IRole role = context.Role; DmPlugin dm = role.Window.Dm; int hwnd = role.Window.Hwnd; Delegater.WaitTrue(() => { return(false); }, () => { bool ret = role.FindControlTextAndClick(569, 685, "重新开启", true); if (ret == true) { Delegater.WaitTrue(() => { return(role.FindControlTextAndClick(566, 496, "确认", true) || role.FindControlTextAndClick(572, 649, "确认", true)); }, () => dm.Delay(500)); } dm.Delay(1000); }); return(TaskResult.Finished); }
/// <summary> /// 查找指定区域是否存在图片,存在则点击图片,可设置偏移 /// </summary> /// <param name="_dm"></param> /// <param name="x1"></param> /// <param name="y1"></param> /// <param name="x2"></param> /// <param name="y2"></param> /// <param name="picname"></param> /// <param name="a"></param> /// <param name="b"></param> /// <param name="sim"></param> /// <returns></returns> public static bool FindPicAndClick(this DmPlugin _dm, int x1, int y1, int x2, int y2, string picname, int a = 0, int b = 0, double sim = 0.8) { int intX, intY; _dm.FindPic(x1, y1, x2, y2, picname, "202020", sim, 0, out intX, out intY); if (intX > 0 && intY > 0) { _dm.DebugPrint("找图[" + picname + "]成功!" + "坐标:" + intX + " " + intY); _dm.MoveToClick(intX + a, intY + b); _dm.Delay(50); return(true); } _dm.DebugPrint("找图[" + picname + "]失败!"); return(false); }
/// <summary> /// 查找指定区域是否存在字,存在则点击字,可设置偏移 /// </summary> /// <param name="_dm"></param> /// <param name="x1"></param> /// <param name="y1"></param> /// <param name="x2"></param> /// <param name="y2"></param> /// <param name="str"></param> /// <param name="color"></param> /// <param name="a"></param> /// <param name="b"></param> /// <returns></returns> public static bool FindStrAndClick(this DmPlugin _dm, int x1, int y1, int x2, int y2, string str, string color, int a = 0, int b = 0) { int intX, intY; _dm.FindStr(x1, y1, x2, y2, str, color, 0.8, out intX, out intY); if (intX > 0 && intY > 0) { //Debug.WriteLine("找字[" + str + "]成功!"); _dm.MoveToClick(intX + a, intY + b); _dm.Delay(50); return(true); } Debug.WriteLine("[" + Thread.CurrentThread.ManagedThreadId.ToString() + "]" + "找字[" + str + "]失败!"); return(false); }
/// <summary> /// /// </summary> /// <param name="dm"></param> /// <param name="x1"></param> /// <param name="y1"></param> /// <param name="x2"></param> /// <param name="y2"></param> /// <param name="color"></param> /// <param name="word"></param> /// <param name="mis"></param> /// <returns>0为改变 1改变 -1识别为空</returns> public static int InfoIsChanged(this DmPlugin dm, int x1, int y1, int x2, int y2, string color, string word, int mis) { string dm_ret = dm.FetchWord(x1, y1, x2, y2, color, word); dm.Delay(mis); string dm_ret2 = dm.FetchWord(x1, y1, x2, y2, color, word); if (dm_ret.Equals("") || dm_ret2.Equals("")) { return(-1); } if (!dm_ret.Equals(dm_ret2)) { return(1); } return(0); }
public bool aaa(IRole role) { bool wusun = false; DmPlugin dm = role.Window.Dm; bool flag = Delegater.WaitTrue(() => role.IsAlive, () => { dm.MoveToClick(wusun ? 400 : 280, 270); dm.Delay(2000); }, 5); if (flag) { // OverweightDialogClose(role); } return(flag); }
/// <summary> /// 鼠标位置是否有指定控件文本 /// </summary> /// <param name="role"></param> /// <param name="x"></param> /// <param name="y"></param> /// <param name="text"></param> /// <param name="isClick"></param> /// <returns></returns> public static bool FindControlTextAndClick(this IRole role, int x, int y, string text, bool isClick = false) { DmPlugin dm = role.Window.Dm; int hwnd = role.Window.Hwnd; dm.MoveTo(x, y); dm.Delay(200); string content = dm.ReadString(hwnd, "[16cbc90]+30", 1, 10); // Debug.WriteLine(content); if (content.Contains(text)) { if (isClick) { dm.LeftClick(); } return(true); } return(false); }
/// <summary> /// 清理指定页背包 /// </summary> /// <param name="role"></param> /// <param name="page">背包页(1-5)</param> /// <param name="begin">开始格数(1-30)</param> /// <param name="stop">结束格数(1-30)</param> public static void BagCleanup(this IRole role, int page, int begin, int stop) { DmPlugin dm = role.Window.Dm; int hwnd = role.Window.Hwnd; dm.MoveToClick(796 + 65 * (page - 1), 217); //点击背包页 dm.Delay(100); dm.MoveToClick(796 + 65 * (page - 1), 217); //点击背包页 dm.Delay(300); //5-28格 for (int i = begin; i <= stop; i++) { dm.MoveTo(800 + 65 * ((i - 1) % 5), 274 + 65 * ((i - 1) / 5)); dm.Delay(200); int num = dm.ReadInt(hwnd, "[16cbc90]+314", 0); Debug.WriteLine("格子数量为:" + num); if (num == 0) { continue; } Debug.WriteLine(800 + 65 * ((i - 1) % 5) + " " + (274 + 65 * ((i - 1) / 5))); Delegater.WaitTrue(() => { dm.MoveTo(573, 493); dm.Delay(100); string content = dm.ReadString(hwnd, "[16cbc90]+30", 1, 10); // Debug.WriteLine(content); if (content.Contains("是")) { return(true); } else { return(false); } }, () => { dm.MoveToClick(800 + 65 * ((i - 1) % 5), 274 + 65 * ((i - 1) / 5)); //点击格子 dm.MoveToClick(748, 687); //点击丢弃 dm.Delay(300); }); dm.MoveToClick(574, 496); //点击确认 dm.Delay(500); } }
private bool FeiliuLogin(Account account, Role role) { DmPlugin Dm = role.Window.Dm; YeShenSimulator ysSimulator = SoftContext.YeShenSimulatorList.FirstOrDefault(x => x.NoxHwnd == role.Hwnd); string noxPath = ""; if (File.Exists(@"E:\nox\Nox\bin\nox_adb.exe")) { noxPath = @"E:\nox\Nox\bin\"; } if (File.Exists(@"E:\Nox\bin\nox_adb.exe")) { noxPath = @"E:\Nox\bin\"; } string result = CmdHelper.ExecuteCmd(noxPath + @"nox_adb -s " + ysSimulator.AdbDevicesId + @" shell dumpsys window w|findstr \/|findstr name="); result = result.Replace("mSurface=Surface(name=", "").Replace(")", ""); //com.regin.gcld.fl/com.regin.gcld.fl.gcld if (result.IndexOf("gcld") > 0) //当前应用程序是攻城掠地 { int index = result.IndexOf('/'); CmdHelper.ExecuteCmd(noxPath + @"nox_adb -s " + ysSimulator.AdbDevicesId + " shell am force-stop " + result.Remove(index, result.Length - index)); Dm.Delay(5000); } switch (account.Platform) { case Platform.飞流: CmdHelper.ExecuteCmd(noxPath + @"nox_adb -s " + ysSimulator.AdbDevicesId + " shell am start -n com.regin.gcld.fl/.gcld"); Delegater.WaitTrue(() => Dm.IsExistPic(279, 37, 476, 100, @"\bmp\飞流帐号登录.bmp", 0.9), () => Dm.Delay(1000), 20); Dm.Delay(1000); if (Dm.IsExistPic(279, 37, 476, 100, @"\bmp\飞流帐号登录.bmp", 0.9)) { Dm.Delay(1000); Dm.MoveToClick(562, 156); Dm.Delay(500); for (int i = 0; i < 20; i++) { if (Dm.GetColorNum(292, 121, 414, 176, "ffffff-101010", 0.9) > 5) { CmdHelper.ExecuteCmd(string.Format("{0}nox_adb -s {1} shell input keyevent 67", noxPath, ysSimulator.AdbDevicesId)); Dm.Delay(200); } else { break; } } CmdHelper.ExecuteCmd(noxPath + @"nox_adb -s " + ysSimulator.AdbDevicesId + " shell input text \"" + account.UserName + "\""); Dm.Delay(1000); Dm.MoveToClick(577, 218); Dm.Delay(500); for (int i = 0; i < 20; i++) { if (Dm.GetColorNum(290, 192, 444, 245, "ffffff-101010", 0.9) > 5) { CmdHelper.ExecuteCmd(noxPath + @"nox_adb -s " + ysSimulator.AdbDevicesId + " shell input keyevent 67"); Dm.Delay(200); } else { break; } } CmdHelper.ExecuteCmd(noxPath + "nox_adb -s " + ysSimulator.AdbDevicesId + " shell input text \"" + account.Password + "\""); Dm.Delay(1000); Dm.FindPicAndClick(413, 279, 543, 348, @"\bmp\登录.bmp"); return(Delegater.WaitTrue(() => { if (Dm.IsExistPic(818, 281, 953, 447, @"\bmp\世界.bmp") || Dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp")) { while (Dm.IsExistPic(406, 378, 557, 432, @"\bmp\以后再说.bmp", 0.8)) { Dm.MoveToClick(544, 414); Dm.Delay(1000); } Dm.Delay(1000); return true; } return false; }, () => Dm.Delay(1000), 25)); } break; case Platform.楚游: CmdHelper.ExecuteCmd(noxPath + @"nox_adb -s " + ysSimulator.AdbDevicesId + " shell am start -n com.regin.gcld.sy/.gcld"); Delegater.WaitTrue(() => Dm.GetColorNum(113, 288, 193, 317, "f6c246-202020", 0.9) > 1000, () => Dm.Delay(1000), 20); Dm.Delay(1000); if (Dm.GetColorNum(113, 288, 193, 317, "f6c246-202020", 0.9) > 1000) { Dm.Delay(1000); Dm.MoveToClick(233, 203); Dm.Delay(500); for (int i = 0; i < 20; i++) { if (Dm.GetColorNum(67, 187, 210, 216, "242424-202030", 0.9) > 5) { CmdHelper.ExecuteCmd(string.Format("{0}nox_adb -s {1} shell input keyevent 67", noxPath, ysSimulator.AdbDevicesId)); Dm.Delay(200); } else { break; } } CmdHelper.ExecuteCmd(noxPath + @"nox_adb -s " + ysSimulator.AdbDevicesId + " shell input text \"" + account.UserName + "\""); Dm.Delay(1000); Dm.MoveToClick(235, 246); Dm.Delay(500); for (int i = 0; i < 20; i++) { if (Dm.GetColorNum(70, 230, 209, 263, "242424-202030", 0.9) > 5) { CmdHelper.ExecuteCmd(string.Format("{0}nox_adb -s {1} shell input keyevent 67", noxPath, ysSimulator.AdbDevicesId)); Dm.Delay(200); } else { break; } } CmdHelper.ExecuteCmd(noxPath + "nox_adb -s " + ysSimulator.AdbDevicesId + " shell input text \"" + account.Password + "\""); Dm.Delay(500); Dm.MoveToClick(149, 302); return(Delegater.WaitTrue(() => { if (Dm.IsExistPic(818, 281, 953, 447, @"\bmp\世界.bmp") || Dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp")) { //while (Dm.IsExistPic(406, 378, 557, 432, @"\bmp\以后再说.bmp", 0.8)) //{ // Dm.MoveToClick(544, 414); // Dm.Delay(1000); //} //Dm.Delay(1000); return true; } return false; }, () => Dm.Delay(1000), 25)); } break; } return(false); }
public bool OpenTeshushijian() { OutSubMessage("打开特殊事件..."); int intX, intY; //_dm.FindMultiColor(258, 34, 854, 218, "d69f5a", "-8|5|3a3327,5|13|d5c484,21|14|cfbf80,29|6|2f2a1e,-10|1|352d20,-5|-2|c89b60,2|22|1f0201", 0.9, 0, out intX, out intY); _dm.FindMultiColor(258, 34, 854, 218, "ce9f61", "3|-1|e5be72,7|-15|30281c,-9|2|2f291d,-3|7|362f22,-1|-10|fce4a1,32|7|302a1e,7|17|e3d188,3|13|ecde96", 0.8, 0, out intX, out intY); //if (_dm.FindPicAndClick(258, 34, 854, 218,@"\bmp\特殊事件.bmp",37,15,0.7)) if (intX > 0 && intY > 0) { _dm.MoveToClick(intX, intY); _dm.Delay(1000); OutSubMessage("打开成功!"); return(true); } OutSubMessage("打开失败!"); return(false); }
private Thread GetWorkThread(IEnumerable <TaskBase> tasks) { return(new Thread(() => { foreach (TaskBase task in tasks) { _task = task; _taskEventArg = new TaskEventArg { Context = _task.TaskContext }; try { //窗口绑定 DmPlugin dm = Window.Dm; bool flag; flag = Delegater.WaitTrue(() => Window.BindHalfBackground(), () => dm.Delay(1000), 10); //flag = Delegater.WaitTrue(() => Window.BindNormal(), () => dm.Delay(1000), 10); if (!flag) { throw new Exception("角色绑定失败,请添加杀软信任,右键以管理员身份运行,Win7系统请确保电脑账户为“Administrator”"); } TaskRunState = TaskRunState.Running; OnStateChanged(_taskEventArg); OnStarted(_taskEventArg); OutMessage("任务“{0}”启动成功。".FormatWith(_task.Name)); TaskStart(); TaskStop(); Window.FlashWindow(); } catch (ThreadAbortException) { TaskStop(true); WaitForUnBind(); break; } catch (Exception ex) { TaskStop(); Window.FlashWindow(); Logger.Error("任务执行失败,{0}", ex.FormatMessage()); OutMessage("任务执行失败,{0}".FormatWith(ex.Message)); } Window.Dm.Delay(1000); TaskList.Remove(task); } WaitForUnBind(); _workThread = null; }) { IsBackground = true }); }
private TaskResult RunStep1(TaskContext context) { IRole role = context.Role; Role r = (Role)role; DmPlugin dm = role.Window.Dm; int hwnd = role.Window.Hwnd; // if(!role.HasButton("搜索")) //商城界面是否打开 // throw new TaskInterruptException("请先打开商城界面."); if (_useLB) { if (!_thing.CanUseLB) { throw new TaskInterruptException("“{0}”无法使用龙币购买.".FormatWith(_thing.Name)); } if (r.MallLB < _thing.Value) { throw new TaskInterruptException("龙币不足,无法购买物品“{0}”.".FormatWith(_thing.Name)); } } else { if (r.MallVolume < _thing.Value) { throw new TaskInterruptException("点卷不足,无法购买物品“{0}”.".FormatWith(_thing.Name)); } } bool ret = Delegater.WaitTrue(() => { dm.MoveToClick(567, 43); dm.SendString(hwnd, _thing.Name); dm.MoveToClick(766, 43); return(true); // return role.HasButton("购买") ? true : false; }, () => dm.Delay(1000), 10); if (ret == false) { return(new TaskResult(TaskResultType.Failure, "无法找到该商品“{0}”.".FormatWith(_thing.Name))); } role.FindButtonAndClick("购买"); dm.Delay(500); // if (role.HasDialogBoard("结算")) // { if (_useLB) { dm.MoveToClick(937, 572); } dm.Delay(500); // Delegater.WaitTrue(() => role.HasDialogButton("是"),()=>dm.MoveToClick(608,718)); // Delegater.WaitTrue(() => !role.HasDialogButton("是"),()=>dm.MoveToClick(508,537)); dm.MoveToClick(608, 718); dm.Delay(500); dm.MoveToClick(508, 537); Delegater.WaitTrue(() => dm.FindStr(629, 459, 850, 560, "确认", "BEBEBE-414141", 0.9), () => dm.Delay(100)); // Delegater.WaitTrue(() => !role.HasDialogButton("确认"), () => dm.MoveToClick(719,506)); dm.MoveToClick(719, 506); // } _num--; return(_num <= 0? TaskResult.Finished : RunStep1(context)); }
private bool GoToFighting(string area, bool isSkip = false) { Role role = (Role)Role; DmPlugin dm = role.Window.Dm; role.GoToMap30("副本"); // role.GoToFubenArea(area); if (area == "下邳") { dm.Swipe(670, 427, 93, 425); dm.Delay(1000); } Delegater.WaitTrue(() => { dm.MoveToClick(21, 182); if (dm.IsExistPic(116, 72, 936, 351, @"\bmp\战斗.bmp")) { return(true); } dm.FindPicAndClick(395, 311, 574, 393, @"\bmp\上阵.bmp"); return(false); }, () => dm.Delay(500), 10); if (Delegater.WaitTrue(() => { dm.FindPicAndClick(395, 311, 574, 393, @"\bmp\上阵.bmp"); dm.FindPicAndClick(116, 72, 936, 351, @"\bmp\战斗.bmp"); if (dm.IsExistPic(394, 216, 567, 307, @"\bmp\VS.bmp")) { //补充兵力 dm.MoveToClick(612, 122); dm.Delay(1000); dm.MoveToClick(749, 128); dm.Delay(1000); dm.MoveToClick(807, 259); //点击战斗 } if (!dm.IsExistPic(394, 216, 567, 307, @"\bmp\VS.bmp") && dm.IsExistPic(762, 4, 953, 87, @"\bmp\返回.bmp") && isSkip) { dm.MoveToClick(840, 43); //点击跳过 dm.Delay(3000); } if (dm.IsExistPic(330, 45, 639, 184, @"\bmp\胜利.bmp")) { dm.MoveToClick(916, 45); //点击返回 dm.Delay(1000); return(true); } if (dm.IsExistPic(318, 36, 637, 195, @"\bmp\失败.bmp")) { dm.MoveToClick(916, 45); //点击返回 dm.Delay(1000); return(true); } return(false); }, () => dm.Delay(1000), 10)) { return(true); } else { return(GoToFighting(area, true)); } }
private TaskResult RunStep1(TaskContext context) { Role role = (Role)context.Role; DmPlugin dm = role.Window.Dm; //int level = role.Level; while (true) { string taskName = dm.Ocr(0, 122, 114, 179, "60.19.85-5.5.40", 0.8); dm.DebugPrint("主线任务识别:" + taskName); for (int i = 0; i < 10; i++) { dm.MoveToClick(21, 182); dm.Delay(200); } switch (taskName) { case "欢迎": ClickXiaoQian(); break; case "民居1": dm.MoveToClick(481, 114); dm.FindPicAndClick(389, 58, 687, 224, @"\bmp\升级.bmp"); dm.Delay(1000); dm.FindPicAndClick(389, 58, 687, 224, @"\bmp\加速锤.bmp"); dm.Delay(1000); break; case "民居2": dm.MoveToClick(908, 119); break; case "大名": ClickXiaoQian(); if (dm.IsExistPic(379, 13, 567, 62, @"\bmp\创建.bmp")) { Debug.WriteLine("请输入角色名!"); } break; case "虎牢关": dm.FindPicAndClick(395, 311, 574, 393, @"\bmp\上阵.bmp"); role.CloseMenu(); if (dm.IsExistPic(130, 333, 279, 462, @"\bmp\EXP.bmp")) { dm.MoveToClick(192, 399); dm.Delay(1000); if (dm.IsExistPic(151, 480, 247, 535, @"\bmp\EXP2.bmp")) { while (dm.FindPicAndClick(204, 435, 759, 492, @"\bmp\5.bmp", 0, 0, 0.9)) { dm.Delay(1000); } while (dm.FindPicAndClick(204, 435, 759, 492, @"\bmp\5.bmp", 0, 0, 0.9)) { dm.Delay(1000); } } break; } GoToFighting("虎牢关", true); break; case "穿装备": role.OpenMenu("武将"); dm.MoveToClick(234, 468); dm.Delay(1000); dm.MoveToClick(719, 464); dm.Delay(200); dm.MoveToClick(234, 468); dm.Delay(1000); dm.MoveToClick(719, 464); dm.Delay(200); dm.MoveToClick(234, 468); dm.Delay(1000); dm.MoveToClick(719, 464); dm.Delay(200); break; case "买装备": role.OpenMenu("装备"); dm.MoveToClick(164, 370); dm.Delay(800); dm.MoveToClick(292, 368); dm.Delay(800); dm.MoveToClick(418, 367); dm.Delay(800); dm.MoveToClick(542, 370); dm.Delay(800); dm.MoveToClick(673, 368); dm.Delay(800); dm.MoveToClick(797, 372); dm.Delay(800); break; case "祭祀": role.OpenMenu("资源"); if (dm.IsExistPic(0, 61, 106, 160, @"\bmp\祭祀银币.bmp")) { dm.MoveToClick(156, 455); } if (dm.IsExistPic(0, 61, 106, 160, @"\bmp\祭祀木材.bmp")) { dm.MoveToClick(328, 455); } break; case "产量600": role.GoToMap30("主城"); dm.MoveToClick(419, 245); //点击银币 //dm.MoveToClick(200, 200);//点击木材 dm.Delay(2000); string a, b; dm.MoveToClick(912, 114); //点击自动升级 dm.Delay(1000); Delegater.WaitTrue(() => { a = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (!dm.FindPicAndClick(102, 48, 857, 468, @"\bmp\加速锤.bmp", 0, 0, 0.7)) { dm.DebugPrint("不存在加速锤!等待5s"); dm.MoveToClick(152, 429); dm.Delay(5000); } dm.Delay(500); b = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (a != b) { dm.FindPicAndClick(852, 78, 952, 148, @"\bmp\自动升级.bmp"); } return(false); }, () => dm.Delay(1000), 20); break; case "刷装备": dm.FindPicAndClick(395, 311, 574, 393, @"\bmp\上阵.bmp"); role.OpenMenu("装备"); dm.MoveToClick(784, 480); dm.Delay(800); break; case "卖装备": role.OpenMenu("装备"); dm.MoveToClick(272, 28); dm.Delay(800); dm.MoveToClick(770, 479); break; case "下邳": role.CloseMenu(); GoToFighting("下邳", true); break; case "木场": role.GoToMap30("主城"); Delegater.WaitTrue(() => dm.MoveToClick(200, 200), () => dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp") && dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp"), () => dm.Delay(1000)); dm.Delay(2000); dm.MoveToClick(912, 114); //点击自动升级 dm.Delay(1000); Delegater.WaitTrue(() => { a = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (!dm.FindPicAndClick(102, 48, 857, 468, @"\bmp\加速锤.bmp", 0, 0, 0.7)) { dm.DebugPrint("不存在加速锤!等待5s"); dm.MoveToClick(152, 429); dm.Delay(5000); } dm.Delay(500); b = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (a != b) { dm.FindPicAndClick(852, 78, 952, 148, @"\bmp\自动升级.bmp"); } return(false); }, () => dm.Delay(1000), 10); break; case "解雇": role.OpenMenu("武将"); dm.MoveToClick(274, 32); //点击酒馆 dm.Delay(800); if (dm.IsExistPic(116, 215, 658, 275, @"\bmp\周仓.bmp") && !dm.IsExistPic(116, 215, 658, 275, @"\bmp\张梁.bmp")) { dm.MoveToClick(204, 144); //点击第一个武将 dm.Delay(800); dm.MoveToClick(410, 361); //点击确定 dm.Delay(800); } role.CloseWindow(); break; case "招募": role.OpenMenu("武将"); dm.MoveToClick(274, 32); //点击酒馆 dm.Delay(800); if (dm.IsExistPic(116, 215, 658, 275, @"\bmp\周仓.bmp", 0.7) && dm.IsExistPic(116, 215, 658, 275, @"\bmp\张梁.bmp", 0.7)) { dm.FindPicAndClick(116, 215, 658, 275, @"\bmp\周仓.bmp", 31, 172, 0.7); } if (dm.IsExistPic(116, 215, 658, 275, @"\bmp\张辽.bmp", 0.7) && dm.IsExistPic(116, 215, 658, 275, @"\bmp\张梁.bmp", 0.7)) { if (dm.IsExistPic(116, 215, 658, 275, @"\bmp\华雄.bmp", 0.7) || dm.IsExistPic(116, 215, 658, 275, @"\bmp\周仓.bmp", 0.7)) { dm.FindPicAndClick(116, 215, 658, 275, @"\bmp\张辽.bmp", 31, 172, 0.7); break; } role.CloseWindow(); role.OpenMenu("资源"); for (int i = 0; i < 20; i++) { dm.MoveToClick(156, 455); dm.Delay(200); } role.CloseWindow(); role.OpenMenu("武将"); dm.MoveToClick(274, 32); //点击酒馆 dm.Delay(800); if (dm.FindPicAndClick(116, 215, 658, 275, @"\bmp\张辽.bmp", 31, 172, 0.7)) { dm.Delay(2000); if (dm.IsExistPic(116, 215, 658, 275, @"\bmp\张辽.bmp", 0.7)) { dm.MoveToClick(204, 144); //点击第一个武将 dm.Delay(800); dm.MoveToClick(410, 361); //点击确定 dm.Delay(2000); } } dm.FindPicAndClick(116, 215, 658, 275, @"\bmp\张辽.bmp", 31, 172, 0.7); } break; case "科技": role.OpenMenu("科技"); Delegater.WaitTrue(() => { dm.FindPicAndClick(656, 208, 790, 269, @"\bmp\注资.bmp"); dm.Delay(2000); if (dm.IsExistPic(774, 406, 956, 505, @"\bmp\木材不足.bmp")) { dm.MoveToClick(855, 478); dm.Delay(2000); for (int i = 0; i < 5; i++) { dm.MoveToClick(334, 458); dm.Delay(500); } role.CloseWindow(); role.OpenMenu("科技"); } if (dm.FindPicAndClick(656, 208, 790, 269, @"\bmp\研究.bmp", 0, 0, 0.7)) { dm.Delay(1000); return(true); } return(false); }, () => dm.Delay(1000), 10); break; case "农田": role.GoToMap30("主城"); Delegater.WaitTrue(() => dm.MoveToClick(165, 348), () => dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp") && dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp"), () => dm.Delay(1000)); dm.Delay(2000); dm.MoveToClick(912, 114); //点击自动升级 dm.Delay(1000); Delegater.WaitTrue(() => { a = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (!dm.FindPicAndClick(102, 48, 857, 468, @"\bmp\加速锤.bmp", 0, 0, 0.7)) { dm.DebugPrint("不存在加速锤!等待5s"); dm.MoveToClick(152, 429); dm.Delay(2000); } dm.Delay(500); b = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (a != b) { dm.FindPicAndClick(852, 78, 952, 148, @"\bmp\自动升级.bmp"); } return(false); }, () => dm.Delay(1000), 10); break; case "皇城": role.GoToMap30("主城"); dm.Delay(2000); Delegater.WaitTrue(() => dm.MoveToClick(667, 180), () => dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp"), () => dm.Delay(1000)); Delegater.WaitTrue(() => dm.MoveToClick(337, 446), () => dm.IsExistPic(266, 356, 619, 486, @"\bmp\占领.bmp"), () => dm.Delay(1000)); dm.FindPicAndClick(266, 356, 619, 486, @"\bmp\占领.bmp"); dm.Delay(2000); dm.MoveToClick(612, 122); dm.Delay(1000); dm.MoveToClick(749, 128); dm.Delay(1000); dm.MoveToClick(807, 259); //点击战斗 Delegater.WaitTrue(() => { if (dm.IsExistPic(330, 45, 639, 184, @"\bmp\胜利.bmp")) { dm.MoveToClick(916, 45); //点击返回 dm.Delay(1000); return(true); } return(false); }, () => dm.Delay(1000)); break; case "俸禄": role.OpenMenu("排行"); dm.Delay(1000); dm.MoveToClick(630, 469); //点击俸禄 dm.Delay(1000); break; case "兵营": role.GoToMap30("主城"); Delegater.WaitTrue(() => dm.MoveToClick(334, 443), () => dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp") && dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp"), () => dm.Delay(1000)); break; case "募兵700": Delegater.WaitTrue(() => { role.GoToMap30("主城"); return(dm.MoveToClick(334, 443)); }, () => dm.IsExistPic(818, 281, 953, 447, @"\bmp\副本.bmp") && dm.IsExistPic(818, 281, 953, 447, @"\bmp\主城.bmp"), () => dm.Delay(1000)); dm.Delay(2000); dm.MoveToClick(912, 114); //点击自动升级 dm.Delay(1000); Delegater.WaitTrue(() => { a = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (!dm.FindPicAndClick(102, 48, 857, 468, @"\bmp\加速锤.bmp", 0, 0, 0.7)) { dm.DebugPrint("不存在加速锤!等待2s"); dm.MoveToClick(152, 429); dm.Delay(2000); } dm.Delay(500); b = dm.FetchWord(903, 103, 954, 145, "eaeaea-202020", "建筑队列数"); if (a != b) { dm.FindPicAndClick(852, 78, 952, 148, @"\bmp\自动升级.bmp"); } return(false); }, () => dm.Delay(1000), 15); break; case "世界": role.GoToMap("世界"); break; case "迷雾": //role.GoToMap("世界"); return(TaskResult.Finished); break; default: ClickXiaoQian(); break; } dm.Delay(2000); } return(TaskResult.Finished); }
private Thread GetWorkThread(IEnumerable <TaskBase> tasks) { return(new Thread(() => { //窗口绑定 DmPlugin dm = Window.Dm; bool flag; flag = Delegater.WaitTrue(() => Window.BindHalfBackgroundMoniqi(), () => dm.Delay(1000), 10); if (!flag) { throw new Exception("角色绑定失败,请添加杀软信任,右键以管理员身份运行,Win7系统请确保电脑账户为“Administrator”"); } // dm.DownCpu(20); while (true) { Cycle = 0; if (AutoLogin != null) { bool isLogin = AutoLogin(); if (isLogin == false) { Logger.Error("任务执行失败,{0}", "登录失败!"); OutMessage("任务执行失败,{0}".FormatWith("登录失败!")); break; } } while (true) { Cycle++; foreach (TaskBase task in tasks) { _task = task; _taskEventArg = new TaskEventArg { Context = _task.TaskContext }; try { TaskRunState = TaskRunState.Running; OnStateChanged(_taskEventArg); OnStarted(_taskEventArg); OutMessage("任务“{0}”启动成功。".FormatWith(_task.Name)); TaskStart(); TaskStop(true); Window.FlashWindow(); } catch (ThreadAbortException) { TaskStop(true); WaitForUnBind(); break; } catch (Exception ex) { Debug.WriteLine(ex.Message); TaskStop(); Window.FlashWindow(); Logger.Error("任务执行失败,{0}", ex.FormatMessage()); OutMessage("任务执行失败,{0}".FormatWith(ex.Message)); } Window.Dm.Delay(1000); TaskList.Remove(task); } //切换角色 if (ChangeRole != null) { bool isChange = ChangeRole(); if (isChange == false) { Logger.Error("切换角色失败!"); OutMessage("切换角色失败!"); if (AutoLogin != null) { break; } } } else { WaitForUnBind(); _workThread = null; return; } Thread.Sleep(5000); } Thread.Sleep(5000); } WaitForUnBind(); _workThread = null; }) { IsBackground = true }); }