示例#1
0
        /// <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);
            }
        }
示例#2
0
        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));
            }
        }
示例#3
0
        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);
                }
            }
        }
示例#4
0
 /// <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);
 }
示例#5
0
        /// <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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#8
0
        /// <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);
        }
示例#9
0
        /// <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);
        }
示例#10
0
        /// <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);
        }
示例#11
0
        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);
        }
示例#12
0
        /// <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);
        }
示例#13
0
        /// <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);
        }
示例#14
0
        /// <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);
        }
示例#15
0
文件: Role.cs 项目: daiwy1016/DnTool
        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);
        }
示例#16
0
        /// <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);
        }
示例#17
0
        /// <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);
            }
        }
示例#18
0
        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);
        }
示例#19
0
        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
            });
        }
示例#21
0
        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));
        }
示例#22
0
文件: AutoLevel.cs 项目: ko9ma7/Gcld
        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));
            }
        }
示例#23
0
文件: AutoLevel.cs 项目: ko9ma7/Gcld
        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);
        }
示例#24
0
文件: TaskEngine.cs 项目: ko9ma7/Gcld
        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
            });
        }