using Emgu.CV; using Emgu.CV.Structure; using RichCreator.Dnf; using RichCreator.Utility; using RichCreator.Utility.Captures; using RichCreator.Utility.CV; using RichCreator.Utility.InputControl; using RichCreator.Utility.Maps; using RichCreator.Utility.Structs; using RichCreator.Utility.Utilitys; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; namespace RichCreator.Maps { public abstract class ShikongzhimenMapBase:MapInfo { public ShikongzhimenMapBase(MapType mapType, ZTRectangle gameRect, CancellationToken cancellationToken):base(mapType,gameRect,cancellationToken) { } /// /// 步行到素喃 /// /// protected bool MoveToSunan() { bool result = FuncUtils.NoChangeRetryCallWrap( () => { WindowUtils.SetDnfToTop(); CloseAllAlertWindowByX(this.CancelToken, this.GameRect); //向下走出赛丽亚的房间 ,走向素喃 G.Instance.InputControl.PressKey(2000, HIDCode.DownArrow); return true; }, () => { G.Instance.InfoWriter("检测是否进入素喃"); result = FuncUtils.TimeoutCancelableWrap(10000, this.CancelToken, () => { return ShikongzhimenCVHelper.IsInSunan(this.GameRect); }); if (!result) { G.Instance.InfoWriter("进入素喃失败"); return false; } G.Instance.InfoWriter("进入素喃成功"); return true; }, () => { return DnfCVHelper.IsInSaiLiYaHouse(this.GameRect); }); return result; } /// /// 步行至时空之门 /// /// protected bool MoveToShikongzhimen() { bool result = FuncUtils.NoChangeRetryCallWrap(() => { //打开地图 Utility.Structs.ZTPoint mapButtonPosition = new Utility.Structs.ZTPoint(this.GameRect.Start.X + 782, this.GameRect.Start.Y + 16); G.Instance.InputControl.MoveToAndClick(mapButtonPosition); Thread.Sleep(1000); //点到副本之前的地图 Utility.Structs.ZTPoint mapPrePosition = new Utility.Structs.ZTPoint(this.GameRect.Start.X + 143, this.GameRect.Start.Y + 197); G.Instance.InputControl.MoveToAndClick(mapPrePosition); Thread.Sleep(1000); //关闭地图框 CloseAllAlertWindowByEsc(this.CancelToken, this.GameRect); return true; }, () => { //检测是否进入时空之门 return FuncUtils.TimeoutCancelableWrap(15000, this.CancelToken, () => { CloseAllAlertWindowByX(this.CancelToken, this.GameRect); return ShikongzhimenCVHelper.IsInShikongzhimen(this.GameRect); }); }, () => { //检测是否还在素喃 return FuncUtils.TimeoutCancelableWrap(3000, this.CancelToken, () => { CloseAllAlertWindowByX(this.CancelToken, this.GameRect); return ShikongzhimenCVHelper.IsInSunan(this.GameRect); }); }); Thread.Sleep(5000); return result; } /// /// 步行到任务选择和正式开打页面 /// /// protected bool MoveToChoiceTaskPage() { bool result = false; //右走进选择副本界面 G.Instance.InputControl.PressKey(1500, HIDCode.LeftArrow); G.Instance.InfoWriter("检测是否打开选择副本界面"); result = FuncUtils.TimeoutCancelableWrap(10000, this.CancelToken, () => { Image image = ScreenCapture.Instance.CaptureScreenReturnImage(); return ShikongzhimenCVHelper.IsInChoiceTaskPage(image, this.GameRect); }); if (!result) { G.Instance.InfoWriter("进入打开选择副本界面失败"); return false; } G.Instance.InfoWriter("打开选择副本界面成功"); return true; } } }