/// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            // 首先跳转到擂台赛界面
            WlyViewMgr.GoTo(dmGuid, WlyViewType.日常_擂台赛);

            // 找一个位置
            var wait = FlowLogicHelper.RepeatRun(() =>
            {
                if (DMService.Instance.FindStr(dmGuid, new WxRect(329, 112, 953, 496), "擂", "feff99-000000", out var x, out var y))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                    return(true);
                }

                Thread.Sleep(1000);
                return(false);
            }, TimeSpan.FromSeconds(10));

            if (!wait)
            {
                throw new InvalidOperationException();
            }

            // 点击报名
            var signupPoint = new WxPoint(393, 551);

            DMService.Instance.LeftClick(dmGuid, signupPoint);

            return(new WlyTaskInfo(ID, true));
        }
Exemple #2
0
        /// <summary>
        /// 创建角色
        /// </summary>
        /// <param name="name"></param>
        private void CreateRole(string name)
        {
            // 等待进入创建角色界面
            var wait = FlowLogicHelper.RepeatRun(() => DMService.Instance.FindPic(DMGuid, WlyPicType.择国家, WlyUtilityBiz.GameWndRect),
                                                 TimeSpan.FromSeconds(30));

            if (!wait)
            {
                throw new InvalidOperationException("进入创建角色界面失败");
            }

            // 选择吴国
            var wu = new WxPoint(630, 400);

            DMService.Instance.LeftClick(DMGuid, wu);

            // 输入名称
            var namePoint = new WxPoint(517, 504);

            DMService.Instance.LeftDoubleClick(DMGuid, namePoint, 100);
            DMService.Instance.LeftDoubleClick(DMGuid, namePoint, 100);

            var guid = DMService.Instance.CreateDMSoft();

            DMService.Instance.BindWindowIME(guid, WndHwnd);
            DMService.Instance.SendStringIme(guid, name);
            Thread.Sleep(1000);
            DMService.Instance.ReleaseDMSoft(guid);

            // 确定
            var okPoint = new WxPoint(493, 556);

            DMService.Instance.LeftClick(DMGuid, okPoint);
            throw new InvalidOperationException("角色创建完毕需要重启");
        }
Exemple #3
0
        /// <summary>
        /// 加入指定名称的军团
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public static bool Join(string dmGuid, string name)
        {
            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_军团);

            while (true)
            {
                // 查找当页的海潮军团
                var result = DMService.Instance.FindStrEx(dmGuid, new WxRect(195, 293, 798, 448), "海潮军团", "ffffb3-000000");
                if (!string.IsNullOrEmpty(result))
                {
                    foreach (var group in result.Split('|'))
                    {
                        var pos   = group.Split(',');
                        var point = new WxPoint(int.Parse(pos[1]), int.Parse(pos[2]));
                        DMService.Instance.LeftClick(dmGuid, point, TimeSpan.FromSeconds(2));

                        // 确认点击到的军团名称是否符合
                        if (DMService.Instance.FindStr(dmGuid, new WxRect(384, 182, 452, 209), name, "e9e7cf-000000"))
                        {
                            return(JoinCore(dmGuid, name));
                        }
                    }
                }

                // 翻页
                var pageStr  = DMService.Instance.GetWords(dmGuid, new WxRect(482, 466, 512, 487), "ffffff-000000");
                var pageStrs = pageStr.Split('/');
                if (pageStrs[0] == pageStrs[1])
                {
                    throw new InvalidOperationException($"未找到军团{name}");
                }

                DMService.Instance.LeftClick(dmGuid, new WxPoint(533, 475));
            }
        }
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            // 进入城池争夺战界面
            WlyViewMgr.GoTo(dmGuid, WlyViewType.日常_城池争夺战);

            // 等待所有UI加载完成
            Thread.Sleep(2000);

            if (!DMService.Instance.FindStr(dmGuid, new WxRect(625, 558, 690, 590), "一键挂机", "cccccc-000000"))
            {
                // 点击一键
                var oneClickPoint = new WxPoint(659, 574);
                DMService.Instance.LeftClick(dmGuid, oneClickPoint);

                // 点击确定
                var okPoint = new WxPoint(451, 330);
                DMService.Instance.LeftClick(dmGuid, okPoint);

                // 点击领取
                var getPoint = new WxPoint(544, 440);
                DMService.Instance.LeftClick(dmGuid, getPoint);

                // 点击退出
                var exitPoint = new WxPoint(949, 571);
                DMService.Instance.LeftClick(dmGuid, exitPoint);
            }

            return(new WlyTaskInfo(ID, true));
        }
Exemple #5
0
 /// <summary>
 /// 重复点击
 /// </summary>
 /// <param name="dmGuid"></param>
 /// <param name="point"></param>
 /// <param name="times"></param>
 public void RepeatLeftClick(string dmGuid, WxPoint point, int times, int sleep)
 {
     for (int i = 0; i < times; i++)
     {
         LeftClick(dmGuid, point, TimeSpan.FromMilliseconds(sleep));
     }
 }
Exemple #6
0
 /// <summary>
 /// 重复点击
 /// </summary>
 /// <param name="dmGuid"></param>
 /// <param name="point"></param>
 /// <param name="times"></param>
 public void RepeatLeftClick(string dmGuid, WxPoint point, int times)
 {
     for (int i = 0; i < times; i++)
     {
         LeftClick(dmGuid, point);
     }
 }
Exemple #7
0
        /// <summary>
        /// 移动鼠标到指定位置
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="point"></param>
        /// <param name="sleep"></param>
        public void MoveTo(string dmGuid, WxPoint point, int sleep)
        {
            var dm = GetDM(dmGuid);

            dm.MoveTo(point.X, point.Y);
            Thread.Sleep(sleep);
        }
Exemple #8
0
 /// <summary>
 /// 构造函数
 /// </summary>
 public WxRect(WxPoint center, int width, int height)
 {
     Left   = center.X - (width / 2);
     Top    = center.Y - (height / 2);
     Right  = center.X + (width / 2);
     Bottom = center.Y + (height / 2);
 }
Exemple #9
0
        /// <summary>
        /// 鼠标左键按下
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="point"></param>
        public void LeftDown(string dmGuid, WxPoint point)
        {
            var dm = GetDM(dmGuid);

            dm.MoveTo(point.X, point.Y);
            dm.LeftDown();
            Thread.Sleep(500);
        }
Exemple #10
0
        /// <summary>
        /// 左键双击
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="point"></param>
        /// <param name="sleep"></param>
        public void LeftDoubleClick(string dmGuid, WxPoint point, TimeSpan sleep)
        {
            var dm = GetDM(dmGuid);

            dm.MoveTo(point.X, point.Y);
            dm.LeftDoubleClick();
            Thread.Sleep(sleep);
        }
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var endTime = new DateTime(2018, 7, 16, 4, 0, 0);

            if (DateTime.Now > endTime)
            {
                return(new WlyTaskInfo(ID, true));
            }

            var dmGuid = entity.DMGuid;

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_厉兵秣马);

            // 领取两个大包厢
            DMService.Instance.LeftClick(dmGuid, new WxPoint(228, 227));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(227, 328));

            // 循环领取七天的奖励
            var start = new WxPoint(375, 177);

            for (var i = 0; i < 7; i++)
            {
                DMService.Instance.LeftClick(dmGuid, start.Shift(70 * i, 0), TimeSpan.FromSeconds(1));
                FlowLogicHelper.RepeatRun(() =>
                {
                    var rect  = new WxRect(733, 290, 790, 312);
                    var point = new WxPoint(761, 299);

                    Thread.Sleep(1000);
                    if (DMService.Instance.FindStr(dmGuid, new WxRect(357, 300, 436, 320), "打猎", "fffdd4-000000"))
                    {
                        rect  = new WxRect(732, 378, 792, 400);
                        point = new WxPoint(759, 388);
                    }

                    if (DMService.Instance.FindStr(dmGuid, rect, "领取奖励", WlyColor.Normal, WlyColor.White))
                    {
                        DMService.Instance.LeftClick(dmGuid, point);
                        return(false);
                    }

                    if (DMService.Instance.FindStr(dmGuid, rect, "前往", WlyColor.Normal))
                    {
                        return(true);
                    }

                    if (DMService.Instance.FindStr(dmGuid, new WxRect(485, 317, 518, 342), "确定", WlyColor.Normal))
                    {
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(495, 330));
                    }

                    return(false);
                }, TimeSpan.FromSeconds(10));
            }

            return(new WlyTaskInfo(ID, true));
        }
Exemple #12
0
        /// <summary>
        /// 攻击指定位置的NPC
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="target"></param>
        private void Attack(string dmGuid, WxPoint target)
        {
            DMService.Instance.LeftClick(dmGuid, target, TimeSpan.FromMilliseconds(200));
            if (DMService.Instance.FindStr(dmGuid, new WxRect(479, 316, 517, 346), "确定", WlyColor.Normal))
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(502, 331), TimeSpan.FromMilliseconds(200));
            }

            if (DMService.Instance.FindStr(dmGuid, new WxRect(565, 328, 601, 351), "强攻", WlyColor.Normal))
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(640, 183), TimeSpan.FromMilliseconds(200));
            }

            DMService.Instance.LeftClick(dmGuid, new WxPoint(584, 306), TimeSpan.FromMilliseconds(200));
        }
Exemple #13
0
        /// <summary>
        /// 升级军团科技
        /// </summary>
        /// <param name="dmGuid"></param>
        public static bool Upgrade(string dmGuid)
        {
            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_军团科技);

            // 检测科技等级
            var res = WlyUtilityBiz.GetAmount(dmGuid, new WxRect(739, 340, 783, 364), "20ef4c-000000", out var l);

            if (res && (l < 100))
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(516, 474));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(609, 476));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(587, 287));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(436, 364));
                return(false);
            }

            var startPoint = new WxPoint(237, 256);

            for (int i = 0; i < 6; i++)
            {
                DMService.Instance.LeftClick(dmGuid, startPoint.Shift(74 * i, 0));

                // 检测科技等级
                var result = WlyUtilityBiz.GetAmount(dmGuid, new WxRect(739, 340, 783, 364), "20ef4c-000000", out var level);
                if (!result)
                {
                    throw new InvalidOperationException("无法检测到科技等级");
                }

                if (level < 100)
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(516, 474));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(609, 476));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(587, 287));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(436, 364));
                    return(false);
                }
            }

            return(true);
        }
Exemple #14
0
        /// <summary>
        /// 更换指定部位的装备
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="staff"></param>
        /// <param name="type"></param>
        /// <param name="staffLevel"></param>
        public static void ChangeEquipmenet(string dmGuid, WlyStaffType staff, WlyEquipType type, int staffLevel)
        {
            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_装备);
            WlyUtilityBiz.SelectStaffInList(dmGuid, staff);

            var p = _equipSpaceMap[type];

            DMService.Instance.LeftClick(dmGuid, p);
            var currentInfo = GetEquipInfo(dmGuid);

            var startPoint = new WxPoint(551, 240);

            for (var j = 0; j < 4; j++)
            {
                for (var i = 0; i < 2; i++)
                {
                    var clickPoint = startPoint.Shift(i * 60, j * 60);
                    if (DMService.Instance.FindColor(dmGuid, "0a1215-000000", new WxRect(clickPoint, 10)))
                    {
                        return;
                    }

                    DMService.Instance.LeftClick(dmGuid, clickPoint);
                    var equipInfo = GetEquipInfo(dmGuid);

                    if (equipInfo.EquipLevel > staffLevel)
                    {
                        continue;
                    }

                    // 符合更换条件则进行更换
                    if ((equipInfo.Quality > currentInfo.Quality) ||
                        ((equipInfo.Quality == currentInfo.Quality) && (equipInfo.EquipLevel > currentInfo.EquipLevel)))
                    {
                        // 点击更换
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(590, 473));
                        return;
                    }
                }
            }
        }
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_普通砸罐);
            Thread.Sleep(2000);
            var startPoint = new WxPoint(428, 261);

            while (!DMService.Instance.FindStr(dmGuid, new WxRect(801, 351, 842, 384), "需要", WlyColor.Selected))
            {
                for (var i = 0; i < 2; i++)
                {
                    for (var j = 0; j < 4; j++)
                    {
                        var point = startPoint.Shift(i * 86, j * 88);
                        DMService.Instance.LeftClick(dmGuid, point, TimeSpan.FromMilliseconds(600));
                    }
                }
            }

            return(new WlyTaskInfo(ID, true));
        }
        /// <summary>
        /// 升级科技到指定的策略府等级
        /// </summary>
        /// <param name="level"></param>
        /// <param name="dmGuid"></param>
        public static bool UpgradeTechnology(int level, string dmGuid)
        {
            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_升级科技);

            var startPoint = new WxPoint(239, 249);

            for (int column = 0; column < 6; column++)
            {
                for (int row = 0; row < 2; row++)
                {
                    DMService.Instance.LeftClick(dmGuid, startPoint.Shift(column * 72, row * 72));
                    if (!FlowLogicHelper.RunToTarget(() =>
                    {
                        var str = DMService.Instance.GetWords(dmGuid, new WxRect(719, 358, 800, 382), "33ffff-000000");
                        return(int.Parse(str.Substring(3, str.Length - 4)));
                    }, current => current > level, () => DMService.Instance.LeftClick(dmGuid, new WxPoint(613, 472))))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_活跃);

            Thread.Sleep(1000);
            DMService.Instance.LeftClick(dmGuid, new WxPoint(756, 361));

            var startPoint = new WxPoint(543, 302);

            for (var i = 0; i < 6; i++)
            {
                DMService.Instance.LeftClick(dmGuid, startPoint.Shift(52 * i, 0), TimeSpan.FromMilliseconds(150));
            }

            startPoint = new WxPoint(270, 441);
            for (var i = 0; i < 7; i++)
            {
                DMService.Instance.LeftClick(dmGuid, startPoint.Shift(86 * i, 0), TimeSpan.FromMilliseconds(100));
            }

            return(new WlyTaskInfo(ID, true));
        }
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            WlyViewMgr.GoTo(dmGuid, WlyViewType.场景_世界地图);
            FlowLogicHelper.RepeatRun(() =>
            {
                WlyViewMgr.GoTo(dmGuid, WlyViewType.场景_主城);
                if (DMService.Instance.FindColor("f7654f-000000|e6b3d2-000000", WlyUtilityBiz.GameWndRect, dmGuid, out var x, out var y))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                    return(true);
                }

                Thread.Sleep(500);
                return(false);
            }, TimeSpan.FromSeconds(60));

            var leftRect = new WxRect(436, 138, 563, 496);

            Thread.Sleep(2000);
            if (DMService.Instance.FindStr(dmGuid, new WxRect(467, 94, 537, 125), "辅政大臣", WlyColor.Normal))
            {
                for (var i = 0; i < 4; i++)
                {
                    int x, y;
                    while (DMService.Instance.FindStr(dmGuid, new WxRect(585, 137, 677, 498), "开启", WlyColor.Normal, out x, out y))
                    {
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                    }

                    if (DMService.Instance.FindStr(dmGuid, leftRect, "征兵", "f3f3da-000000", out x, out y))
                    {
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                    }

                    if (DMService.Instance.FindStr(dmGuid, new WxRect(582, 139, 634, 497), "暴击率", "f3f3da-000000", out x, out y))
                    {
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                    }

                    if (DMService.Instance.FindStr(dmGuid, leftRect, "俸禄", "f3f3da-000000", out x, out y))
                    {
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                    }

                    if (DMService.Instance.FindStr(dmGuid, leftRect, "自动免费", "f3f3da-000000", out x, out y))
                    {
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                    }

                    if (DMService.Instance.FindStr(dmGuid, leftRect, "自动免费", "f3f3da-000000", out x, out y))
                    {
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                    }

                    // 设置出航贸易
                    if (DMService.Instance.FindStr(dmGuid, new WxRect(406, 146, 486, 498), "出航贸易", "ffffcc-000000", out x, out y))
                    {
                        var start = new WxPoint(x, y);
                        DMService.Instance.LeftClick(dmGuid, start.Shift(170, 28));
                        DMService.Instance.LeftClick(dmGuid, start.Shift(149, 207));
                        DMService.Instance.LeftClick(dmGuid, start.Shift(170, 53));
                        DMService.Instance.LeftClick(dmGuid, start.Shift(148, 231));
                        DMService.Instance.LeftClick(dmGuid, start.Shift(170, 75));
                        DMService.Instance.LeftClick(dmGuid, start.Shift(148, 60));
                        DMService.Instance.LeftClick(dmGuid, start.Shift(170, 101));
                        DMService.Instance.LeftClick(dmGuid, start.Shift(148, 85));
                    }

                    FlowLogicHelper.RepeatRun(() => DMService.Instance.LeftClick(dmGuid, new WxPoint(806, 481), TimeSpan.FromMilliseconds(100)), 18);
                }

                // 保存
                DMService.Instance.LeftClick(dmGuid, new WxPoint(297, 468));
                if (DMService.Instance.FindStr(dmGuid, new WxRect(482, 312, 523, 346), "确定", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(503, 333));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(804, 123));
                    // 保存成功
                    return(new WlyTaskInfo(ID, true));
                }
            }

            // 重启测试
            throw new InvalidOperationException();
        }
Exemple #19
0
        /// <summary>
        /// 寻找首攻
        /// </summary>
        private bool FindFirstAttack()
        {
            // 处理加入失败,关闭军团战界面,防止被bug消耗军令
            var view = WlyViewMgr.GetView(WlyViewType.略_加入失败);

            if (view.IsCurrentView(DMGuid))
            {
                view.Exit(DMGuid);
                WlyViewMgr.ExitCurrentView(DMGuid, TimeSpan.FromSeconds(5));
            }

            // 组队框
            var teamRect = new WxRect(632, 206, 807, 449);

            string GetTargetStr()
            {
                if (AccountInfo.Point > AccountInfo.PointReserved)
                {
                    return($"加|区|(首|攻)|不耗|首攻|{AccountInfo.SelectedGroupType.ToString()}");
                }

                return("加|区|(首|攻)|不耗|首攻");
            }

            bool Handler()
            {
                // 在聊天框寻找首攻
                var chatRect = new WxRect(0, 470, 277, 600);
                var str      = DMService.Instance.FindStrEx(DMGuid, chatRect, GetTargetStr(), "fff71c-000000|fcffa9-000000|00ff00-000000");

                if (string.IsNullOrEmpty(str))
                {
                    return(false);
                }

                // 字符串分析
                var sp = str.Split('|');

                if (sp.Count(p => p[0] == '0') > 1)
                {
                    // 加字数量过多,需要关闭聊天窗
                    return(false);
                }

                // 激活
                if (sp.Any(p => p[0] == '1'))
                {
                    KeepAlive();
                }

                // 找到了一次军团副本
                if (sp.Any(p => p[0] == '6'))
                {
                    AccountInfo.Point--;
                }

                // 有首攻标识,进行加入
                if (sp.Any(p => int.Parse(p[0].ToString()) > 1))
                {
                    var join = sp.FirstOrDefault(o => o[0] == '0');
                    if (!string.IsNullOrEmpty(join))
                    {
                        var pos   = join.Split(',');
                        var point = new WxPoint(int.Parse(pos[1]) + 5, int.Parse(pos[2]) + 5);
                        DMService.Instance.LeftClick(DMGuid, point, TimeSpan.FromSeconds(2));
                    }
                }

                Thread.Sleep(1000);
                if (DMService.Instance.FindStr(DMGuid, teamRect, "海潮", "e9e7cf-000000"))
                {
                    return(true);
                }

                return(false);
            }

            var result = FlowLogicHelper.RepeatRun(Handler, TimeSpan.FromSeconds(5));

            if (result)
            {
                FlowLogicHelper.RepeatRun(() =>
                {
                    Thread.Sleep(200);
                    return(DMService.Instance.FindStr(DMGuid, teamRect, "海潮", "e9e7cf-000000"));
                }, TimeSpan.FromSeconds(5));
                return(true);
            }

            return(false);
        }
Exemple #20
0
 /// <summary>
 /// 左键双击
 /// </summary>
 /// <param name="dmGuid"></param>
 /// <param name="point"></param>
 public void LeftClick(string dmGuid, WxPoint point)
 {
     LeftClick(dmGuid, point, TimeSpan.FromMilliseconds(400));
 }
Exemple #21
0
        /// <summary>
        /// 登录到服务器
        /// </summary>
        /// <returns>返回null表示登录失败,需要重新尝试</returns>
        public static void Login(WlyEntity entity)
        {
            // 登录并发保护
            lock (_loginLocker)
            {
                var guid    = DMService.Instance.CreateDMSoft();
                var hwndStr = string.Empty;

                // 程序保护
                var fileInfo = new FileInfo(ProgramPath);
                if (fileInfo.Length < 10240)
                {
                    File.Delete(ProgramPath);
                    File.Copy(BaseProgramPath, ProgramPath);
                }

                // 启动程序
                var process = Process.Start(new ProcessStartInfo
                {
                    UseShellExecute = true,
                    FileName        = ProgramPath
                });

                try
                {
                    // 获取窗口句柄,进程有时不会立即打开,做一个循环获取,保证成功率
                    Thread.Sleep(400);
                    if (!FlowLogicHelper.RepeatRun(() =>
                    {
                        hwndStr = DMService.Instance.EnumWindowByProcessId(guid, process.Id, "", "Internet Explorer_Server", 2);
                        if (string.IsNullOrEmpty(hwndStr))
                        {
                            Thread.Sleep(300);
                            return(false);
                        }

                        return(true);
                    }, TimeSpan.FromSeconds(5)))
                    {
                        throw new InvalidOperationException("打开游戏进程失败");
                    }

                    // 绑定窗口,开始登录
                    var loginHwnd = int.Parse(hwndStr);
                    DMService.Instance.BindWindow(guid, loginHwnd);

                    // 确认登录界面完全显示
                    if (!FlowLogicHelper.RepeatRun(() =>
                    {
                        if (!DMService.Instance.FindPic(guid, WlyPicType.进入游戏, GameWndRect))
                        {
                            Thread.Sleep(500);
                            return(false);
                        }

                        return(true);
                    }, TimeSpan.FromSeconds(5)))
                    {
                        WxLog.Debug($"WlyUtilityBiz.Login Cannot Find Login Wnd <{loginHwnd}>");
                        throw new InvalidOperationException("登录界面不显示");
                    }

                    // 输入账号
                    var accountPoint = new WxPoint(324, 258);
                    DMService.Instance.LeftDoubleClick(guid, accountPoint, 200);
                    DMService.Instance.SendString(guid, loginHwnd, entity.Account);
                    Thread.Sleep(200);

                    // 输入密码
                    var pswPoint = new WxPoint(234, 291);
                    DMService.Instance.LeftDoubleClick(guid, pswPoint, 200);
                    DMService.Instance.SendString(guid, loginHwnd, entity.Password);
                    Thread.Sleep(200);

                    // 点击登录,等待登录成功
                    var loginPoint = new WxPoint(482, 322);
                    if (!FlowLogicHelper.RepeatRun(() =>
                    {
                        if (!DMService.Instance.FindPic(guid, WlyPicType.登录成功, GameWndRect))
                        {
                            if (DMService.Instance.FindPic(guid, WlyPicType.进入游戏, GameWndRect))
                            {
                                DMService.Instance.LeftClick(guid, loginPoint);
                            }

                            Thread.Sleep(500);
                            return(false);
                        }

                        return(true);
                    }, TimeSpan.FromSeconds(5)))
                    {
                        throw new InvalidOperationException("Need Restart");
                    }

                    DMService.Instance.LeftClick(guid, new WxPoint(230, 159));
                    DMService.Instance.SendString(guid, loginHwnd, "6117");
                    Thread.Sleep(400);
                    DMService.Instance.LeftClick(guid, new WxPoint(365, 158));

                    entity.EntityProcess = process;
                }
                catch
                {
                    if (process != null)
                    {
                        process.Kill();
                        process.Dispose();
                    }

                    throw;
                }
                finally
                {
                    DMService.Instance.ReleaseDMSoft(guid);
                }
            }
        }
Exemple #22
0
 /// <summary>
 /// 左键双击
 /// </summary>
 /// <param name="dmGuid"></param>
 /// <param name="point"></param>
 public void LeftDoubleClick(string dmGuid, WxPoint point)
 {
     LeftDoubleClick(dmGuid, point, TimeSpan.Zero);
 }
Exemple #23
0
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            // 前往海盗活动界面
            WlyViewMgr.GoTo(dmGuid, WlyViewType.日常_海盗);

            if (DMService.Instance.FindStr(dmGuid, new WxRect(523, 280, 559, 299), "海战", "e9e7cf-000000"))
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(500, 331));
                return(new WlyTaskInfo(ID, true));
            }

            // 等待活动开始
            var startRect = new WxRect(7, 223, 65, 244);
            var wait      = FlowLogicHelper.RepeatRun(() =>
            {
                Thread.Sleep(400);
                return(DMService.Instance.FindStr(dmGuid, startRect, "剩余时间", "ffff00-101010"));
            }, TimeSpan.FromMinutes(1));

            if (!wait)
            {
                throw new InvalidOperationException("海盗活动未正常开始");
            }

            // 剩余时间
            var lastTimeRect = new WxRect(66, 226, 105, 245);

            // 冷却时间
            var coolTimeRect = new WxRect(65, 205, 105, 224);

            // 得到的分数
            var pointRect = new WxRect(972, 94, 994, 113);

            // 活动结束
            var finalRect = new WxRect(488, 416, 522, 438);

            // 攻击
            void Attack()
            {
                var fr = DMService.Instance.FindPic(dmGuid, WlyPicType.超强炮舰, WlyUtilityBiz.GameWndRect, out var xx, out var yy);

                if (fr)
                {
                    var p = new WxPoint(xx, yy);
                    DMService.Instance.LeftClick(dmGuid, p);
                }

                Thread.Sleep(100);

                // 如果需要金币进行冷却,则确定
                var r = new WxRect(436, 342, 472, 365);

                if (DMService.Instance.FindStr(dmGuid, r, "确定", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(454, 354));
                }
            }

            // 活动运行
            bool Run()
            {
                var lt = WlyUtilityBiz.GetTime(dmGuid, lastTimeRect, "ffffff-000000");
                var ct = WlyUtilityBiz.GetTime(dmGuid, coolTimeRect, "ffffff-000000");

                // 冷却时间到,开始攻击
                if (ct == TimeSpan.Zero)
                {
                    Attack();
                }
                else
                {
                    // 计算已经得到的分数,确定是否需要进行强攻
                    WlyUtilityBiz.GetAmount(dmGuid, pointRect, "ffffff-000000", out var point);
                    var times = point / 33;

                    // 需要在1分30秒之前完成10次攻打
                    if (lt.Add(TimeSpan.FromSeconds(30 * times)) < TimeSpan.FromMinutes(6).Add(TimeSpan.FromSeconds(30)))
                    {
                        Attack();
                    }
                    else
                    {
                        // 等待冷却完成
                        Thread.Sleep(ct.Add(TimeSpan.FromMilliseconds(100)));
                    }
                }

                // 检测活动是否结束
                if (DMService.Instance.FindStr(dmGuid, finalRect, "确定", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(505, 430));
                    return(true);
                }

                return(false);
            }

            // 开始攻打海盗
            FlowLogicHelper.RepeatRun(Run, TimeSpan.FromMinutes(7));
            return(new WlyTaskInfo(ID, true));
        }
Exemple #24
0
 /// <summary>
 /// 左键双击
 /// </summary>
 /// <param name="dmGuid"></param>
 /// <param name="point"></param>
 /// <param name="sleep">单位:毫秒</param>
 public void LeftDoubleClick(string dmGuid, WxPoint point, int sleep)
 {
     LeftDoubleClick(dmGuid, point, TimeSpan.FromMilliseconds(sleep));
 }
Exemple #25
0
 /// <summary>
 /// 构造函数
 /// </summary>
 public WxRect(WxPoint center, int length) : this(center, length, length)
 {
 }
        private static WlyProgressNode GetSubPoint(string dmGuid, int index, string previousID)
        {
            var location = new WxPoint(0, 0);

            if (previousID == "wly17_347_127")
            {
                location = new WxPoint(394, 94);
            }
            else
            {
                var wait = FlowLogicHelper.RepeatRun(() =>
                {
                    var find = DMService.Instance.FindPic(dmGuid, WlyPicType.可攻击目标, WlyUtilityBiz.GameWndRect, out var x, out var y);
                    if (find)
                    {
                        location = new WxPoint(x + 7, y + 14);
                        return(true);
                    }

                    Thread.Sleep(500);
                    var view = WlyViewMgr.GetView(WlyViewType.导航_日常按钮栏);
                    if (view.IsCurrentView(dmGuid))
                    {
                        view.Exit(dmGuid);
                    }

                    view = WlyViewMgr.GetView(WlyViewType.右侧提示);
                    if (view.IsCurrentView(dmGuid))
                    {
                        view.Exit(dmGuid);
                    }

                    view = WlyViewMgr.GetView(WlyViewType.略_点击继续);
                    if (view.IsCurrentView(dmGuid))
                    {
                        view.Exit(dmGuid);
                    }

                    Thread.Sleep(100);
                    return(false);
                }, TimeSpan.FromSeconds(5));

                if (!wait)
                {
                    if (index == 11)
                    {
                        location = new WxPoint(909, 213);
                    }

                    if (index == 17)
                    {
                        location = new WxPoint(347, 127);
                    }
                }
            }

            // 判断是否寻到攻击目标
            if ((location.X == 0) && (location.Y == 0))
            {
                throw new InvalidOperationException("找不到攻击目标");
            }

            // 构建攻击节点
            var node = new WlyProgressNode
            {
                Location = location,
                Progress = index
            };

            return(node);
        }
        /// <summary>
        /// 攻击指定位置的npc,获取攻击结果
        /// </summary>
        /// <param name="point"></param>
        /// <param name="dmGuid"></param>
        /// <returns></returns>
        private static bool?Attack(WxPoint point, string dmGuid)
        {
            var wait = FlowLogicHelper.RepeatRun(() =>
            {
                var v = WlyViewMgr.GetView(WlyViewType.导航_日常按钮栏);
                if (v.IsCurrentView(dmGuid))
                {
                    v.Exit(dmGuid);
                }

                v = WlyViewMgr.GetView(WlyViewType.右侧提示);
                if (v.IsCurrentView(dmGuid))
                {
                    v.Exit(dmGuid);
                }

                v = WlyViewMgr.GetView(WlyViewType.略_点击继续);
                if (v.IsCurrentView(dmGuid))
                {
                    v.Exit(dmGuid);
                }

                Thread.Sleep(100);
                WlyViewMgr.GoTo(dmGuid, WlyViewType.场景_副本);
                DMService.Instance.LeftClick(dmGuid, point);
                return(DMService.Instance.FindStr(dmGuid, new WxRect(556, 290, 608, 318), "攻击", WlyColor.Normal));
            }, TimeSpan.FromSeconds(5));

            if (!wait)
            {
                if (DMService.Instance.FindStr(dmGuid, new WxRect(566, 297, 605, 314), "攻击", "cccccc-000000"))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(638, 183));
                    return(null);
                }

                throw new InvalidOperationException("无法点开NPC");
            }

            // 判断NPC是否已经完成攻击
            if (DMService.Instance.FindStr(dmGuid, new WxRect(587, 401, 624, 422), "战斗", "66ff00-000000"))
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(638, 183));
                return(null);
            }

            DMService.Instance.LeftClick(dmGuid, new WxPoint(584, 304));
            var view = WlyViewMgr.GetView(WlyViewType.场景_战斗);

            wait = FlowLogicHelper.RepeatRun(() =>
            {
                Thread.Sleep(2000);
                return(view.IsCurrentView(dmGuid));
            }, TimeSpan.FromSeconds(30));

            if (!wait)
            {
                throw new InvalidOperationException("无法进去战斗画面");
            }

            //if (!DMService.Instance.FindStr(dmGuid, new WxRect(791, 566, 826, 591), "关闭", "f3f3da-000000"))
            //{
            //    DMService.Instance.LeftClick(dmGuid, new WxPoint(817, 576));
            //}

            // 等待战斗结果
            bool key = true;

            wait = FlowLogicHelper.RepeatRun(() =>
            {
                if (DMService.Instance.FindStr(dmGuid, new WxRect(723, 560, 768, 591), "结果", "f3f3da-000000"))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(751, 576));
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(439, 205, 560, 238), "获得胜利", "e9e7cf-000000"))
                {
                    return(true);
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(517, 211, 552, 234), "失败", "e9e7cf-000000"))
                {
                    key = false;
                    return(true);
                }

                return(false);
            }, TimeSpan.FromSeconds(60));
            if (!wait)
            {
                throw new InvalidOperationException("等待不到战斗结果");
            }

            WlyViewMgr.ExitCurrentView(dmGuid, TimeSpan.FromSeconds(10));
            return(key);
        }
Exemple #28
0
        /// <summary>
        /// 强化所有的装备
        /// </summary>
        /// <param name="entity"></param>
        public static void UpgradeAllEquipmenets(WlyEntity entity)
        {
            // 清理装备
            var dmGuid    = entity.DMGuid;
            var cityLevel = entity.AccountInfo.GetBuildingInfo(WlyBuildingType.主城).Level;

            foreach (var staff in entity.AccountInfo.StaffInfoDict.Values)
            {
                if ((staff.Level == cityLevel) && (staff.GrowLevel > cityLevel))
                {
                    continue;
                }

                staff.Level = WlyStaffMgr.GetStaffLevel(dmGuid, staff.Name);
                if ((cityLevel >= 100) && (staff.Level < 80))
                {
                    WlyStaffMgr.Upgrade(staff.Name, 80, dmGuid);
                    staff.Level = WlyStaffMgr.GetStaffLevel(dmGuid, staff.Name);
                }
            }

            ClearEquipments(entity);

            var r = WlyUtilityBiz.GetAmount(dmGuid, new WxRect(274, 47, 321, 72), "f3f3da-000000", out var aa);

            if (r && (aa >= 500000))
            {
                // 遍历进行装备交换
                var staffs = entity.AccountInfo.StaffInfoDict.Values;
                foreach (var a in staffs.ToList())
                {
                    foreach (var b in staffs.ToList())
                    {
                        if (a.Name == b.Name)
                        {
                            continue;
                        }

                        // 遍历装备
                        foreach (var e1 in a.EquipInfoDict.Values)
                        {
                            var e2 = b.GetEquipInfo(e1.Type);
                            if (a.EquipmentRequestDict[e1.Type] && !b.EquipmentRequestDict[e2.Type] &&
                                ((e1.Quality < e2.Quality) ||
                                 ((e1.Quality == e2.Quality) && (e1.EquipLevel < e2.EquipLevel))))
                            {
                                WlyStaffMgr.SwitchEquipment(dmGuid, a, b, e1.Type);
                            }
                        }
                    }
                }

                entity.AccountInfo.Save();
            }

            if (WlyUtilityBiz.GetAmount(dmGuid, new WxRect(133, 26, 217, 47), "f3f3da-000000", out var amount))
            {
                if ((amount < 10000000) && (entity.AccountInfo.GetBuildingInfo(WlyBuildingType.主城).Level >= 100))
                {
                    return;
                }
            }

            var shopLevel = entity.AccountInfo.GetBuildingInfo(WlyBuildingType.商铺).Level;
            var ss        = new List <WlyStaffType>();

            foreach (var s in entity.AccountInfo.StaffInfoDict.Values)
            {
                foreach (var e in s.EquipInfoDict.Values)
                {
                    if (s.EquipmentRequestDict[e.Type] && (e.Level < shopLevel) && (e.Quality != WlyQualityType.Unknow))
                    {
                        ss.Add(s.Name);
                        break;
                    }
                }
            }

            if (!ss.Any())
            {
                return;
            }

            var staffstr = string.Join("|", ss.Select(o => o.ToString()));

            // 切换到功能
            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_强化装备);

            for (int i = 0; i < 3; i++)
            {
                var result = DMService.Instance.FindStrEx(dmGuid, new WxRect(188, 201, 417, 439), staffstr, WlyColor.White);
                var list   = result.Split('|');
                foreach (var pos in list)
                {
                    var ps    = pos.Split(',');
                    var index = int.Parse(ps[0]);
                    var point = new WxPoint(int.Parse(ps[1]), int.Parse(ps[2]));
                    var info  = entity.AccountInfo.GetStaffInfo(ss[index]);

                    // 点击辨别装备
                    DMService.Instance.LeftClick(dmGuid, point);
                    var equipInfo = WlyEquipMgr.GetEquipInfo(dmGuid);
                    if (info.EquipmentRequestDict[equipInfo.Type] && (equipInfo.Level < shopLevel))
                    {
                        // 开始强化
                        DMService.Instance.LeftDown(dmGuid, new WxPoint(563, 354));
                        var res = FlowLogicHelper.RunToTarget(() => GetEquipLevelCore(dmGuid), current => current >= shopLevel, () => Thread.Sleep(500));
                        DMService.Instance.LeftUp(dmGuid, new WxPoint(563, 354));
                        info.SaveEquipInfo(WlyEquipMgr.GetEquipInfo(dmGuid));
                        if (!res)
                        {
                            // 银币耗尽,直接返回
                            entity.AccountInfo.Save();
                            return;
                        }
                    }
                }

                // 往下翻一页
                DMService.Instance.RepeatLeftClick(dmGuid, new WxPoint(426, 427), 14, 100);
            }

            entity.AccountInfo.Save();
        }
Exemple #29
0
 protected bool Equals(WxPoint other)
 {
     return((X == other.X) && (Y == other.Y));
 }