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

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_主线任务);
            FlowLogicHelper.RepeatRun(() =>
            {
                if (DMService.Instance.FindStr(dmGuid, new WxRect(550, 418, 634, 446), "领取|接受",
                                               $"{WlyColor.Normal}|{WlyColor.White}"))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(592, 436));
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(550, 418, 634, 446), "取消",
                                               $"{WlyColor.Normal}|{WlyColor.White}"))
                {
                    return(true);
                }

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

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_每日任务);
            var key = false;

            FlowLogicHelper.RepeatRun(() =>
            {
                if (DMService.Instance.FindColor(dmGuid, "4bd8b0-000000", new WxRect(765, 244, 784, 261)))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(721, 220));
                }

                if (DMService.Instance.FindColor(dmGuid, "418674-000000", new WxRect(765, 244, 784, 261)))
                {
                    return(true);
                }

                if (DMService.Instance.FindColor(dmGuid, "101b19-000000", new WxRect(new WxPoint(682, 192), 10, 10)))
                {
                    key = true;
                    return(true);
                }

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

            return(key ? new WlyTaskInfo(ID, true) : new WlyTaskInfo(ID, DateTime.Now.Add(m_interval)));
        }
        /// <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);

            // 勾选使用3金币进行暴击
            if (!DMService.Instance.FindColor(dmGuid, WlyColor.Normal, new WxRect(534, 236, 566, 255)))
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(520, 245));
            }

            var wait = FlowLogicHelper.RepeatRun(() =>
            {
                var result = WlyUtilityBiz.GetAmount(dmGuid, new WxRect(575, 420, 599, 437), "f3f3da-000000", out var amount);
                if (result && (amount == 0))
                {
                    return(true);
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(458, 260, 521, 294), "金币", "ffff00-000000"))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(545, 357));
                }

                FlowLogicHelper.RepeatRun(() => DMService.Instance.LeftClick(dmGuid, new WxPoint(554, 457), TimeSpan.FromMilliseconds(200)), amount);
                Thread.Sleep(1000);
                return(false);
            }, TimeSpan.FromSeconds(30));

            if (wait)
            {
                Thread.Sleep(1000);
                if (DMService.Instance.FindStr(dmGuid, new WxRect(531, 342, 561, 364), "取消", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(548, 353));
                }

                // 卖出商品
                DMService.Instance.LeftClick(dmGuid, new WxPoint(710, 456));

                return(new WlyTaskInfo(ID, true));
            }

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

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_船坞);

            for (int i = 0; i < 10; i++)
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(651, 470));
                if (DMService.Instance.FindStr(dmGuid, new WxRect(535, 203, 618, 456), "修理", WlyColor.Normal, out var x, out var y))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                }
            }

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

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_仓库);

            // 如果花费0金币则 开启
            var result = DMService.Instance.FindStr(dmGuid, new WxRect(390, 464, 434, 490), "0金币", "ffff00-000000");

            if (result)
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(411, 456));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(451, 332));
            }

            return(new WlyTaskInfo(ID, true));
        }
        /// <summary>
        /// 征召士兵
        /// </summary>
        /// <param name="dmGuid"></param>
        public static void GetSoldier(string dmGuid)
        {
            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_征兵);
            FlowLogicHelper.RepeatRun(() =>
            {
                if (DMService.Instance.FindStr(dmGuid, new WxRect(634, 410, 704, 439), "募集", $"{WlyColor.Normal}|{WlyColor.White}"))
                {
                    FlowLogicHelper.RepeatRun(() => DMService.Instance.LeftClick(dmGuid, new WxPoint(664, 425), TimeSpan.FromMilliseconds(100)), 10);
                    return(false);
                }

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

            DMService.Instance.LeftClick(dmGuid, new WxPoint(562, 261));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(666, 292));
        }
Exemple #6
0
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_团战报名);

            var day = WlyUtilityBiz.SystemInfo.GameTime;

            if (day.Contains("夏") || day.Contains("秋"))
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(693, 231), TimeSpan.FromSeconds(1));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(346, 479), TimeSpan.FromSeconds(1));

                if (DMService.Instance.FindStr(dmGuid, new WxRect(438, 268, 570, 369), "确定", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(499, 331));
                }

                DMService.Instance.LeftClick(dmGuid, new WxPoint(560, 225));
                if (DMService.Instance.FindColor(dmGuid, "ffffff-000000", new WxRect(503, 253, 536, 264)))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(519, 259));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(693, 231), TimeSpan.FromSeconds(1));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(346, 479), TimeSpan.FromSeconds(1));

                    if (DMService.Instance.FindStr(dmGuid, new WxRect(438, 268, 570, 369), "确定", WlyColor.Normal))
                    {
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(499, 331));
                    }
                }
            }

            if (DMService.Instance.FindColor(dmGuid, "f3f3da-000000", new WxRect(347, 222, 400, 242)))
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(372, 231));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(343, 478));

                if (DMService.Instance.FindStr(dmGuid, new WxRect(438, 268, 570, 369), "确定", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(499, 331));
                }
            }

            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.功能_委派);

            // 主城等级大于100时自动卖出
            if (entity.AccountInfo.GetBuildingInfo(WlyBuildingType.主城).Level >= 100)
            {
                // 设置自动卖出
                DMService.Instance.LeftClick(dmGuid, new WxPoint(251, 473));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(442, 341));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(493, 395));
            }

            // 开始委派
            var wait = FlowLogicHelper.RepeatRun(() =>
            {
                if (WlyUtilityBiz.GetAmount(dmGuid, new WxRect(294, 429, 312, 449), "fce69a-000000", out var count) && (count == 0))
                {
                    return(true);
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(524, 338, 569, 367), "取消", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(548, 351));
                }

                FlowLogicHelper.RepeatRun(() => DMService.Instance.LeftClick(dmGuid, new WxPoint(257, 368), TimeSpan.FromMilliseconds(200)), count);
                Thread.Sleep(1000);
                return(false);
            }, TimeSpan.FromSeconds(30));

            if (DMService.Instance.FindStr(dmGuid, new WxRect(483, 384, 517, 409), "免费", "ffff00-000000"))
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(496, 367));
            }

            if (wait)
            {
                return(new WlyTaskInfo(ID, true));
            }

            return(new WlyTaskInfo(ID, DateTime.Now.Add(TimeSpan.FromMinutes(30))));
        }
        /// <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);
            if (WlyUtilityBiz.GetAmount(dmGuid, new WxRect(642, 561, 663, 588), "31f101-000000", out var count) && (count == 0))
            {
                return(new WlyTaskInfo(ID, DateTime.Now.AddMinutes(30)));
            }

            var targets = DMService.Instance.FindPics(dmGuid, WlyPicType.打劫目标, new WxRect(110, 179, 931, 536));

            foreach (var target in targets)
            {
                DMService.Instance.LeftClick(dmGuid, target);
                var wait = DMService.Instance.FindStr(dmGuid, new WxRect(110, 179, 931, 536), "名称", WlyColor.Normal, out var x, out var y);
                if (!wait)
                {
                    continue;
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(x - 5, y - 5, x + 150, y + 50), "墨君", WlyColor.White))
                {
                    var nextTime = WlyUtilityBiz.GetTime(dmGuid, new WxRect(x, y, x + 100, y + 100), WlyColor.Selected);
                    if (nextTime == TimeSpan.Zero)
                    {
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(706, 577));
                        nextTime = TimeSpan.FromMinutes(10);
                    }

                    if (DMService.Instance.FindStr(dmGuid, new WxRect(480, 318, 519, 342), "确定", WlyColor.Normal))
                    {
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(499, 331));
                    }

                    return(new WlyTaskInfo(ID, DateTime.Now.Add(nextTime)));
                }
            }

            return(new WlyTaskInfo(ID, DateTime.Now.AddMinutes(30)));
        }
Exemple #9
0
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_巡查);

            // 获取剩余巡查次数
            var countRect = new WxRect(463, 447, 498, 464);
            var countStr  = DMService.Instance.GetWords(dmGuid, countRect, "20ef4c-000000");
            var count     = int.Parse(countStr.Split('/')[0]);

            if (count == 0)
            {
                return(new WlyTaskInfo(ID, true));
            }

            // 如果已经正在巡查了,则直接返回即可
            var autoRect = new WxRect(636, 445, 708, 469);

            if (!DMService.Instance.FindStr(dmGuid, autoRect, "停止自动", WlyColor.Normal))
            {
                // 点击巡查
                DMService.Instance.LeftClick(dmGuid, new WxPoint(670, 456));

                // 判断是否目标为公主
                if (!DMService.Instance.FindStr(dmGuid, new WxRect(578, 268, 611, 290), "公主", "e9e7cf-000000"))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(637, 278));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(596, 330));
                }

                // 开始巡查
                DMService.Instance.LeftClick(dmGuid, new WxPoint(439, 364));
            }

            // 五分钟后再次执行
            return(new WlyTaskInfo(ID)
            {
                NextRunTime = DateTime.Now.AddMinutes(5)
            });
        }
Exemple #10
0
        /// <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);
            while (true)
            {
                if (WlyUtilityBiz.GetAmount(dmGuid, new WxRect(324, 498, 339, 520), "e9e7cf-000000", out var amount) && (amount == 0))
                {
                    break;
                }

                DMService.Instance.LeftClick(dmGuid, new WxPoint(502, 253));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(454, 352), TimeSpan.FromSeconds(5));
            }

            return(new WlyTaskInfo(ID, true));
        }
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            if (!entity.AccountInfo.GetSwitchInfo(WlySwitchType.群雄逐鹿).Enable)
            {
                return(new WlyTaskInfo(ID, true));
            }

            var dmGuid = entity.DMGuid;

            // 计算时间
            WlyViewMgr.GoTo(dmGuid, WlyViewType.日常_群雄逐鹿);

            var result = DMService.Instance.FindStr(dmGuid, new WxRect(462, 360, 530, 391), "开始匹配", WlyColor.Normal);

            if (result)
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(491, 376));
            }

            return(new WlyTaskInfo(ID, DateTime.Now.AddMinutes(2)));
        }
Exemple #12
0
        /// <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);
            FlowLogicHelper.RepeatRun(() =>
            {
                // 计算次数
                if (WlyUtilityBiz.GetAmount(dmGuid, new WxRect(466, 526, 477, 541), WlyColor.Normal, out var count) && (count == 0))
                {
                    return(true);
                }

                // 首先检测是否有特殊人物
                if (Special(entity))
                {
                }
                else if (DMService.Instance.FindStr(dmGuid, new WxRect(554, 576, 617, 599), "免费使用", "ff6600-000000"))
                {
                    // 检测是否可以免费喝酒
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(584, 565));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(454, 331), TimeSpan.FromSeconds(1));
                }
                else if (DMService.Instance.FindStr(dmGuid, new WxRect(414, 575, 472, 599), "免费使用", "ff6600-000000"))
                {
                    // 检测是否可以免费另寻他城
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(445, 563));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(454, 331), TimeSpan.FromSeconds(1));
                }
                else
                {
                    // 直接点击
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(89, 116));
                }

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

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_寻访);

            int GetLastTime()
            {
                var countStr = DMService.Instance.GetWords(dmGuid, new WxRect(462, 465, 501, 482), "20ef4c-000000");
                var result   = int.TryParse(countStr.Split('/')[0], out var count);

                if (result)
                {
                    return(count);
                }

                return(0);
            }

            while (GetLastTime() > 0)
            {
                var result = DMService.Instance.FindStr(dmGuid, new WxRect(401, 275, 903, 307), "商贾", WlyColor.Purple, out var x,
                                                        out var y);
                DMService.Instance.LeftClick(dmGuid, result ? new WxPoint(x, y) : new WxPoint(573, 474), TimeSpan.FromSeconds(1));

                if (DMService.Instance.FindStr(dmGuid, new WxRect(491, 266, 523, 283), "丝绸", WlyColor.Yellow))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(546, 355));
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(435, 333, 472, 367), "确定", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(458, 315));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(455, 352));
                }
            }

            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.功能_普通砸罐);
            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="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            WlyProgressMgr.GoTo(dmGuid, 4);

            // 点开军团
            DMService.Instance.LeftClick(dmGuid, new WxPoint(831, 188), TimeSpan.FromSeconds(1));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(581, 303), TimeSpan.FromSeconds(1));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(724, 475), TimeSpan.FromSeconds(1));

            // 一直死循环点击就行了
            while (true)
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(321, 476), TimeSpan.FromMilliseconds(5200));

                var view = WlyViewMgr.GetView(WlyViewType.略_防沉迷验证);
                if (view.IsCurrentView(dmGuid))
                {
                    view.Exit(dmGuid);
                }
            }
        }
Exemple #16
0
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            //var start = DateTime.Today.AddHours(18);
            //var end = DateTime.Today.AddHours(19).AddMinutes(30);

            //if (DateTime.Now < start)
            //{
            //    return new WlyTaskInfo(ID, start);
            //}

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

            var dmGuid = entity.DMGuid;

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_王位争夺战);

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

            if (entity.AccountInfo.GetBuildingInfo(WlyBuildingType.主城).Level >= 100)
            {
                WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_升级科技);
                DMService.Instance.LeftClick(dmGuid, new WxPoint(524, 473));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(455, 333));
            }

            var result = WlyTechnologyMgr.UpgradeTechnology(m_level, dmGuid);

            if (result)
            {
                return(new WlyTaskInfo(ID, true));
            }

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

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_古代战场);
            DMService.Instance.LeftClick(dmGuid, new WxPoint(493, 444));

            var wait = FlowLogicHelper.RepeatRun(() => DMService.Instance.FindStr(dmGuid, new WxRect(449, 77, 504, 94), "剩余时间", "00fc39-000000"),
                                                 TimeSpan.FromSeconds(60));

            if (!wait)
            {
                throw new InvalidOperationException("无法进入古代战场");
            }

            DMService.Instance.LeftClick(dmGuid, new WxPoint(125, 500), TimeSpan.FromSeconds(2));
            if (DMService.Instance.FindStr(dmGuid, new WxRect(331, 373, 360, 393), "战", WlyColor.Normal))
            {
                DMService.Instance.RepeatLeftClick(dmGuid, new WxPoint(344, 382), 6, 10);
                var view = WlyViewMgr.GetView(WlyViewType.场景_战斗);

                FlowLogicHelper.RepeatRun(() =>
                {
                    if (view.IsCurrentView(dmGuid))
                    {
                        view.Exit(dmGuid);
                        return(true);
                    }

                    return(false);
                }, TimeSpan.FromSeconds(30));
                Thread.Sleep(5000);
            }

            DMService.Instance.LeftClick(dmGuid, new WxPoint(913, 560));
            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.功能_活跃);

            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.功能_游戏助手);

            // 点击开始
            DMService.Instance.LeftClick(dmGuid, new WxPoint(597, 473));

            // 等待结束
            var wait = SpinWait.SpinUntil(() =>
            {
                Thread.Sleep(1000);
                return(DMService.Instance.FindStr(dmGuid, new WxRect(400, 83, 455, 521), "停止执行", WlyColor.White));
            }, TimeSpan.FromMinutes(2));

            DMService.Instance.LeftClick(dmGuid, new WxPoint(496, 519));
            if (!wait)
            {
                return(new WlyTaskInfo(ID, DateTime.Now.AddMinutes(1)));
            }

            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.功能_巡查);

            while (true)
            {
                // 获取剩余巡查次数
                var countRect = new WxRect(463, 447, 498, 464);
                var countStr  = DMService.Instance.GetWords(dmGuid, countRect, "20ef4c-000000");
                var count     = int.Parse(countStr.Split('/')[0]);
                if (count == 0)
                {
                    return(new WlyTaskInfo(ID, true));
                }

                FlowLogicHelper.RepeatRun(() => DMService.Instance.LeftClick(dmGuid, new WxPoint(755, 459), TimeSpan.FromMilliseconds(200)), count);
                if (DMService.Instance.FindStr(dmGuid, new WxRect(479, 344, 519, 364), "确定", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(497, 355));
                }
            }
        }
Exemple #22
0
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            WlyViewMgr.GoTo(dmGuid, WlyViewType.场景_游历);
            var fightView = WlyViewMgr.GetView(WlyViewType.场景_战斗);
            var oldCount  = 0;
            var tryCount  = 0;

            while (true)
            {
                if (DMService.Instance.FindStr(dmGuid, WlyUtilityBiz.GameWndRect, "购买", WlyColor.Normal, out var x, out var y))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(453, 331));
                }

                var countStr = DMService.Instance.GetWords(dmGuid, new WxRect(543, 583, 586, 600), "00ff00-000000");
                if (!string.IsNullOrEmpty(countStr))
                {
                    var count = int.Parse(countStr.Split('/')[0]);
                    if (count == 0)
                    {
                        break;
                    }

                    if (oldCount == count)
                    {
                        tryCount++;
                        if (tryCount >= 10)
                        {
                            throw new InvalidOperationException("可能掉线了游历失败");
                        }
                    }
                    else
                    {
                        oldCount = count;
                        tryCount = 0;
                    }
                }

                if (fightView.IsCurrentView(dmGuid))
                {
                    fightView.Exit(dmGuid);
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(402, 321, 436, 346), "赌场", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(514, 437));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(613, 440));
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(529, 339, 565, 369), "取消", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(547, 352));
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(478, 337, 521, 372), "确定", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(500, 353));
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(471, 410, 515, 442), "确定", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(494, 428));
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(657, 426, 704, 452), "确定", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(681, 438));
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(453, 537, 490, 560), "移动", WlyColor.Normal, WlyColor.White))
                {
                    Thread.Sleep(1000);
                    if (DMService.Instance.FindStr(dmGuid, WlyUtilityBiz.GameWndRect, "购买", WlyColor.Normal, out x, out y))
                    {
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(453, 331));
                    }

                    DMService.Instance.LeftClick(dmGuid, new WxPoint(473, 520), TimeSpan.FromSeconds(2));
                }

                Thread.Sleep(1000);
            }

            return(new WlyTaskInfo(ID, true));
        }
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.功能_仓库);

            var startX = 215;
            var startY = 233;
            var column = 8;
            var row    = 3;
            var width  = 56;
            var height = 56;

            var key = true;

            while (key)
            {
                for (var r = 0; r < row; r++)
                {
                    for (var c = 0; c < column; c++)
                    {
                        var x = startX + (c * width);
                        var y = startY + (r * height);

                        if (DMService.Instance.FindColor(dmGuid, "17201d-000000", new WxRect(new WxPoint(x, y), 10, 10)))
                        {
                            continue;
                        }

                        DMService.Instance.LeftClick(dmGuid, new WxPoint(x, y));
                        if (DMService.Instance.FindStr(dmGuid, new WxRect(438, 259, 468, 277), "仓库", "e9e7cf-000000"))
                        {
                            DMService.Instance.LeftClick(dmGuid, new WxPoint(547, 356));
                            key = false;
                            r   = row;
                            break;
                        }

                        while (WlyEquipMgr.IsEquipment(dmGuid, new WxRect(712, 339, 808, 358)))
                        {
                            DMService.Instance.LeftClick(dmGuid, new WxPoint(412, 419));
                            DMService.Instance.LeftClick(dmGuid, new WxPoint(454, 328));
                        }
                    }
                }

                if (key)
                {
                    for (var count = 0; count < 10; count++)
                    {
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(653, 378), TimeSpan.FromMilliseconds(100));
                    }
                }
            }

            // 退出,重新进入,进行一键领取
            WlyViewMgr.ExitCurrentView(dmGuid, TimeSpan.FromSeconds(5));
            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_仓库);
            DMService.Instance.LeftClick(dmGuid, new WxPoint(startX, startY));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(500, 452));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(500, 452));

            // 将器合成
            DMService.Instance.LeftClick(dmGuid, new WxPoint(609, 159));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(365, 467));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(451, 330));

            return(new WlyTaskInfo(ID, true));
        }
Exemple #24
0
 /// <summary>
 /// 获取主公等级
 /// </summary>
 /// <param name="dmGuid"></param>
 /// <returns></returns>
 public static int GetMainLevel(string dmGuid)
 {
     WlyViewMgr.GoTo(dmGuid, WlyViewType.场景_主界面);
     return(int.Parse(DMService.Instance.GetWords(dmGuid, new WxRect(20, 69, 115, 103), "66ccff-000000").Substring(3)));
 }
Exemple #25
0
        /// <summary>
        /// 挂机线程
        /// </summary>
        private void AutoPlayThread()
        {
            m_run       = true;
            m_final     = true;
            m_isDevelop = false;
            var errorCount = 0;

            // 最外层死循环,进程守护
            while (m_run)
            {
                try
                {
                    // 登录
                    OnDescriptionChanged($"开始登录 {Account}");
                    DMGuid = string.Empty;
                    WlyUtilityBiz.Login(this);

                    // 绑定游戏窗口
                    BindGameWnd();
                    InternalAfterLogin();

                    // 登录成功,等待登录完成
                    OnDescriptionChanged("等待加载完成");
                    WlyViewMgr.GoTo(DMGuid, WlyViewType.场景_主界面, TimeSpan.FromSeconds(2));

                    // 开始挂机
                    m_aliveTime = DateTime.Now;
                    while (m_run)
                    {
                        if (DMService.Instance.GetWindowState(DMGuid, WndHwnd, 0) == 0)
                        {
                            WxLog.Error($"WlyEntity.AutoPlayThread  游戏窗口不存在");
                            break;
                        }

                        WlyTaskRunner runner = null;

                        // 检测是否有可以运行的日常任务
                        if (m_dailyList.Any() && (m_dailyList.First().StartTime < DateTime.Now))
                        {
                            runner = m_dailyList.First();
                            OnDescriptionChanged(runner.Task.MainTitle);
                            CurrentRunner = runner;
                            var info = runner.Task.Run(this);
                            WxLog.Debug($"WlyEntity.AutoPlayThread Name <{this}> Run <{runner.Task}> Result <{info}>");

                            // 无论结果,先进行保存
                            SaveTaskInfo(info);
                            RemoveTaskRunner(runner);
                            if (!info.IsComplete)
                            {
                                // 未完成的任务重新加入,等待下一次运行
                                AddTask(runner.Task, info.NextRunTime);
                            }

                            m_aliveTime = DateTime.Now;
                            continue;
                        }

                        // 检测是否有可以运行的主线任务
                        runner = m_mainList.FirstOrDefault(o => o.StartTime < DateTime.Now);
                        if (runner != null)
                        {
                            OnDescriptionChanged(runner.Task.MainTitle);
                            CurrentRunner = runner;
                            var info = runner.Task.Run(this);

                            // 无论结果,先进行保存
                            SaveTaskInfo(info);
                            RemoveTaskRunner(runner);
                            if (!info.IsComplete)
                            {
                                // 未完成的任务重新加入,等待下一次运行
                                AddTask(runner.Task, info.NextRunTime);
                            }

                            m_aliveTime = DateTime.Now;
                            continue;
                        }

                        CurrentRunner = null;

                        // 运行空闲任务
                        InternalBackupWorkThread();

                        // 超时重启
                        if (DateTime.Now - m_aliveTime > m_restartInterval)
                        {
                            break;
                        }
                    }

                    while (m_finalList.Any(o => o.StartTime < DateTime.Now))
                    {
                        var runner = m_finalList.FirstOrDefault(o => o.StartTime < DateTime.Now);
                        if (runner == null)
                        {
                            break;
                        }

                        OnDescriptionChanged(runner.Task.MainTitle);
                        CurrentRunner = runner;
                        var info = runner.Task.Run(this);
                        WxLog.Debug($"WlyEntity.AutoPlayThread Name <{this}> Run <{runner.Task}> Result <{info}>");

                        // 无论结果,先进行保存
                        SaveTaskInfo(info);
                        m_finalList.Remove(runner);
                        if (!info.IsComplete)
                        {
                            // 未完成的任务重新加入,等待下一次运行
                            AddTask(runner.Task, info.NextRunTime);
                        }

                        m_aliveTime = DateTime.Now;
                    }

                    m_final = false;
                }
                catch (InvalidOperationException ex)
                {
                    WxLog.Error($"WlyEntity.InternalBackupWorkThread Error {ex}");
                    errorCount++;
                    InternalHandleError(errorCount);

                    //CaptureError(ex);
                }
                catch (Exception ex)
                {
                    WxLog.Error($"WlyEntity.AutoPlayThread Error <{ex}>");
                }
                finally
                {
                    CloseProcess();
                }
            }

            WxLog.Debug($"WlyEntity.AutoPlayThread Stopped, Hwnd <{WndHwnd}>, Run <{Run}>");
            OnStopped();
        }
Exemple #26
0
        protected override void InternalAfterLogin()
        {
            SubTaskMgr.Instance.InitEntityTasks(this);
            m_loginFlag = true;

            if (!m_subAccountInfo.Check)
            {
                var wait = FlowLogicHelper.RepeatRun(() =>
                {
                    var view  = WlyViewMgr.GetView(WlyViewType.略_防沉迷验证);
                    var view1 = WlyViewMgr.GetView(WlyViewType.略_跳过);
                    return(DMService.Instance.FindPic(DMGuid, WlyPicType.择国家, WlyUtilityBiz.GameWndRect) || view.IsCurrentView(DMGuid) ||
                           view1.IsCurrentView(DMGuid));
                }, TimeSpan.FromSeconds(30));
                if (wait && DMService.Instance.FindPic(DMGuid, WlyPicType.择国家, WlyUtilityBiz.GameWndRect))
                {
                    CreateRole(AutoPlayerVM.Instance.GetAvailableName());
                }
            }

            WxLog.Debug($"SubEntity.InternalAfterLogin AutoPlay Start <{m_subAccountInfo.Name}>");

            // 先检测主公等级
            var level = WlyUtilityBiz.GetMainLevel(DMGuid);

            if (level > m_subAccountInfo.Level)
            {
                WlyMainLevelMgr.Upgrade(DMGuid);
                m_subAccountInfo.Level = level;
                m_subAccountInfo.Save();
            }

            // 检测银币数量是否到达上限
            var result = WlyUtilityBiz.GetPercent(DMGuid, new WxRect(133, 26, 217, 47), "f3f3da-000000", out var percent);

            if (!result)
            {
                throw new InvalidOperationException("Cannot Get Money Amount");
            }

            // 银币超过上限了,想尽办法进行使用
            if (percent >= 0.9)
            {
                GetEuqipments();
                UpgradeEquipments();
            }

            // 如果可以捐国政了,则捐国政
            var now       = DateTime.Now;
            var timeNotOK = (now.DayOfWeek == DayOfWeek.Sunday) && (now.Hour >= 4) && (now.Hour < 21);

            if ((percent >= 0.5) && (m_subAccountInfo.GetBuildingInfo(WlyBuildingType.主城).Level >= 130) && !timeNotOK)
            {
                // 捐款2600万获取100政绩
                WlyViewMgr.GoTo(DMGuid, WlyViewType.场景_国政);

                // 点开内政
                var wait = FlowLogicHelper.RepeatRun(() =>
                {
                    DMService.Instance.LeftClick(DMGuid, new WxPoint(95, 42));
                    if (DMService.Instance.FindStr(DMGuid, new WxRect(483, 100, 516, 120), "国政", WlyColor.Normal))
                    {
                        return(true);
                    }

                    Thread.Sleep(500);
                    return(false);
                }, TimeSpan.FromSeconds(10));
                if (!wait)
                {
                    throw new InvalidOperationException();
                }

                // 捐款铸造
                DMService.Instance.LeftClick(DMGuid, new WxPoint(560, 270));
                DMService.Instance.LeftClick(DMGuid, new WxPoint(613, 438));
                DMService.Instance.SendString(DMGuid, WndHwnd, "50000000");

                wait = FlowLogicHelper.RepeatRun(() =>
                {
                    if (WlyUtilityBiz.GetAmount(DMGuid, new WxRect(577, 429, 671, 447), "e7e7fd-000000", out var amount))
                    {
                        return(true);
                    }

                    Thread.Sleep(500);
                    return(false);
                }, TimeSpan.FromSeconds(10));
                if (!wait)
                {
                    throw new InvalidOperationException();
                }

                DMService.Instance.LeftClick(DMGuid, new WxPoint(739, 438));
            }

            // 如果可以进行开发,则马上开发并立刻结束
            //if (DevelopTime < DateTime.Now)
            //{
            //    WlyUtilityBiz.GetAmount(DMGuid, new WxRect(133, 26, 217, 47), "f3f3da-000000", out var amount);
            //    if (amount > 500000)
            //    {
            //        DevelopCity();
            //        //Stop();
            //    }
            //}
        }
Exemple #27
0
        /// <summary>
        /// 委派装备
        /// </summary>
        private void GetEuqipments()
        {
            var key = true;

            foreach (var staff in AccountInfo.StaffInfoDict.Values)
            {
                var e = staff.GetEquipInfo(WlyEquipType.战法攻击);
                if (staff.EquipmentRequestDict[e.Type] && (e.EquipLevel < 95))
                {
                    key = false;
                    break;
                }

                e = staff.GetEquipInfo(WlyEquipType.战法防御);
                if (staff.EquipmentRequestDict[e.Type] && (e.EquipLevel < 95))
                {
                    key = false;
                    break;
                }

                e = staff.GetEquipInfo(WlyEquipType.计策防御);
                if (staff.EquipmentRequestDict[e.Type] && (e.EquipLevel < 95))
                {
                    key = false;
                    break;
                }

                e = staff.GetEquipInfo(WlyEquipType.计策攻击);
                if (staff.EquipmentRequestDict[e.Type] && (e.EquipLevel < 95))
                {
                    key = false;
                    break;
                }
            }

            if (key)
            {
                return;
            }

            // 银币十连抽 100次
            WlyViewMgr.GoTo(DMGuid, WlyViewType.功能_委派);

            // 设置自动卖出
            DMService.Instance.LeftClick(DMGuid, new WxPoint(251, 473));
            DMService.Instance.LeftClick(DMGuid, new WxPoint(442, 341));
            DMService.Instance.LeftClick(DMGuid, new WxPoint(493, 395));

            DMService.Instance.LeftClick(DMGuid, new WxPoint(352, 370), TimeSpan.FromSeconds(1));
            if (DMService.Instance.FindStr(DMGuid, new WxRect(434, 340, 476, 367), "确定", WlyColor.Normal))
            {
                DMService.Instance.LeftClick(DMGuid, new WxPoint(462, 316));
                DMService.Instance.LeftClick(DMGuid, new WxPoint(457, 354));
            }

            // 进入委派循环
            for (var i = 0; i < 20; i++)
            {
                // 等待抽取完成
                if (DMService.Instance.FindColor(DMGuid, "f3f3da-000000", new WxRect(404, 460, 461, 481)))
                {
                    DMService.Instance.LeftClick(DMGuid, new WxPoint(390, 472));
                }

                var wait = FlowLogicHelper.RepeatRun(() =>
                {
                    if (DMService.Instance.FindColor(DMGuid, "ffb76f-000000|ffffff-000000", new WxRect(584, 447, 644, 480)))
                    {
                        return(true);
                    }

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

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

                DMService.Instance.LeftClick(DMGuid, new WxPoint(612, 467));
            }

            // 退出
            Thread.Sleep(2000);
            DMService.Instance.LeftClick(DMGuid, new WxPoint(727, 477));
        }
Exemple #28
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 #29
0
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            entity.AccountInfo.Credit = WlyUtilityBiz.GetCreditAmount(dmGuid);
            if (entity.AccountInfo.Credit >= m_amount)
            {
                if (m_amount < 2000000)
                {
                    return(new WlyTaskInfo(ID, true));
                }

                return(new WlyTaskInfo(ID, WlyUtilityBiz.GetRefreshTime()));
            }

            // 尝试从竞技场获取
            if (entity.AccountInfo.FightPoint >= 300)
            {
                WlyViewMgr.GoTo(dmGuid, WlyViewType.场景_竞技场);
                DMService.Instance.LeftClick(dmGuid, new WxPoint(621, 560));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(453, 327));

                var wait = FlowLogicHelper.RepeatRun(() =>
                {
                    if (DMService.Instance.FindStr(dmGuid, new WxRect(576, 437, 607, 457), "兑换", "e9e7cf-000000"))
                    {
                        return(true);
                    }

                    DMService.Instance.LeftClick(dmGuid, new WxPoint(686, 559));
                    return(false);
                }, TimeSpan.FromSeconds(10));

                if (!wait)
                {
                    throw new InvalidOperationException("无法打开兑换界面");
                }

                // 开始兑换
                wait = FlowLogicHelper.RepeatRun(() =>
                {
                    if (DMService.Instance.FindStr(dmGuid, new WxRect(745, 336, 780, 358), "威望", "f3f3da-000000"))
                    {
                        return(true);
                    }

                    DMService.Instance.LeftClick(dmGuid, new WxPoint(389, 229));
                    return(false);
                }, TimeSpan.FromSeconds(10));
                if (!wait)
                {
                    throw new InvalidOperationException("无法兑换威望");
                }

                DMService.Instance.LeftClick(dmGuid, new WxPoint(602, 471));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(602, 471));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(602, 471));
            }

            return(new WlyTaskInfo(ID, WlyUtilityBiz.GetRefreshTime()));
        }
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var now = DateTime.Now;

            if (now.DayOfWeek == DayOfWeek.Sunday && now.Hour >= 4 && now.Hour < 21)
            {
                return(new WlyTaskInfo(ID, DateTime.Now.Add(DateTime.Today.AddHours(21) - now)));
            }

            var dmGuid = entity.DMGuid;

            WlyViewMgr.GoTo(dmGuid, WlyViewType.场景_国政);

            // 点开国库
            var wait = FlowLogicHelper.RepeatRun(() =>
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(97, 194));
                if (DMService.Instance.FindStr(dmGuid, new WxRect(483, 100, 516, 120), "国政", WlyColor.Normal))
                {
                    return(true);
                }

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

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

            Thread.Sleep(1000);
            var result = WlyUtilityBiz.GetAmount(dmGuid, new WxRect(635, 433, 672, 450), "ffff99-000000", out var amount);

            if (!result)
            {
                return(new WlyTaskInfo(ID, DateTime.Now.AddHours(1)));
            }

            var wish  = (WlyUtilityBiz.GetRefreshTime() - DateTime.Now).Hours * 20;
            var count = Math.Min((1000 - amount - wish) / 2, 10);

            count = Math.Max(0, count);

            // 点击加号开始捐献
            for (var i = 0; i < count; i++)
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(653, 470));
                if (DMService.Instance.FindStr(dmGuid, new WxRect(531, 278, 562, 304), "不足", "e9e7cf-000000"))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(501, 332));
                    break;
                }

                if (DMService.Instance.FindStr(dmGuid, new WxRect(437, 343, 473, 364), "确定", WlyColor.Normal))
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(459, 312));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(452, 357));
                }
            }

            // 领取官职奖励
            DMService.Instance.LeftClick(dmGuid, new WxPoint(373, 162));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(746, 477));

            return(new WlyTaskInfo(ID, true));
        }