asmrobot
2019-11-25 2aeab450471cb80b59002da7da80faf251a0c4f4
src/RichCreator/Maps/Kalete/KaleteMap.cs
@@ -2,6 +2,7 @@
using Emgu.CV.Structure;
using RichCreator.Dnf;
using RichCreator.Jobs.StateMachines;
using RichCreator.Models;
using RichCreator.Utility;
using RichCreator.Utility.Captures;
using RichCreator.Utility.CV;
@@ -32,29 +33,30 @@
        /// NextIndex=-2,出错
        /// </summary>
        private static readonly HouseInfo[] Houses = new HouseInfo[] {
            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)
            new HouseInfo (0 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,-1),
            new HouseInfo (1 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,0),
            new HouseInfo (2 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,0),
            new HouseInfo (3 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,0),
            new HouseInfo (4 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,0),
            new HouseInfo (5 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,0),
            new HouseInfo (6 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,1),
            new HouseInfo (7 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,6),
            new HouseInfo (8 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},new int[]{20,21,22,23 },7),
            new HouseInfo (9 ,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,0),
            new HouseInfo (10,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,0),
            new HouseInfo (11,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,0),
            new HouseInfo (12,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,13),
            new HouseInfo (13,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,8),
            new HouseInfo (14,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,0),
            new HouseInfo (15,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,0),
            new HouseInfo (16,MapType.Kalete,true ,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,17),
            new HouseInfo (17,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,12),
            new HouseInfo (18,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,0),
            new HouseInfo (19,MapType.Kalete,false,new HIDCode[] { HIDCode.A,HIDCode.D,HIDCode.X},null,0)
        };
        
        private Int32 runningStep = RunningStep.None;
        private DateTime startRoleTime = DateTime.Now;
        /// <summary>
        /// 开始
@@ -66,12 +68,8 @@
        public override ZTResult Start(Int32 runningStep)
        {
            this.runningStep = runningStep;
            WindowUtils.SetDnfToTop();
            WindowUtils.SetDnfToTop();
            if (runningStep < RunningStep.War)
            {
                if (!MoveToSunan())
@@ -104,10 +102,10 @@
                {
                    return ZTResult.Cancel;
                }
                DateTime startHouse = DateTime.Now;
                ZTResult killResult = KillMonster();
                DateTime startMapTime = DateTime.Now;
                ZTResult killResult = KillOfMap();
                StateProvider.Instance.RoleTimePassed = (Int32)(DateTime.Now - startRoleTime).TotalSeconds;
                StateProvider.Instance.PreMapTime= (Int32)(DateTime.Now - startMapTime).TotalSeconds;
                if (killResult == ZTResult.Success)
                {
                    //捡东西
@@ -118,17 +116,13 @@
                        G.Instance.InputControl.PressKey(RandomUtils.KeyPressDuration, HIDCode.X);
                        Thread.Sleep(RandomUtils.KeyPressDuration * 3);
                    }
                    //卖装备并关闭商店
                    SaleEquipment();
                    Int32 houseTotalSecond = (Int32)(DateTime.Now - startHouse).TotalSeconds;
                    G.Instance.InfoWriter("单次刷图成功,用时:" + (houseTotalSecond / 60) + "分" + (houseTotalSecond % 60) + "秒");
                    G.Instance.InfoWriter("单次刷图完成");
                    //查询疲劳值
                    Int32 pilaozhi = DnfCVHelper.GetPiLaoZhi(this.GameRect);
                    G.Instance.InfoWriter("疲劳值:" + pilaozhi);
                    if (pilaozhi <= 0)
                    {
@@ -223,28 +217,26 @@
        /// 刷房间
        /// </summary>
        /// <returns></returns>
        private ZTResult KillMonster()
        private ZTResult KillOfMap()
        {
            bool ret = false;
            DateTime startMapTime = DateTime.Now;
            if (!IsEntryMap())
            {
                G.Instance.InfoWriter("未找到进入凛冬");
                G.Instance.InfoWriter("未找到进入卡勒特");
                return ZTResult.Failed;
            }
            G.Instance.InfoWriter("进入卡勒特");
            Int32 preHouseIndex = -1;
            Int32 houseIndex = -1;
            G.Instance.InfoWriter("进入卡勒特");
            Int32 houseIndex = -1;
            //技能加成
            G.Instance.InputControl.PressKey(RandomUtils.KeyPressDuration, HIDCode.Space);
            //循环刷房间
            while (true)
            {
                preHouseIndex = houseIndex;
                DateTime startHouseTime = DateTime.Now;
                Int32 fromHouseIndex = houseIndex;
                //看房间号
                ret = this.MiniMap.GetCurrentHouseIndexWaitTimeout(out houseIndex, null, this.CancelToken, 3 * 1000);
                if (!ret)
@@ -253,15 +245,20 @@
                    return ZTResult.Failed;
                }
                G.Instance.InfoWriter("进入房间->" + houseIndex.ToString());
                StateProvider.Instance.HouseIndex = houseIndex;
                G.Instance.InfoWriter($"进入房间({houseIndex})");
                HouseInfo houseInfo = Houses[houseIndex];
                this.Role.SetHouse(houseInfo);
                DateTime startTime = DateTime.Now;
                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) + "秒");
                ZTResult smresult = kmsm.Work(2 * 60 * 1000,fromHouseIndex,this.runningStep);
                G.Instance.InfoWriter($"房间刷完({houseIndex})");
                StateProvider.Instance.RoleTimePassed = (Int32)(DateTime.Now - startRoleTime).TotalSeconds;
                StateProvider.Instance.MapTimePassed= (Int32)(DateTime.Now - startMapTime).TotalSeconds;
                StateProvider.Instance.PreHouseTime = (Int32)(DateTime.Now - startHouseTime).TotalSeconds;
                runningStep = RunningStep.None;
                if (smresult == ZTResult.Success)