Esempio n. 1
0
        /// <summary>
        /// 获取军令数量
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <returns></returns>
        public static int GetPoint(string dmGuid)
        {
            // 首先跳转到主界面
            WlyViewMgr.GoTo(dmGuid, WlyViewType.场景_主界面);
            var pointRect = new WxRect(119, 106, 163, 123);
            var words     = string.Empty;
            var wait      = FlowLogicHelper.RepeatRun(() =>
            {
                words = DMService.Instance.GetWords(dmGuid, pointRect, "f3f3da-202020");
                return(!string.IsNullOrEmpty(words));
            }, TimeSpan.FromSeconds(20));

            if (!wait)
            {
                throw new InvalidOperationException("无法获取军令信息");
            }

            var result = int.TryParse(words.Split('/')[0], out var point);

            if (!result)
            {
                WxLog.Debug($"WlyUtilityBiz.GetPoint  <{words}>");
                return(0);
            }

            return(point);
        }
Esempio n. 2
0
        /// <summary>
        /// 获取占比
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="rect"></param>
        /// <param name="color"></param>
        /// <param name="percent"></param>
        /// <returns></returns>
        public static bool GetPercent(string dmGuid, WxRect rect, string color, out double percent)
        {
            percent = 0;
            var    amountStr = DMService.Instance.GetWords(dmGuid, rect, color);
            string currentStr;
            string totalStr;

            if (amountStr.Contains("/"))
            {
                var index = amountStr.IndexOf("/", StringComparison.Ordinal);
                currentStr = amountStr.Substring(0, index);
                totalStr   = amountStr.Substring(index + 1, amountStr.Length - index - 1);
            }
            else
            {
                return(false);
            }

            var result = WordToAmount(currentStr, out var current);

            if (!result)
            {
                return(false);
            }

            result = WordToAmount(totalStr, out var total);
            if (!result)
            {
                return(false);
            }

            percent = current / (double)total;
            return(true);
        }
Esempio n. 3
0
        /// <summary>
        /// 获取指定矩形中时间
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="timeRect"></param>
        /// <param name="color"></param>
        /// <returns></returns>
        public static TimeSpan GetTime(string dmGuid, WxRect timeRect, string color)
        {
            var timeStr = DMService.Instance.GetWords(dmGuid, timeRect, color);
            var result  = TimeSpan.TryParseExact(timeStr, new[] { @"hh\:mm\:ss", @"mm\:ss", @"h\:mm\:ss" }, null, out var time);

            return(result ? time : TimeSpan.Zero);
        }
Esempio n. 4
0
        /// <summary>
        /// 在指定范围内寻找图片
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="key">资源键值</param>
        /// <param name="rect"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public bool FindPic(string dmGuid, object key, WxRect rect, out int x, out int y)
        {
            if (!m_picResources.ContainsKey(key))
            {
                x = -1;
                y = -1;
                WxLog.Debug($"DMService.FindPic No Pic Resource With Key <{key}>");
                return(false);
            }

            var dm       = GetDM(dmGuid);
            var resource = m_picResources[key];
            var result   = dm.FindPicMem(rect.Left, rect.Top, rect.Right, rect.Bottom, resource.Info, "202020", 0.8, 0, out var xx, out var yy);

            if (result > -1)
            {
                x = (int)xx;
                y = (int)yy;
                return(true);
            }

            x = -1;
            y = -1;
            return(false);
        }
Esempio n. 5
0
        /// <summary>
        /// 截图
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="rect"></param>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public bool Capture(string dmGuid, WxRect rect, string filePath)
        {
            var dm     = GetDM(dmGuid);
            var result = dm.Capture(rect.Left, rect.Top, rect.Right, rect.Bottom, filePath);

            return(result == 1);
        }
Esempio n. 6
0
        /// <summary>
        /// 获取威望数量
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <returns></returns>
        public static int GetCreditAmount(string dmGuid)
        {
            // 首先跳转到主界面
            WlyViewMgr.GoTo(dmGuid, WlyViewType.场景_主界面);
            var rect   = new WxRect(276, 73, 323, 90);
            var result = GetAmount(dmGuid, rect, "e9e7cf-000000", out var amount);

            return(amount);
        }
        /// <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));
        }
Esempio n. 8
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(400);

            // 获取剩余次数
            var countRect = new WxRect(614, 424, 634, 442);

            if (WlyUtilityBiz.GetAmount(dmGuid, countRect, WlyColor.Normal, out var count) && (count == 0))
            {
                WlyViewMgr.ExitCurrentView(dmGuid, TimeSpan.FromSeconds(30));
                return(new WlyTaskInfo(ID, true));
            }

            // 开始一键探险
            DMService.Instance.LeftClick(dmGuid, new WxPoint(567, 392));
            var wait = SpinWait.SpinUntil(() =>
            {
                Thread.Sleep(1000);
                return(DMService.Instance.FindStr(dmGuid, new WxRect(549, 487, 587, 513), "扫荡", WlyColor.Normal));
            }, TimeSpan.FromSeconds(10));

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

            // 勾上选项
            DMService.Instance.LeftClick(dmGuid, new WxPoint(422, 214));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(439, 237));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(423, 420));
            //DMService.Instance.LeftClick(dmGuid, new WxPoint(421, 444));

            // 开始扫荡
            DMService.Instance.LeftClick(dmGuid, new WxPoint(557, 501));

            // 等待扫荡结束
            wait = SpinWait.SpinUntil(() =>
            {
                Thread.Sleep(1000);
                return(DMService.Instance.FindStr(dmGuid, new WxRect(447, 477, 515, 501), "已完成全部", "ff3300-000000"));
            }, TimeSpan.FromSeconds(60));
            if (!wait)
            {
                return(new WlyTaskInfo(ID, DateTime.Now.AddMinutes(1)));
            }

            // 完成古城探秘
            DMService.Instance.LeftClick(dmGuid, new WxPoint(763, 126));
            Thread.Sleep(400);
            WlyViewMgr.ExitCurrentView(dmGuid, TimeSpan.FromSeconds(30));
            return(new WlyTaskInfo(ID, DateTime.Now));
        }
Esempio n. 9
0
        /// <summary>
        /// 获取指定矩形块中的数字
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="amountRect"></param>
        /// <param name="color"></param>
        /// <param name="amount"></param>
        /// <returns></returns>
        public static bool GetAmount(string dmGuid, WxRect amountRect, string color, out int amount)
        {
            var amountStr = DMService.Instance.GetWords(dmGuid, amountRect, color);

            if (amountStr.Contains("/"))
            {
                amountStr = amountStr.Substring(0, amountStr.IndexOf("/", StringComparison.Ordinal));
            }

            return(WordToAmount(amountStr, out amount));
        }
Esempio n. 10
0
        /// <summary>
        /// 获取指定范围内指定颜色的字
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="rect"></param>
        /// <param name="color"></param>
        /// <param name="index"></param>
        /// <returns></returns>
        public string GetWords(string dmGuid, WxRect rect, string color, int index = 0)
        {
            var dm        = GetDM(dmGuid);
            var resultStr = dm.GetWords(rect.Left, rect.Top, rect.Right, rect.Bottom, color, 1);

            if (!string.IsNullOrEmpty(resultStr))
            {
                return(dm.GetWordResultStr(resultStr, index));
            }

            return(string.Empty);
        }
Esempio n. 11
0
        /// <summary>
        /// 获取指定区域中文字所属的品质
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="rect"></param>
        /// <returns></returns>
        public static WlyQualityType GetQuality(string dmGuid, WxRect rect)
        {
            foreach (var pair in _qualityMap)
            {
                if (DMService.Instance.FindColor(dmGuid, pair.Value, rect))
                {
                    return(pair.Key);
                }
            }

            return(WlyQualityType.Unknow);
        }
Esempio n. 12
0
        /// <summary>
        /// 判断是否为当前界面
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <returns></returns>
        public override bool IsCurrentView(string dmGuid)
        {
            var rect = new WxRect(436, 563, 566, 594);
            var word = DMService.Instance.GetWords(dmGuid, rect, "ffffcc-000000");

            if (word.Contains("Wly副本"))
            {
                return(true);
            }

            return(DMService.Instance.FindStr(dmGuid, rect, "势力", "ffffcc-000000"));
        }
Esempio n. 13
0
        /// <summary>
        /// 抓取指定的文字
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="rect"></param>
        /// <param name="color"></param>
        /// <param name="word"></param>
        /// <param name="index"></param>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public bool FetchWords(string dmGuid, WxRect rect, string color, string word, int index, string filePath)
        {
            var dm     = GetDM(dmGuid);
            var info   = dm.FetchWord(rect.Left, rect.Top, rect.Right, rect.Bottom, color, word);
            var result = dm.AddDict(index, info);

            if (result == 1)
            {
                return(dm.SaveDict(index, filePath) == 1);
            }

            return(false);
        }
Esempio n. 14
0
        /// <summary>
        /// 获取兵种类型
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="rect"></param>
        /// <returns></returns>
        public static WlySoldierType GetStaffType(string dmGuid, WxRect rect)
        {
            var str = DMService.Instance.GetWords(dmGuid, rect, "ffffff-000000|b3ad9d-000000");

            if (string.IsNullOrEmpty(str))
            {
                return(WlySoldierType.Unkonwn);
            }

            var result = Enum.TryParse <WlySoldierType>(str, out var type);

            return(result ? type : WlySoldierType.Unkonwn);
        }
Esempio n. 15
0
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_卖粮);

            // 读取粮价
            var priceRect = new WxRect(386, 211, 479, 232);
            var priceStr  = string.Empty;
            var wait      = FlowLogicHelper.RepeatRun(() =>
            {
                priceStr = DMService.Instance.GetWords(dmGuid, priceRect, "e9e7cf-000000");
                return(!string.IsNullOrEmpty(priceStr));
            }, TimeSpan.FromSeconds(10));

            if (!wait)
            {
                throw new InvalidOperationException("无法读取当前粮价");
            }

            var info = WlyUtilityBiz.SystemInfo;

            info.FoodPriceDescription = $"{priceStr} [{DateTime.Now:yyyy-MM-dd HH:mm:ss}]";
            if (double.TryParse(priceStr.Split('(')[0], out var price))
            {
                info.FoodPrice = price;
            }

            // 如果达到最高价则卖粮
            if (price >= 1.8)
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(760, 343));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(762, 377));
            }

            if (price <= 0.65)
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(759, 421));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(761, 454));
                return(new WlyTaskInfo(ID, DateTime.Now.AddMinutes(9)));
            }

            var now      = DateTime.Now;
            var flag     = DateTime.Today.AddHours(now.Hour).AddMinutes(30);
            var nextTime = now < flag?flag.AddMinutes(1) : flag.AddMinutes(31);

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

            WlyViewMgr.GoTo(dmGuid, WlyViewType.场景_主界面);

            var rect = new WxRect(99, 253, 134, 275);

            if (!FlowLogicHelper.RepeatRun(() =>
            {
                DMService.Instance.LeftDown(dmGuid, new WxPoint(89, 225));

                return(DMService.Instance.FindStr(dmGuid, rect, "开通", "ff8c00-000000") ||
                       DMService.Instance.FindStr(dmGuid, rect, "空闲", "1fed4a-000000"));
            }, TimeSpan.FromSeconds(10)))
            {
                throw new InvalidOperationException("无法开通");
            }

            if (DMService.Instance.FindStr(dmGuid, rect, "开通", "ff8c00-000000"))
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(116, 263));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(455, 355));
                DMService.Instance.LeftUp(dmGuid, new WxPoint(89, 225));
            }

            Thread.Sleep(2000);
            rect = new WxRect(99, 273, 134, 299);
            if (!FlowLogicHelper.RepeatRun(() =>
            {
                DMService.Instance.LeftDown(dmGuid, new WxPoint(89, 225));

                return(DMService.Instance.FindStr(dmGuid, rect, "开通", "ff8c00-000000") ||
                       DMService.Instance.FindStr(dmGuid, rect, "空闲", "1fed4a-000000"));
            }, TimeSpan.FromSeconds(10)))
            {
                throw new InvalidOperationException("无法开通");
            }

            if (DMService.Instance.FindStr(dmGuid, rect, "开通", "ff8c00-000000"))
            {
                DMService.Instance.LeftClick(dmGuid, new WxPoint(118, 285));
                DMService.Instance.LeftClick(dmGuid, new WxPoint(455, 355));
                DMService.Instance.LeftUp(dmGuid, new WxPoint(89, 225));
            }

            return(new WlyTaskInfo(ID, true));
        }
Esempio n. 17
0
        /// <summary>
        /// 寻找指定颜色的字
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="rect"></param>
        /// <param name="target"></param>
        /// <param name="color"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public bool FindStr(string dmGuid, WxRect rect, string target, string color, out int x, out int y)
        {
            var dm   = GetDM(dmGuid);
            var find = dm.FindStr(rect.Left, rect.Top, rect.Right, rect.Bottom, target, color, 1, out var xx, out var yy);

            if (find > -1)
            {
                x = (int)xx;
                y = (int)yy;
                return(true);
            }

            x = -1;
            y = -1;
            return(false);
        }
Esempio n. 18
0
        /// <summary>
        /// 找寻指定的颜色
        /// </summary>
        /// <param name="color"></param>
        /// <param name="rect"></param>
        /// <param name="dmGuid"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        public bool FindColor(string color, WxRect rect, string dmGuid, out int x, out int y)
        {
            var dm = GetDM(dmGuid);

            var result = dm.FindColor(rect.Left, rect.Top, rect.Right, rect.Bottom, color, 1, 1, out var xx, out var yy);

            if (result > 0)
            {
                x = (int)xx;
                y = (int)yy;
                return(true);
            }

            x = -1;
            y = -1;
            return(false);
        }
Esempio n. 19
0
        /// <summary>
        /// 在指定范围内找寻所有符合条件的图片
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="key"></param>
        /// <param name="rect"></param>
        /// <returns></returns>
        public IEnumerable <WxPoint> FindPics(string dmGuid, object key, WxRect rect)
        {
            var dm     = GetDM(dmGuid);
            var result = dm.FindPicMemEx(rect.Left, rect.Top, rect.Right, rect.Bottom, m_picResources[key].Info, "202020", 0.8, 0);

            if (string.IsNullOrEmpty(result))
            {
                return(Enumerable.Empty <WxPoint>());
            }

            IList <WxPoint> list = new List <WxPoint>();

            foreach (var p in result.Split('|'))
            {
                var ps = p.Split(',');
                list.Add(new WxPoint(int.Parse(ps[1]), int.Parse(ps[2])));
            }

            return(list);
        }
Esempio n. 20
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)
            });
        }
Esempio n. 21
0
        /// <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));
                }
            }
        }
Esempio n. 22
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));
        }
Esempio n. 23
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);
        }
Esempio n. 24
0
        /// <summary>
        /// 获得当前部位的类型
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="rect"></param>
        /// <returns></returns>
        private static WlyEquipType GetEquipTypeCore(string dmGuid, WxRect rect)
        {
            var index = DMService.Instance.FindStrEx(dmGuid, rect, _equipStr, "f3f3da-000000");

            return((WlyEquipType)int.Parse(index[0].ToString()));
        }
Esempio n. 25
0
 /// <summary>
 /// 判断是否为一件装备
 /// </summary>
 /// <param name="dmGuid"></param>
 /// <param name="rect"></param>
 /// <returns></returns>
 public static bool IsEquipment(string dmGuid, WxRect rect)
 {
     return(DMService.Instance.FindStr(dmGuid, rect, _equipStr, "f3f3da-000000"));
 }
Esempio n. 26
0
 /// <summary>
 /// 找寻指定的颜色
 /// </summary>
 /// <param name="dmGuid"></param>
 /// <param name="color"></param>
 /// <param name="rect"></param>
 /// <returns></returns>
 public bool FindColor(string dmGuid, string color, WxRect rect)
 {
     return(FindColor(color, rect, dmGuid, out var _, out var _));
 }
Esempio n. 27
0
        /// <summary>
        /// 寻找指定颜色的字
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="rect"></param>
        /// <param name="target"></param>
        /// <param name="colors"></param>
        /// <returns></returns>
        public bool FindStr(string dmGuid, WxRect rect, string target, params string[] colors)
        {
            var color = string.Join("|", colors);

            return(FindStr(dmGuid, rect, target, color, out var _, out var _));
        }
Esempio n. 28
0
        /// <summary>
        /// 找字扩展
        /// </summary>
        /// <param name="dmGuid"></param>
        /// <param name="rect"></param>
        /// <param name="target"></param>
        /// <param name="color"></param>
        /// <returns></returns>
        public string FindStrEx(string dmGuid, WxRect rect, string target, string color)
        {
            var dm = GetDM(dmGuid);

            return(dm.FindStrEx(rect.Left, rect.Top, rect.Right, rect.Bottom, target, color, 1));
        }
Esempio n. 29
0
 /// <summary>
 /// 寻找指定颜色的字
 /// </summary>
 /// <param name="dmGuid"></param>
 /// <param name="rect"></param>
 /// <param name="target"></param>
 /// <param name="color"></param>
 /// <returns></returns>
 public bool FindStr(string dmGuid, WxRect rect, string target, string color)
 {
     return(FindStr(dmGuid, rect, target, color, out var _, out var _));
 }
Esempio n. 30
0
 /// <summary>
 /// 在指定范围内寻找图片
 /// </summary>
 /// <param name="dmGuid"></param>
 /// <param name="key"></param>
 /// <param name="rect"></param>
 /// <returns></returns>
 public bool FindPic(string dmGuid, object key, WxRect rect)
 {
     return(FindPic(dmGuid, key, rect, out var _, out var _));
 }