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

            WlyStaffMgr.Evolve(m_staff, dmGuid);
            return(new WlyTaskInfo(ID, true));
        }
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid       = entity.DMGuid;
            var level        = Math.Min(m_level, entity.AccountInfo.GetBuildingInfo(WlyBuildingType.主城).Level);
            var currentLevel = WlyStaffMgr.GetStaffLevel(dmGuid, m_staff);
            var growLevel    = WlyStaffMgr.GetStaffGrowLevel(dmGuid, m_staff);

            if (growLevel > level && currentLevel >= level)
            {
                return(new WlyTaskInfo(ID, true));
            }

            // 先尝试一键突飞
            WlyStaffMgr.PractiseStaff(m_staff, dmGuid);
            WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_训练);
            WlyUtilityBiz.SelectStaffInList(dmGuid, m_staff);
            DMService.Instance.LeftClick(dmGuid, new WxPoint(376, 465));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(418, 398));


            // 如果转生等级大于需求等级,则突飞到需求等级,然后完成培养
            if (growLevel > level)
            {
                //WlyStaffMgr.Upgrade(m_staff, level, dmGuid);
                //var l = entity.AccountInfo.GetStaffInfo(m_staff).Level = WlyStaffMgr.GetStaffLevel(dmGuid, m_staff);

                //if (l == level)
                //{
                //    return new WlyTaskInfo(ID, true);
                //}

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

            // 如果离转生等级较近则突飞到指定等级
            if ((currentLevel + 10 >= growLevel) && (currentLevel < growLevel))
            {
                WlyStaffMgr.Upgrade(m_staff, growLevel, dmGuid);
            }
            else
            {
                WlyStaffMgr.PractiseStaff(m_staff, dmGuid);
            }

            // 转生
            WlyStaffMgr.Grow(dmGuid, m_staff);
            entity.AccountInfo.GetStaffInfo(m_staff).Level     = WlyStaffMgr.GetStaffLevel(dmGuid, m_staff);
            entity.AccountInfo.GetStaffInfo(m_staff).GrowLevel = WlyStaffMgr.GetStaffGrowLevel(dmGuid, m_staff);

            return(new WlyTaskInfo(ID, DateTime.Now.Add(TimeSpan.FromHours(10))));
        }
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;
            var result = WlyStaffMgr.GetStaff(dmGuid, m_staff);

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

            entity.AccountInfo.AddStaffInfo(m_staff);

            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;

            // 武将除名
            entity.AccountInfo.RemoveStaffInfo(m_staff);

            // 首先卸载武将全部的装备
            WlyEquipMgr.UnequipStaff(dmGuid, m_staff);

            // 武将下野
            if (WlyStaffMgr.ThrowStaff(dmGuid, m_staff))
            {
                return(new WlyTaskInfo(ID, true));
            }

            return(new WlyTaskInfo(ID, WlyUtilityBiz.GetRefreshTime()));
        }
Exemple #5
0
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;
            var staff  = entity.AccountInfo.GetStaffInfo(m_staff);

            if (staff.Quality >= m_quality)
            {
                return(new WlyTaskInfo(ID, true));
            }

            WlyStaffMgr.EnvolveStaff(dmGuid, m_staff, m_quality);
            staff.Quality = WlyStaffMgr.GetStaffQuality(dmGuid, m_staff);
            if (staff.Quality >= m_quality)
            {
                return(new WlyTaskInfo(ID, true));
            }

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

            staff.Level = WlyStaffMgr.GetStaffLevel(dmGuid, m_staff);
            if (staff.Level < m_level)
            {
                WlyStaffMgr.Upgrade(m_staff, m_level, dmGuid);
                staff.Level = WlyStaffMgr.GetStaffLevel(dmGuid, m_staff);
            }

            if (staff.Level < m_level)
            {
                return(new WlyTaskInfo(ID, WlyUtilityBiz.GetRefreshTime()));
            }

            return(new WlyTaskInfo(ID, true));
        }
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(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);
                }
            }

            WlyEntityBiz.ClearEquipments(entity);
            //WlyEntityBiz.UpgradeAllEquipmenets(entity);
            return(new WlyTaskInfo(ID, true));
        }
Exemple #8
0
        /// <summary>
        /// 清理仓库里的装备
        /// </summary>
        /// <param name="entity"></param>
        public static void ClearEquipments(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));
            }

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

            // 清理仓库
            IList <Tuple <WlyStaffType, WlyEquipType> > list = new List <Tuple <WlyStaffType, WlyEquipType> >();
            var sell = false;
            var key  = true;

            WlyUtilityBiz.GetAmount(dmGuid, new WxRect(302, 443, 341, 465), "f3f3da-000000", out var cap);
            var amount = 0;

            var wait = FlowLogicHelper.RepeatRun(() =>
            {
                for (var r = 0; r < row; r++)
                {
                    if (amount > cap)
                    {
                        return(true);
                    }

                    for (var c = 0; c < column; c++)
                    {
                        amount++;
                        if (amount > cap)
                        {
                            return(true);
                        }

                        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(532, 345, 563, 365), "取消", WlyColor.Normal))
                        {
                            DMService.Instance.LeftClick(dmGuid, new WxPoint(547, 356));
                            key = false;
                            r   = row;
                            break;
                        }

                        // 使用物品
                        if (!FlowLogicHelper.RepeatRun(() =>
                        {
                            if (DMService.Instance.FindStr(dmGuid, new WxRect(484, 408, 519, 433), "使用", WlyColor.Normal, WlyColor.White))
                            {
                                DMService.Instance.LeftClick(dmGuid, new WxPoint(499, 417));
                                return(false);
                            }

                            return(true);
                        }, TimeSpan.FromSeconds(20)))
                        {
                            throw new InvalidOperationException("使用物品失败");
                        }

                        // 出售装备
                        while (WlyEquipMgr.IsEquipment(dmGuid, new WxRect(712, 339, 808, 358)))
                        {
                            var equipInfo = WlyEquipMgr.GetEquipInfo(dmGuid);
                            var flag      = false;
                            foreach (var staff in entity.AccountInfo.StaffInfoDict.Values)
                            {
                                var currentInfo = staff.GetEquipInfo(equipInfo.Type);
                                if ((equipInfo.Quality > currentInfo.Quality) ||
                                    ((equipInfo.Quality == currentInfo.Quality) && (equipInfo.EquipLevel > currentInfo.EquipLevel)))
                                {
                                    flag = true;
                                    if ((equipInfo.EquipLevel <= staff.Level) &&
                                        (list.FirstOrDefault(o => (o.Item1 == staff.Name) && (o.Item2 == equipInfo.Type)) == null))
                                    {
                                        list.Add(new Tuple <WlyStaffType, WlyEquipType>(staff.Name, equipInfo.Type));
                                    }

                                    break;
                                }
                            }

                            if (flag)
                            {
                                break;
                            }

                            sell = true;
                            if (DMService.Instance.FindStr(dmGuid, new WxRect(473, 406, 536, 430), "一键降级", WlyColor.Normal))
                            {
                                DMService.Instance.LeftClick(dmGuid, new WxPoint(500, 416));
                                DMService.Instance.LeftClick(dmGuid, new WxPoint(454, 328));
                            }

                            DMService.Instance.LeftClick(dmGuid, new WxPoint(412, 419));
                            DMService.Instance.LeftClick(dmGuid, new WxPoint(454, 328));
                        }

                        // 出售将器
                        if (!FlowLogicHelper.RepeatRun(() =>
                        {
                            if (DMService.Instance.FindStr(dmGuid, new WxRect(761, 361, 796, 384), "单挑", "ff0000-000000"))
                            {
                                DMService.Instance.LeftClick(dmGuid, new WxPoint(412, 419));
                                DMService.Instance.LeftClick(dmGuid, new WxPoint(454, 328));
                                return(false);
                            }

                            return(true);
                        }, TimeSpan.FromSeconds(20)))
                        {
                            throw new InvalidOperationException("出售将器失败");
                        }
                    }
                }

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

                return(!key);
            }, TimeSpan.FromSeconds(30));

            if (!wait)
            {
                throw new InvalidOperationException("清理仓库超时");
            }

            if (!sell && !list.Any())
            {
                return;
            }

            // 退出,重新进入,进行一键领取
            DMService.Instance.LeftClick(dmGuid, new WxPoint(startX, startY));

            // 尝试领取等级礼包
            if (DMService.Instance.FindStr(dmGuid, new WxRect(713, 315, 807, 334), "主城", "f3f3da-000000"))
            {
                FlowLogicHelper.RunToTarget(() =>
                {
                    var levelStr = DMService.Instance.GetWords(dmGuid, new WxRect(713, 315, 807, 334), "e9e7cf-000000");
                    return(int.Parse(levelStr.Substring(0, levelStr.Length - 1)));
                }, current => current > entity.AccountInfo.GetBuildingInfo(WlyBuildingType.主城).Level, () =>
                {
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(497, 417));
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(499, 424), TimeSpan.FromSeconds(2));
                });
            }

            DMService.Instance.LeftClick(dmGuid, new WxPoint(500, 452));
            DMService.Instance.LeftClick(dmGuid, new WxPoint(500, 452));

            if (list.Any())
            {
                foreach (var group in list.GroupBy(o => o.Item1))
                {
                    var staff = entity.AccountInfo.GetStaffInfo(group.Key);
                    staff.Level = WlyStaffMgr.GetStaffLevel(dmGuid, group.Key);
                    foreach (var tuple in group)
                    {
                        WlyEquipMgr.ChangeEquipmenet(dmGuid, tuple.Item1, tuple.Item2, staff.Level);
                        staff.SaveEquipInfo(WlyEquipMgr.GetStaffEquipInfo(dmGuid, staff.Name, tuple.Item2));
                    }
                }

                entity.AccountInfo.Save();

                // 进行递归
                ClearEquipments(entity);
            }
        }
Exemple #9
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();
        }
        /// <summary>
        /// 执行任务
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        protected override WlyTaskInfo InternalRun(WlyEntity entity)
        {
            var dmGuid = entity.DMGuid;

            foreach (var staff in entity.AccountInfo.StaffInfoDict.Values)
            {
                if (staff.CurrentType != staff.TargetType)
                {
                    WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_武将);
                    WlyUtilityBiz.SelectStaffInList(dmGuid, staff.Name);
                    staff.CurrentType = WlyStaffMgr.GetStaffType(dmGuid, new WxRect(322, 283, 414, 307));
                    if (staff.CurrentType == staff.TargetType)
                    {
                        continue;
                    }

                    staff.CurrentType = WlyStaffMgr.GetStaffType(dmGuid, new WxRect(430, 283, 496, 307));
                    if (staff.CurrentType == staff.TargetType)
                    {
                        continue;
                    }

                    if (staff.CurrentType <= WlySoldierType.巫术师 && staff.TargetType > WlySoldierType.巫术师 && staff.CurrentType != WlySoldierType.Unkonwn)
                    {
                        WlyStaffMgr.Evolve(staff.Name, dmGuid);
                        WlyViewMgr.GoTo(dmGuid, WlyViewType.功能_武将);
                        WlyUtilityBiz.SelectStaffInList(dmGuid, staff.Name);
                    }

                    DMService.Instance.LeftClick(dmGuid, new WxPoint(368, 342));

                    // 等待界面打开
                    var wait = FlowLogicHelper.RepeatRun(() =>
                    {
                        if (DMService.Instance.FindStr(dmGuid, new WxRect(498, 139, 529, 162), "兵种", WlyColor.Normal))
                        {
                            return(true);
                        }

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

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

                    while (true)
                    {
                        var nt = WlyStaffMgr.GetStaffType(dmGuid, new WxRect(348, 399, 417, 421));
                        if (nt == staff.TargetType)
                        {
                            DMService.Instance.LeftClick(dmGuid, new WxPoint(385, 471));
                            break;
                        }

                        nt = WlyStaffMgr.GetStaffType(dmGuid, new WxRect(436, 399, 513, 426));
                        if (nt == staff.TargetType)
                        {
                            DMService.Instance.LeftClick(dmGuid, new WxPoint(385, 471));
                            break;
                        }

                        // 点击重修
                        DMService.Instance.LeftClick(dmGuid, new WxPoint(507, 469));

                        // 确认重修花费
                        var cost = 100;

                        wait = FlowLogicHelper.RepeatRun(() =>
                        {
                            if (DMService.Instance.FindStr(dmGuid, new WxRect(495, 249, 530, 281), "免费", "ff6600-000000"))
                            {
                                cost = 0;
                            }
                            else
                            {
                                var w = FlowLogicHelper.RepeatRun(() =>
                                {
                                    var costStr = DMService.Instance.GetWords(dmGuid, new WxRect(510, 253, 574, 283), "ff6600-000000");
                                    if (string.IsNullOrEmpty(costStr) || !costStr.Contains("金币"))
                                    {
                                        Thread.Sleep(500);
                                        return(false);
                                    }

                                    var index = costStr.IndexOf("金币", StringComparison.Ordinal);
                                    cost      = int.Parse(costStr.Substring(0, index));
                                    return(true);
                                }, TimeSpan.FromSeconds(2));

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

                            return(true);
                        }, TimeSpan.FromSeconds(10));
                        if (!wait)
                        {
                            throw new InvalidOperationException();
                        }

                        if (cost <= 10)
                        {
                            DMService.Instance.LeftClick(dmGuid, new WxPoint(454, 353));
                        }
                        else
                        {
                            // 今日重修完成
                            DMService.Instance.LeftClick(dmGuid, new WxPoint(546, 353));
                            DMService.Instance.LeftClick(dmGuid, new WxPoint(627, 467));
                            return(new WlyTaskInfo(ID, true));
                        }
                    }

                    // 点击退出
                    DMService.Instance.LeftClick(dmGuid, new WxPoint(627, 467));

                    // 追加确认兵种重修结果
                    WlyUtilityBiz.SelectStaffInList(dmGuid, staff.Name);
                    staff.CurrentType = WlyStaffMgr.GetStaffType(dmGuid, new WxRect(322, 283, 414, 307));
                    if (staff.CurrentType == staff.TargetType)
                    {
                        continue;
                    }

                    staff.CurrentType = WlyStaffMgr.GetStaffType(dmGuid, new WxRect(430, 283, 496, 307));
                }
            }

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