From 589ed88a5924a7494e21b95b6bbff5e46ff49ddd Mon Sep 17 00:00:00 2001
From: asmrobot <asmrobot@hotmail.com>
Date: Thu, 21 Nov 2019 01:08:42 +0000
Subject: [PATCH] kalete map

---
 src/RichCreator/Maps/Kalete/KaleteMap.cs |  337 ++++++++-----------------------------------------------
 1 files changed, 53 insertions(+), 284 deletions(-)

diff --git a/src/RichCreator/Maps/Kalete/KaleteMap.cs b/src/RichCreator/Maps/Kalete/KaleteMap.cs
index 6d2df1e..be2b081 100644
--- a/src/RichCreator/Maps/Kalete/KaleteMap.cs
+++ b/src/RichCreator/Maps/Kalete/KaleteMap.cs
@@ -9,6 +9,7 @@
 using RichCreator.Utility.Maps;
 using RichCreator.Utility.Structs;
 using RichCreator.Utility.Utilitys;
+using RichCreator.Utilitys;
 using System;
 using System.Collections.Generic;
 using System.Threading;
@@ -18,12 +19,11 @@
     /// <summary>
     /// 卡勒特地图
     /// </summary>
-    public class KaleteMap : MapInfo
+    public class KaleteMap : ShikongzhimenMapBase
     {
         public KaleteMap(ZTRectangle gameRect, CancellationToken cancelToken) : base(MapType.Lingdong, gameRect, cancelToken)
         {
             this.MiniMap = new KaleteMiniMap(gameRect);
-            this.Role = new DnfRole(gameRect);
         }
 
         /// <summary>
@@ -32,36 +32,28 @@
         /// NextIndex=-2,出错
         /// </summary>
         private static readonly HouseInfo[] Houses = new HouseInfo[] {
-            new HouseInfo (0 ,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Right } },
-            new HouseInfo (1 ,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Bottom } },
-            new HouseInfo (2 ,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Left } },
-            new HouseInfo (3 ,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Bottom } },
-            new HouseInfo (4 ,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Bottom } },
-            new HouseInfo (5 ,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Left } },
-            new HouseInfo (6 ,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Right } },
-            new HouseInfo (7 ,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Right } },
-            new HouseInfo (8 ,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-148,DoorDirection=new[]{Direction.Bottom } },
-            new HouseInfo (9 ,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-300,DoorDirection=new[]{Direction.Left} },
-            new HouseInfo (10,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Bottom } },
-            new HouseInfo (11,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Right } },
-            new HouseInfo (12,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-220,DoorDirection=new[]{Direction.Bottom } },
-            new HouseInfo (13,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-320,DoorDirection=new[]{Direction.Left } },
-            new HouseInfo (14,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-320,DoorDirection=new[]{Direction.Right } },
-            new HouseInfo (15,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Right } },
-            new HouseInfo (16,MapType.Lingdong,true ,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Up } },
-            new HouseInfo (17,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Left } },
-            new HouseInfo (18,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Up } },
-            new HouseInfo (19,MapType.Lingdong,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X}){ HouseCenterMoveLine=-250,DoorDirection=new[]{Direction.Up } }
+            new HouseInfo (0 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (1 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (2 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (3 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (4 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (5 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (6 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (7 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (8 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},new int[]{20,21,22,23 }),
+            new HouseInfo (9 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (10,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (11,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (12,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (13,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (14,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (15,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (16,MapType.Kalete,true ,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (17,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (18,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null),
+            new HouseInfo (19,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null)
         };
-
-
-
-        /// <summary>
-        /// 角色
-        /// </summary>
-        public DnfRole Role { get; set; }
-
-
+        
         private Int32 runningStep = RunningStep.None;
 
         /// <summary>
@@ -184,70 +176,49 @@
             switch (houseIndex)
             {
                 case 0:
-                    this.Role.SyncMove(new ZTPoint(550, 0));
-                    this.Role.ReleaseSkill(HIDCode.R, 1000);
-                    this.Role.ReleaseSkill(HIDCode.E, 1000);
+                    this.Role.SyncMove(new ZTPoint(297, 0));
+                    this.Role.ReleaseSkill(HIDCode.R);
+                    this.Role.ReleaseSkill(HIDCode.E);
+                    
                     break;
                 case 1:
-                    this.Role.SyncMove(new ZTPoint(300, 0));
-                    this.Role.ReleaseSkill(HIDCode.Q, 1300);
-                    this.Role.ReleaseSkill(HIDCode.W, 1000);
+                    this.Role.SyncMove(new ZTPoint(241, 0));
+                    this.Role.ReleaseSkill(HIDCode.Q);
+                    this.Role.ReleaseSkill(HIDCode.W);
                     break;
                 case 6:
-                    this.Role.SyncMove(new ZTPoint(448, 94));
-                    this.Role.ReleaseSkill(HIDCode.G, 0);
+                    this.Role.SyncMove(new ZTPoint(139, 90));
+                    this.Role.ReleaseSkill(HIDCode.G);
                     break;
                 case 7:
-                    this.Role.SyncMove(new ZTPoint(530, 0));
-                    this.Role.ReleaseSkill(HIDCode.R, 0);
+                    this.Role.SyncMove(new ZTPoint(330, 90));
+                    this.Role.ReleaseSkill(HIDCode.R);
                     break;
                 case 8:
-                    this.Role.SyncMove(new ZTPoint(453, 0));
-                    this.Role.ReleaseSkill(HIDCode.H, 0);
+                    this.Role.SyncMove(new ZTPoint(305, 0));
+                    this.Role.ReleaseSkill(HIDCode.H);
                     break;
                 case 13:
-                    this.Role.SyncMove(new ZTPoint(-100, 203));
-                    this.Role.ReleaseSkill(HIDCode.Q, 1300);
-                    this.Role.ReleaseSkill(HIDCode.E, 0);
+                    this.Role.SyncMove(new ZTPoint(-104, 82));
+                    this.Role.ReleaseSkill(HIDCode.Q);
+                    this.Role.ReleaseSkill(HIDCode.E);
                     break;
                 case 12:
-                    this.Role.SyncMove(new ZTPoint(-851, 120));
-                    this.Role.ReleaseSkill(HIDCode.T, 0);
+                    this.Role.SyncMove(new ZTPoint(-550, 90));
+                    this.Role.ReleaseSkill(HIDCode.T);
                     break;
                 case 17:
-                    this.Role.SyncMove(new ZTPoint(-306, 130));
-                    this.Role.ReleaseSkill(HIDCode.Q, 1300);
-                    this.Role.ReleaseSkill(HIDCode.F, 0);//用w代替
+                    this.Role.SyncMove(new ZTPoint(-200, 60));
+                    this.Role.ReleaseSkill(HIDCode.Q);
+                    this.Role.ReleaseSkill(HIDCode.F);//用w代替
                     break;
                 case 16:
-                    this.Role.SyncMove(new ZTPoint(-385, 0));
-                    this.Role.ReleaseSkill(HIDCode.Y, 0);
+                    this.Role.SyncMove(new ZTPoint(-174, 0));
+                    this.Role.ReleaseSkill(HIDCode.Y);
                     break;
             }
         }
-
-        /// <summary>
-        /// esc退到城镇
-        /// </summary>
-        private void ExitToTown()
-        {
-            G.Instance.DebugWriter("返回城镇");
-            Utility.Structs.ZTPoint point = new Utility.Structs.ZTPoint(this.GameRect.End.X - 124, this.GameRect.Start.Y + 146);
-            G.Instance.InputControl.MoveToAndClick(point);
-            Thread.Sleep(5000);
-        }
-
-        /// <summary>
-        /// 点击再次挑战
-        /// </summary>
-        private void ReplayGame()
-        {
-            G.Instance.DebugWriter("重新挑战");
-            Utility.Structs.ZTPoint point = new Utility.Structs.ZTPoint(this.GameRect.End.X - 132, this.GameRect.Start.Y + 90);
-            G.Instance.InputControl.MoveToAndClick(point);
-        }
-
-
+        
         /// <summary>
         /// 刷房间
         /// </summary>
@@ -261,7 +232,7 @@
                 G.Instance.InfoWriter("未找到进入凛冬");
                 return ZTResult.Failed;
             }
-            G.Instance.InfoWriter("进入凛冬");
+            G.Instance.InfoWriter("进入卡勒特");
 
             Int32 preHouseIndex = -1;
             Int32 houseIndex = -1;
@@ -287,8 +258,8 @@
                 HouseInfo houseInfo = Houses[houseIndex];
                 this.Role.SetHouse(houseInfo);
                 DateTime startTime = DateTime.Now;
-                KillMonsterStateMachine kmsm = new KillMonsterStateMachine(this, houseInfo,this.Role, preHouseIndex, this.runningStep);
-                ZTResult smresult = kmsm.Work(5 * 60 * 1000);
+                KillMonsterStateMachine kmsm = new KillMonsterStateMachine(this, houseInfo,this.Role);
+                ZTResult smresult = kmsm.Work(2 * 60 * 1000,preHouseIndex,this.runningStep);
                 Int32 roomTotalSecond = (Int32)(DateTime.Now - startTime).TotalSeconds;
                 G.Instance.InfoWriter("房间刷完,用时:" + (roomTotalSecond / 60) + "分" + (roomTotalSecond % 60) + "秒");
 
@@ -310,113 +281,7 @@
                 }
             }
         }
-
-        /// <summary>
-        /// 步行到素喃
-        /// </summary>
-        /// <returns></returns>
-        private bool MoveToSunan()
-        {
-            bool result = FuncUtils.NoChangeRetryCallWrap(
-               () =>
-               {
-                   WindowUtils.SetDnfToTop();
-                   CloseAllAlertWindow(this.CancelToken, this.GameRect);
-                   //向下走出赛丽亚的房间  ,走向素喃
-                   G.Instance.InputControl.PressKey(2000, HIDCode.DownArrow);
-               },
-               () =>
-               {
-                   G.Instance.InfoWriter("检测是否进入素喃");
-                   result = FuncUtils.TimeoutCancelableWrap(10000, this.CancelToken, () =>
-                   {
-                       return LindongCVHelper.IsInSunan(this.GameRect);
-                   });
-                   if (!result)
-                   {
-                       G.Instance.InfoWriter("进入素喃失败");
-                       return false;
-                   }
-
-                   G.Instance.InfoWriter("进入素喃成功");
-                   return true;
-               },
-               () =>
-               {
-                   return DnfCVHelper.IsInSaiLiYaHouse(this.GameRect);
-               });
-            return result;
-        }
-
-        /// <summary>
-        /// 步行至时空之门
-        /// </summary>
-        /// <returns></returns>
-        private bool MoveToShikongzhimen()
-        {
-            bool result = FuncUtils.NoChangeRetryCallWrap(() =>
-             {
-                //打开地图
-                ZTPoint mapButtonPosition = new ZTPoint(this.GameRect.End.X - 14, this.GameRect.Start.Y + 16);
-                 G.Instance.InputControl.MoveToAndClick(mapButtonPosition);
-                 Thread.Sleep(1000);
-
-                //点到副本之前的地图
-                ZTPoint mapPrePosition = new ZTPoint(this.GameRect.Start.X + 382, this.GameRect.Start.Y + 252);
-                 G.Instance.InputControl.MoveToAndClick(mapPrePosition);
-
-                //关闭地图框
-                CloseAllAlertWindow(this.CancelToken, this.GameRect);
-             },
-            () =>
-            {
-                //检测是否进入时空之门
-                return FuncUtils.TimeoutCancelableWrap(15000, this.CancelToken, () =>
-                  {
-                      CloseAllAlertWindow(this.CancelToken, this.GameRect);
-                      return LindongCVHelper.IsInShikongzhimen(this.GameRect);
-                  });
-            },
-            () =>
-            {
-                //检测是否还在素喃
-                return FuncUtils.TimeoutCancelableWrap(3000, this.CancelToken, () =>
-                {
-                    CloseAllAlertWindow(this.CancelToken, this.GameRect);
-                    return LindongCVHelper.IsInSunan(this.GameRect);
-                });
-            });
-
-            Thread.Sleep(5000);
-            return result;
-        }
-
-        /// <summary>
-        /// 步行到任务选择和正式开打页面
-        /// </summary>
-        /// <returns></returns>
-        private bool MoveToChoiceTaskPage()
-        {
-            bool result = false;
-            //右走进选择副本界面
-            G.Instance.InputControl.PressKey(1500, HIDCode.LeftArrow);
-
-
-            G.Instance.InfoWriter("检测是否打开选择副本界面");
-            result = FuncUtils.TimeoutCancelableWrap(10000, this.CancelToken, () =>
-            {
-                Image<Rgb, byte> image = ScreenCapture.Instance.CaptureScreenReturnImage();
-                return LindongCVHelper.IsInChoiceTaskPage(image, this.GameRect);
-            });
-            if (!result)
-            {
-                G.Instance.InfoWriter("进入打开选择副本界面失败");
-                return false;
-            }
-            G.Instance.InfoWriter("打开选择副本界面成功");
-            return true;
-        }
-
+        
         /// <summary>
         /// 进入指定房间
         /// </summary>
@@ -424,7 +289,7 @@
         private bool IntoHouse()
         {
             bool result = false;
-            //选择凛冬
+            //选择卡勒特之初
             G.Instance.InfoWriter("开始选择卡勒特之初");
 
             Int32 nandu = 0;
@@ -456,32 +321,6 @@
         }
 
         /// <summary>
-        /// 关闭所有弹出窗
-        /// </summary>
-        /// <param name="cancelToken"></param>
-        /// <param name="gameRect"></param>
-        /// <returns></returns>
-        private void CloseAllAlertWindow(CancellationToken cancelToken, ZTRectangle gameRect)
-        {
-            while (!cancelToken.IsCancellationRequested)
-            {
-                //G.Instance.InputControl.MoveTo(gameRect.Start.X,gameRect.Start.Y, false, false, false);
-                //Thread.Sleep(10);
-                //截图
-                Image<Rgb, byte> image = ScreenCapture.Instance.CaptureScreenReturnImage();
-
-                ZTRectangle closeButtonRect = ZTRectangle.Empty;
-                if (!DnfCVHelper.GetAlertWindow(out closeButtonRect, image, gameRect))
-                {
-                    return;
-                }
-
-                G.Instance.InputControl.MoveToAndClick(closeButtonRect.GetCenterPoint());
-                Thread.Sleep(500);
-            }
-        }
-
-        /// <summary>
         /// 选择凛冬
         /// </summary>
         /// <returns></returns>
@@ -494,7 +333,7 @@
                 return true;
             }
 
-            G.Instance.InputControl.MoveToAndClick(new ZTPoint(this.GameRect.Start.X + 819, this.GameRect.Start.Y + 181));
+            G.Instance.InputControl.MoveToAndClick(new ZTPoint(this.GameRect.Start.X + 568, this.GameRect.Start.Y + 141));
             Thread.Sleep(5000);
             image = ScreenCapture.Instance.CaptureScreenReturnImage();
             if (KaleteCVHelper.GetChoiceKaleteNandu(out nandu, image, this.GameRect))
@@ -542,75 +381,5 @@
             return false;
         }
 
-        /// <summary>
-        /// 出售装备
-        /// </summary>
-        /// <param name="saleButtonRect"></param>
-        private bool SaleEquipment()
-        {
-            //卖装备并关闭商店
-            ZTRectangle closeButtonRect = ZTRectangle.Empty;
-            ZTRectangle saleButtonRect = ZTRectangle.Empty;
-            if (!DnfCVHelper.HasSaleButton(out saleButtonRect, out closeButtonRect, this.GameRect))
-            {
-                return false;
-            }
-
-            //卖装备
-            G.Instance.InfoWriter("出售装备");
-            G.Instance.InputControl.MoveToAndClick(saleButtonRect.GetCenterPoint());
-
-            //得到装备文字位置
-            ZTRectangle equipmentTextRect = ZTRectangle.Empty;
-            bool result = FuncUtils.TimeoutCancelableWrap(5000, this.CancelToken, () =>
-            {
-                Int32 status = 0;
-                if (DnfCVHelper.GetEquipmentSelectStatus(out equipmentTextRect, out status, this.GameRect))
-                {
-                    if (status == 1)
-                    {
-                        return true;
-                    }
-
-                    G.Instance.InputControl.MoveToAndClick(equipmentTextRect.GetCenterPoint());
-                }
-                return false;
-            });
-
-            if (!result)
-            {
-                G.Instance.InfoWriter("装备文字未取到");
-                return false;
-            }
-
-
-
-            //开始点,每格步进30
-            ZTPoint startPoint = new Utility.Structs.ZTPoint(equipmentTextRect.End.X - 30, equipmentTextRect.End.Y + 9);
-            List<Int32> points = DnfCVHelper.GetEquipmentIndexs(startPoint);
-
-            for (int i = 0; i < points.Count; i++)
-            {
-                Int32 index = points[i];
-
-                int row = index / 8;
-                int col = index % 8;
-                int x = col * 30 + 15;
-                int y = row * 30 + 15;
-
-                //点窗格
-                G.Instance.InputControl.MoveToAndClick(new Utility.Structs.ZTPoint(startPoint.X + x, startPoint.Y + y));
-                Thread.Sleep(500);
-                //点确定
-                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);
-            }
-            G.Instance.DebugWriter("equipment:" + ZTImage.Utils.ConcatString(points.ToArray(), ","));
-            Thread.Sleep(RandomUtils.KeyPressDuration);
-            G.Instance.InputControl.PressKey(RandomUtils.KeyPressDuration, HIDCode.Escape);
-            return true;
-        }
     }
 }

--
Gitblit v1.9.3