| | |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Threading; |
| | | using static RichCreator.Utility.CV.GroupCVHelper; |
| | | using RichCreator.StateMachines; |
| | | |
| | | namespace RichCreator.Maps |
| | | { |
| | |
| | | |
| | | public CancellationToken cancellationToken { get; set; } |
| | | |
| | | private const bool isCreateGroup = false; |
| | | private const bool isCreateGroup = true; |
| | | |
| | | public override bool Start(ZTRectangle gameRect, CancellationToken cancelToken, Int32 runningStep) |
| | | { |
| | |
| | | this.cancellationToken = cancelToken; |
| | | |
| | | WindowUtils.SetDnfToTop(); |
| | | |
| | | |
| | | ChannelStateMachine csm = new ChannelStateMachine(); |
| | | ZTResult workResult = csm.Work(this.GameRect, true, cancelToken, 5 * 60 * 1000); |
| | | if (workResult != ZTResult.Success) |
| | | { |
| | | G.Instance.InfoWriter("切换频道没有成功,"+workResult); |
| | | Thread.Sleep(5 * 60 * 1000); |
| | | return false; |
| | | } |
| | | G.Instance.InfoWriter("切换频道成功,开始组队逻辑"); |
| | | |
| | | string groupName = "aabbccddee"; |
| | | if (isCreateGroup) |
| | | { |
| | |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | |
| | | //沉默一段时间 |
| | | Thread.Sleep(50000000); |
| | | CloseAllAlertWindow(this.cancellationToken, this.GameRect); |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 切换频道 |
| | | /// </summary> |
| | | /// <param name="channelItem"></param> |
| | | /// <returns></returns> |
| | | private bool ChangeChannel(ChannelItem channelItem) |
| | | { |
| | | |
| | | return true; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 创建队伍 |
| | | /// 创建队伍 |
| | | /// </summary> |
| | | /// <returns></returns> |
| | | private bool CreateGroup(string groupName) |
| | |
| | | }); |
| | | if (result) |
| | | { |
| | | G.Instance.InfoWriter("group ok"); |
| | | return true; |
| | | G.Instance.InfoWriter("create group ok"); |
| | | //点击组队“确定”按钮 |
| | | result = FuncUtils.TimeoutCancelableWrap(15 * 60 * 1000,this.cancellationToken, () => { |
| | | ZTPoint yes = ZTPoint.Empty; |
| | | ZTPoint no = ZTPoint.Empty; |
| | | bool retFind = GroupCVHelper.FindYaoqingZuduiWindow(out yes, out no, this.GameRect); |
| | | if (retFind) |
| | | { |
| | | G.Instance.InputControl.MoveToAndClick(yes); |
| | | G.Instance.InfoWriter("other join group ok:"+yes); |
| | | } |
| | | return retFind; |
| | | }); |
| | | |
| | | |
| | | return result; |
| | | } |
| | | return false; |
| | | } |
| | |
| | | G.Instance.InfoWriter("group item not finded"); |
| | | return true; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | //点组名打开窗口 |
| | | G.Instance.InputControl.MoveToAndClick(groupItemRect.GetCenterPoint()); |
| | | |
| | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 打开技能窗 |
| | | /// 打开组队窗 |
| | | /// </summary> |
| | | /// <param name="titleRect"></param> |
| | | /// <param name="lvRect"></param> |
| | |
| | | G.Instance.InfoWriter("打开创建队伍信息对话框失败"); |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | |
| | | /// <summary> |
| | | /// 关闭所有弹出窗 |
| | | /// </summary> |
| | |
| | | Thread.Sleep(500); |
| | | } |
| | | } |
| | | //private bool InitSkills() |
| | | //{ |
| | | // //点击初始化 |
| | | // ZTPoint initButton = new ZTPoint(this.upKeyRect.Start.X - 37, this.upKeyRect.Start.Y - 86); |
| | | // G.Instance.InputControl.MoveToAndClick(initButton); |
| | | |
| | | // //是否已打开确认对话框 |
| | | // ZTRectangle notificationRect = ZTRectangle.Empty; |
| | | // bool result = FuncUtils.TimeoutCancelableWrap(3000, this.cancellationToken, () => { |
| | | // return SkillCVHelper.ExistsNotificationText(out notificationRect,this.GameRect); |
| | | // }); |
| | | // if (!result) |
| | | // { |
| | | // G.Instance.DebugWriter("公告未找到"); |
| | | // return false; |
| | | // } |
| | | // //点击确认 |
| | | // G.Instance.InputControl.Move(0, 0, true, false, false); |
| | | // Thread.Sleep(RandomUtils.MouseClickDuration); |
| | | // G.Instance.InputControl.Move(0, 0, false, false, false); |
| | | |
| | | // //是否已打开完毕对话框 |
| | | // result = FuncUtils.TimeoutCancelableWrap(3000, this.cancellationToken, () => { |
| | | // return SkillCVHelper.ExistsNotificationText(out notificationRect, this.GameRect); |
| | | // }); |
| | | // if (!result) |
| | | // { |
| | | // G.Instance.DebugWriter("完毕公告未找到"); |
| | | // return false; |
| | | // } |
| | | // //点击确认 |
| | | // ZTPoint okPosition = new ZTPoint(notificationRect.GetCenterPoint().X, notificationRect.End.Y + 70); |
| | | // G.Instance.InputControl.MoveToAndClick(okPosition); |
| | | // Thread.Sleep(RandomUtils.G(500,800)); |
| | | // return true; |
| | | //} |
| | | |
| | | |
| | | |
| | | ///// <summary> |
| | | ///// 设置顶端技能 |
| | | ///// </summary> |
| | | ///// <returns></returns> |
| | | //private bool SettingTopSkills() |
| | | //{ |
| | | // //物理暴击 |
| | | // ZTPoint skillPoint = new ZTPoint(lvRect.End.X + 200, lvRect.Start.Y - 42); |
| | | // SettingSkill(skillPoint); |
| | | |
| | | // //物理背击 |
| | | // skillPoint = new ZTPoint(lvRect.End.X + 280, lvRect.Start.Y - 42); |
| | | // SettingSkill(skillPoint); |
| | | // return true; |
| | | //} |
| | | |
| | | ///// <summary> |
| | | ///// 要点的技能列表 |
| | | ///// 内部为每个节所相对于节的相对位置 |
| | | ///// </summary> |
| | | //private List<ZTPoint>[] toAddLevelSkills = new List<ZTPoint>[] { |
| | | // new List<ZTPoint> (){ |
| | | // new ZTPoint(762-346,450-237),//疾风之棍棒精通 |
| | | // }, |
| | | // new List<ZTPoint> (){ |
| | | // new ZTPoint(182,17),//朔风牵引 |
| | | // new ZTPoint(274,17),//流风决 |
| | | // new ZTPoint(481-251,342-262),//风鸣冲击 |
| | | // new ZTPoint(323,82),//游离之风 |
| | | // new ZTPoint(574-251,409-262),//双翼风刃 |
| | | // new ZTPoint(574-251,477-262),//风暴之眼 |
| | | // new ZTPoint(529-251,544-262),//真空旋风破 |
| | | // }, |
| | | // new List<ZTPoint> (){ |
| | | // new ZTPoint(432-251,275-329),//风暴之拳 |
| | | // new ZTPoint(479-251,342-329),//万象风龙阵 |
| | | // new ZTPoint(572-251,340-329),//御风之力 |
| | | // new ZTPoint(433-251,478-329),//风神决 |
| | | // new ZTPoint(526-251,475-329),//风卷残云 |
| | | // new ZTPoint(574-251,476-329),//游龙惊风破 |
| | | // new ZTPoint(431-251,542-329),//九霄风雷 |
| | | // new ZTPoint(663-295,545-331),//无限风域 |
| | | // } |
| | | //}; |
| | | |
| | | ///// <summary> |
| | | ///// 设置SP技能 |
| | | ///// </summary> |
| | | ///// <returns></returns> |
| | | //private bool SettingSPSkills() |
| | | //{ |
| | | // //选中sp技能学习 |
| | | // ZTPoint spPoint = new ZTPoint(lvRect.End.X + 55, lvRect.Start.Y - 80); |
| | | // G.Instance.InputControl.MoveToAndClick(spPoint); |
| | | |
| | | // ZTRectangle numberLimitArea = new ZTRectangle(lvRect.Start.X-5,lvRect.End.Y,lvRect.End.X+21,lvRect.End.Y+340); |
| | | // bool[] addedFlag = new bool[] {false,false,false }; |
| | | // bool isdown = true; |
| | | // for (int i = 0; i < 4; i++) |
| | | // { |
| | | // for (int count = 0; count < 10; count++) |
| | | // { |
| | | // if (this.cancellationToken.IsCancellationRequested) |
| | | // { |
| | | // return false; |
| | | // } |
| | | |
| | | // //是否有数字 |
| | | // bool result = FuncUtils.TimeoutCancelableWrap(1000, this.cancellationToken, () => { |
| | | // return SkillCVHelper.HasNumberText(numberLimitArea); |
| | | // }, 100); |
| | | // if (!result) |
| | | // { |
| | | // continue; |
| | | // } |
| | | |
| | | // //查找是否是某节, |
| | | // Int32 numberSection = 0; |
| | | // ZTRectangle sectionRect = ZTRectangle.Empty; |
| | | // if (SkillCVHelper.IsNumberSections(out numberSection, out sectionRect, numberLimitArea)) |
| | | // { |
| | | // if (!addedFlag[numberSection]) |
| | | // { |
| | | // //没有添加,则循环把此节下的所有技能都加上 |
| | | // foreach (var item in toAddLevelSkills[numberSection]) |
| | | // { |
| | | // SettingSkill(sectionRect.Start.Add(item)); |
| | | // } |
| | | // addedFlag[numberSection] = true; |
| | | // } |
| | | |
| | | // if (count == 0) |
| | | // { |
| | | // if (numberSection == 0) |
| | | // { |
| | | // //一开始是1区则向下 |
| | | // isdown = true; |
| | | // } |
| | | // if (numberSection == 2) |
| | | // { |
| | | // //一开始是3区则向上 |
| | | // isdown = false; |
| | | // } |
| | | |
| | | // } |
| | | // } |
| | | |
| | | |
| | | // if (isdown) |
| | | // { |
| | | // G.Instance.InputControl.MoveToAndClick(downKeyRect.GetCenterPoint()); |
| | | // } |
| | | // else |
| | | // { |
| | | // G.Instance.InputControl.MoveToAndClick(upKeyRect.GetCenterPoint()); |
| | | // } |
| | | // } |
| | | |
| | | // if (addedFlag[0] == true && addedFlag[1] == true && addedFlag[2] == true) |
| | | // { |
| | | // return true; |
| | | // } |
| | | // isdown = !isdown; |
| | | // } |
| | | |
| | | // return false; |
| | | //} |
| | | |
| | | ///// <summary> |
| | | ///// 设置TP技能 |
| | | ///// </summary> |
| | | ///// <returns></returns> |
| | | //private bool SettingTPSkills() |
| | | //{ |
| | | // //选中tp技能学习 |
| | | // ZTPoint spPoint = new ZTPoint(lvRect.End.X + 253, lvRect.Start.Y - 80); |
| | | // G.Instance.InputControl.MoveToAndClick(spPoint); |
| | | |
| | | // ZTPoint[] skills = new ZTPoint[] { |
| | | |
| | | // new ZTPoint(334-296,277-251),//1.第一行第一个 |
| | | // new ZTPoint(381-296,545-251),//2.第三行第二个 |
| | | // new ZTPoint(664-296,413-251),//3.第二行倒数第三个 |
| | | // new ZTPoint(567-296,410-251),//4.第二行倒数第五个 |
| | | // new ZTPoint(758-296,411-251),//5.第二行倒数第一个 |
| | | // }; |
| | | |
| | | // for (int i = 0; i < skills.Length; i++) |
| | | // { |
| | | // SettingSkill(lvRect.Start.Add(skills[i])); |
| | | // } |
| | | |
| | | // return true; |
| | | //} |
| | | |
| | | ///// <summary> |
| | | ///// 学习 |
| | | ///// </summary> |
| | | ///// <returns></returns> |
| | | //private bool Studay() |
| | | //{ |
| | | // ZTPoint studayPoint = new ZTPoint(this.downKeyRect.Start.X-331,this.downKeyRect.End.Y+27); |
| | | // G.Instance.InputControl.MoveToAndClick(studayPoint); |
| | | // Thread.Sleep(1000); |
| | | // //点击确认 |
| | | // G.Instance.InputControl.Move(0, 0, true, false, false); |
| | | // Thread.Sleep(RandomUtils.MouseClickDuration); |
| | | // G.Instance.InputControl.Move(0, 0, false, false, false); |
| | | // Thread.Sleep(RandomUtils.MouseClickDuration*3); |
| | | // return true; |
| | | //} |
| | | |
| | | ///// <summary> |
| | | ///// 设置技能 |
| | | ///// </summary> |
| | | ///// <param name="skillPoint"></param> |
| | | ///// <returns></returns> |
| | | //private bool SettingSkill(ZTPoint skillPoint) |
| | | //{ |
| | | // //84,71 |
| | | // ZTRectangle limitRect = new ZTRectangle(skillPoint.X-84,skillPoint.Y-71,skillPoint.X+84,skillPoint.Y+71); |
| | | |
| | | // bool result = false; |
| | | // ZTRectangle addSkillLevelButton = ZTRectangle.Empty; |
| | | |
| | | // //选中技能,试两次 |
| | | // int addTry = 0; |
| | | // for (; addTry < 2; addTry++) |
| | | // { |
| | | // bool skillIsFull = false; |
| | | // G.Instance.InputControl.MoveToAndClick(skillPoint); |
| | | // Thread.Sleep(500); |
| | | // result = FuncUtils.TimeoutCancelableWrap(3000, this.cancellationToken, () => { |
| | | // return SkillCVHelper.IsSelectSkill(out addSkillLevelButton, out skillIsFull, limitRect); |
| | | // }); |
| | | // if (result) |
| | | // { |
| | | // if (skillIsFull) |
| | | // { |
| | | // return true; |
| | | // } |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (addTry >= 2) |
| | | // { |
| | | // return false; |
| | | // } |
| | | |
| | | |
| | | // //加技能点,试两次 |
| | | // for (addTry = 0; addTry < 2; addTry++) |
| | | // { |
| | | // G.Instance.InputControl.MoveToAndClick(addSkillLevelButton.GetCenterPoint()); |
| | | // result = FuncUtils.TimeoutCancelableWrap(3000, this.cancellationToken, () => { |
| | | // return SkillCVHelper.SkillIsFullLevel(limitRect); |
| | | // }); |
| | | // if (result) |
| | | // { |
| | | // return true; |
| | | // } |
| | | // } |
| | | |
| | | |
| | | // return false; |
| | | //} |
| | | |
| | | ///// <summary> |
| | | ///// 格式化摆放技能栏 |
| | | ///// </summary> |
| | | ///// <returns></returns> |
| | | //private bool FormatSkillColumn() |
| | | //{ |
| | | // //打开已学技能窗 |
| | | // ZTRectangle studayTextRect = ZTRectangle.Empty; |
| | | // if (!OpenStudaySkillWindow(out studayTextRect)) |
| | | // { |
| | | // G.Instance.DebugWriter("未指开已学技能窗口"); |
| | | // return false; |
| | | // } |
| | | |
| | | // //技能栏全部技能移动已学技能窗 |
| | | // if (!MoveSkillToStudayWindow(studayTextRect)) |
| | | // { |
| | | // G.Instance.DebugWriter("移动至已学技能窗口失败"); |
| | | // return false; |
| | | // } |
| | | |
| | | // //技能窗内容分步移 |
| | | // if (!MoveSkillToExpress(studayTextRect)) |
| | | // { |
| | | // G.Instance.DebugWriter("移动至快捷栏失败"); |
| | | // return false; |
| | | // } |
| | | // return true; |
| | | //} |
| | | |
| | | ///// <summary> |
| | | ///// 打开已学技能窗口 |
| | | ///// </summary> |
| | | ///// <returns></returns> |
| | | //private bool OpenStudaySkillWindow(out ZTRectangle studayTextRect) |
| | | //{ |
| | | // studayTextRect = ZTRectangle.Empty; |
| | | // ZTRectangle innerstudyTextRect = ZTRectangle.Empty; |
| | | // ZTPoint openwindowButton = new ZTPoint(this.titleRect.Start.X + 194, this.titleRect.Start.Y + 517); |
| | | // for (int i = 0; i < 2; i++) |
| | | // { |
| | | // if (this.cancellationToken.IsCancellationRequested) |
| | | // { |
| | | // return false; |
| | | // } |
| | | // G.Instance.InputControl.MoveToAndClick(openwindowButton); |
| | | // bool result = FuncUtils.TimeoutCancelableWrap(3000, this.cancellationToken, () => { |
| | | // return SkillCVHelper.StudaySkillWindowIsOpen(out innerstudyTextRect,this.GameRect); |
| | | // }, 200); |
| | | |
| | | // if (result) |
| | | // { |
| | | // studayTextRect = innerstudyTextRect; |
| | | // return true; |
| | | // } |
| | | // } |
| | | // return false; |
| | | //} |
| | | |
| | | ///// <summary> |
| | | ///// 从快捷栏向已学技能栏移动技能 |
| | | ///// </summary> |
| | | ///// <returns></returns> |
| | | //private bool MoveSkillToStudayWindow(ZTRectangle studayTextRect) |
| | | //{ |
| | | // ZTRectangle targetRect = GetStudaySkillRect(studayTextRect, 27); |
| | | |
| | | // for (int i = 0; i < 12; i++) |
| | | // { |
| | | // ZTRectangle expressRect = GetExpressSkillRect(i); |
| | | // MoveSkill(expressRect.GetCenterPoint(), targetRect.GetCenterPoint()); |
| | | // } |
| | | // return true; |
| | | //} |
| | | |
| | | |
| | | ///// <summary> |
| | | ///// 识别出来的技能索引和在技能快捷栏中的对应关系 |
| | | ///// 对应关系是-1的不放在快捷栏里 |
| | | ///// </summary> |
| | | //Dictionary<Int32, Int32> skillToExpressMap = new Dictionary<int, int>() { |
| | | // { 4 ,0}, |
| | | // { 13,1}, |
| | | // { 8 ,2}, |
| | | // { 9 ,3}, |
| | | // { 15,4}, |
| | | // { 12,5}, |
| | | |
| | | // { 6 ,6}, |
| | | // { 10,7}, |
| | | // { 7 ,8}, |
| | | // { 11,9}, |
| | | // { 14,10}, |
| | | // { 16,11} |
| | | |
| | | //}; |
| | | ///// <summary> |
| | | ///// 从已学技能栏向快捷栏移动技能 |
| | | ///// </summary> |
| | | ///// <param name="studayTextRect"></param> |
| | | ///// <returns></returns> |
| | | //private bool MoveSkillToExpress(ZTRectangle studayTextRect) |
| | | //{ |
| | | // int i = 0; |
| | | // int count = 17; |
| | | // while (i < count) |
| | | // { |
| | | // if (this.cancellationToken.IsCancellationRequested) |
| | | // { |
| | | // return false; |
| | | // } |
| | | // //获取位置,并将鼠标移到位置,显示出技能名 |
| | | // ZTPoint studayPoint = GetStudaySkillRect(studayTextRect, i).GetCenterPoint(); |
| | | // G.Instance.InputControl.MoveTo(studayPoint.X, studayPoint.Y, false, false, false); |
| | | // Thread.Sleep(1000); |
| | | |
| | | // //识别 |
| | | // Int32 skillIndex = 0;//技能索引 |
| | | // ZTRectangle discenrnRect = new ZTRectangle(studayPoint.X - 150, this.GameRect.Start.Y, studayPoint.X, studayPoint.Y); |
| | | // bool result = FuncUtils.TimeoutCancelableWrap(2000, this.cancellationToken, () => { |
| | | // return SkillCVHelper.GetSkillName(out skillIndex, discenrnRect); |
| | | // }, 200); |
| | | // if (result) |
| | | // { |
| | | // if (skillToExpressMap.ContainsKey(skillIndex)) |
| | | // { |
| | | // //要放到技能栏的位置 |
| | | // ZTPoint to = GetExpressSkillRect(skillToExpressMap[skillIndex]).GetCenterPoint(); |
| | | // MoveSkill(studayPoint, to); |
| | | // count--; |
| | | // continue; |
| | | // } |
| | | // } |
| | | // else |
| | | // { |
| | | // G.Instance.DebugWriter("识别技能错误,index=" + i.ToString()); |
| | | // } |
| | | // i++; |
| | | // } |
| | | |
| | | // return true; |
| | | //} |
| | | |
| | | |
| | | ///// <summary> |
| | | ///// 移动技能 |
| | | ///// </summary> |
| | | ///// <param name="from"></param> |
| | | ///// <param name="to"></param> |
| | | ///// <returns></returns> |
| | | //private bool MoveSkill(ZTPoint from, ZTPoint to) |
| | | //{ |
| | | // //移动指定位置 |
| | | // G.Instance.InputControl.MoveTo(from.X, from.Y, false, false, false); |
| | | // Thread.Sleep(RandomUtils.MouseClickDuration*2); |
| | | |
| | | // //按下 |
| | | // G.Instance.InputControl.Move(0, 0, true, false, false); |
| | | // Thread.Sleep(RandomUtils.MouseClickDuration * 3); |
| | | |
| | | // //移到目标位置 |
| | | // G.Instance.InputControl.MoveTo(to.X, to.Y, true, false, false); |
| | | // Thread.Sleep(RandomUtils.MouseClickDuration*2); |
| | | |
| | | |
| | | // //松开 |
| | | // G.Instance.InputControl.Move(0, 0, false, false, false); |
| | | // Thread.Sleep(RandomUtils.MouseClickDuration * 2); |
| | | // return true; |
| | | //} |
| | | |
| | | ///// <summary> |
| | | ///// 得到快捷栏技能定位 |
| | | ///// </summary> |
| | | ///// <param name="index"></param> |
| | | ///// <returns></returns> |
| | | //private ZTRectangle GetExpressSkillRect(int index) |
| | | //{ |
| | | // //x209,y488 |
| | | // Int32 row = index / 6; |
| | | // Int32 col = index % 6; |
| | | |
| | | // int x = this.titleRect.Start.X + 209 + col * 33; |
| | | // int y = this.titleRect.Start.Y + 488 + row * 33; |
| | | |
| | | // return new ZTRectangle(x, y, x + 33, y + 33); |
| | | //} |
| | | |
| | | ///// <summary> |
| | | ///// 得到已学技能栏定位 |
| | | ///// </summary> |
| | | ///// <param name="studayTextRect"></param> |
| | | ///// <param name="index"></param> |
| | | ///// <returns></returns> |
| | | //private ZTRectangle GetStudaySkillRect(ZTRectangle studayTextRect, Int32 index) |
| | | //{ |
| | | // //x:-122,y:44 |
| | | // Int32 row = index / 7; |
| | | // Int32 col = index % 7; |
| | | |
| | | // int x = studayTextRect.Start.X + (-122) + col * 31; |
| | | // int y = studayTextRect.Start.Y + 44 + row * 31; |
| | | |
| | | // return new ZTRectangle(x, y, x + 31, y + 31); |
| | | //} |
| | | |
| | | } |
| | | } |