Ejemplo n.º 1
0
        private void CatchData_GetData_Click(object sender, EventArgs e)
        {
            CatchData = new DataJudge("0,0 @ 000000", "CatchData");
            CatchData_GetDataShow.Text = "";
            try
            {
                CatchData.XYToStr           = CatchData_CatchXY.Text;
                CatchData_GetDataShow.Text += CatchData.XYToStr + " @ ";

                string[] wh = CatchData_CatchWH.Text.Split(',');
                CatchData.Color             = FunctionBitmap.GetColorData(new Bitmap(CatchData_GamePicture.Image), CatchData.XYToStr, Convert.ToInt32(wh[0]), Convert.ToInt32(wh[1]));
                CatchData_GetDataShow.Text += CatchData.Color;
            }
            catch (Exception)
            {
                CatchData_GetDataShow.Text = "颜色信息获取失败,请检查" + Environment.NewLine + "    1.是否成功获取游戏窗口" + Environment.NewLine + "    2.数值输入是否错误";
            }
        }
Ejemplo n.º 2
0
 /// <summary>
 /// 判断给定数据和图像中的颜色数据是否一样(相似)
 /// </summary>
 /// <param name="data">需要判定的数据</param>
 /// <param name="rin">容许色差阈值(0~441)</param>
 /// <param name="OffsetX">X坐标偏移</param>
 /// <param name="OffsetY">Y坐标偏移</param>
 /// <returns></returns>
 public static bool Judge(DataJudge data, Bitmap bitmap = null, int rin = 0, int OffsetX = 0, int OffsetY = 0)
 {
     if (data == null)
     {
         throw new Exceptions.DataErrorException("给定的判定数据为 null !");
     }
     if (GlobalObject.GameHandle.IsSuccess)
     {
         if (bitmap == null)
         {
             bitmap = GameHandle.GetGameBitmap();
         }
         return(Judge(bitmap, data, rin, OffsetX, OffsetY));
     }
     else
     {
         throw new Exceptions.NoGameHandleException();
     }
 }
Ejemplo n.º 3
0
 /// <summary>
 /// 判断给定数据和图像中的颜色数据是否一样(相似)
 /// </summary>
 /// <param name="bmp">需要判断的游戏图像</param>
 /// <param name="data">需要判定的数据</param>
 /// <param name="rin">容许色差阈值(0~441)</param>
 /// <param name="OffsetX">X坐标偏移</param>
 /// <param name="OffsetY">Y坐标偏移</param>
 /// <returns></returns>
 private static bool Judge(Bitmap bmp, DataJudge data, int rin = 0, int OffsetX = 0, int OffsetY = 0)
 {
     lock (_locked)
     {
         // 更改ui控件显示
         GlobalObject.GetUIForm().ChangeJudgeCoordinate(data.XYToStr, 2);
         Delay(Random(2, 10));
         try
         {
             DataJudge DecisionData = new DataJudge($"{(data.XY.X + OffsetX).ToString()},{(data.XY.Y + OffsetY).ToString()} @ {FunctionBitmap.GetColorData(bmp, $"{(data.XY.X + OffsetX).ToString()},{(data.XY.Y + OffsetY).ToString()}", data.Width, data.Height)}", "取得数据-" + data.Name);
             if (!DecisionData.ColorCollection.IsExist())
             {
                 throw new Exceptions.DataErrorException("从图像中提取的颜色集合数据错误!");
             }
             else if ((DecisionData.ColorCollection.X != data.ColorCollection.X) || (DecisionData.ColorCollection.Y != data.ColorCollection.Y))
             {
                 throw new Exceptions.DataErrorException("从图像中提取的颜色集合与给定的判定数据大小不符合!");
             }
             for (int y = 0; y < DecisionData.ColorCollection.Y; y++)
             {
                 for (int x = 0; x < DecisionData.ColorCollection.X; x++)
                 {
                     if (!IsSimilarColor(DecisionData.ColorCollection[x, y], data.ColorCollection[x, y], rin))
                     {
                         return(false);
                     }
                 }
             }
             Delay(Random(2, 10));
             return(true);
         }
         finally
         {
             GlobalObject.GetUIForm().ChangeJudgeCoordinate(data.XYToStr, 1);
         }
     }
 }
Ejemplo n.º 4
0
        /// <summary>
        /// 超时系统
        /// </summary>
        public void OvertimeProcess()
        {
            Delay(200);
            if (Judge(DataJudgePonds.母港1))
            {
                return;
            }
            DateTime Pt  = DateTime.Now;//超时时刻
            TimeSpan Ptm = TimeSpan.Zero;

            Set_AddMessage("判定已超时。");
            Set_ChangeStatus($"{ExecutedNumber}:Lua 脚本判定已超时 {((int)Ptm.TotalSeconds).ToString()} 秒", Color.White, Color.Red);

            var 战斗中 = new DataJudge("387,3 @ 2DA9D7|41B8D3|5DC1D0", "战斗中");
            var 夜战中 = new DataJudge("386,6 @ 4EABCF|247A9C|004968", "夜战中");

            var 罗盘娘     = new DataJudge("398,128 @ 72706C|1B1915|191713|AFADA9", "罗盘娘");
            var 成果1     = new DataJudge("85,78 @ 24292C|FFF6F2|FFF6F2|FFF6F2|24292C", "成果1");
            var 成果2     = new DataJudge("49,78 @ 24292C|FFF6F2|FFF6F2|FFF6F2|24292C", "成果2");
            var 舰船掉落    = new DataJudge("756,437 @ 36A7AA|D3E3E3|72B9BA", "舰船掉落");
            var 旗舰大破    = new DataJudge("673,86 @ A2514D|FFD6D3|AF7879|8C343B", "旗舰大破");
            var 道具掉落    = new DataJudge("758,436 @ 2C989B|BCD0D1|A1C3C5|169396", "道具掉落(非舰船掉落)");
            var 追击与夜战突入 = new DataJudge("52,33 @ 1DBDC0|222D30|1F7073|1DBDC0", "不追击与夜战突入");
            var 进击与撤退   = new DataJudge("267,235 @ 718889|6A8A90|92B2BA", "进击与撤退");
            var 择阵型     = new DataJudge("442,184 @ FFF6F2|5C8F8E|D2D7D4", "选择阵型");
            var 择阵型摁下   = new DataJudge("442,184 @ FFF6F2|ED9A53|F9DAC6", "选择阵型(已摁下)");
            var 入渠舰船确认  = new DataJudge("495,397 @ 1E8786|80AEAC|FFF6F2", "舰船确认");

            while (true)
            {
                if (IsDisposed)
                {
                    this.Thread.Abort();            // 检测线程是否被关闭
                }
                Delay(1000);
                if (IsDisposed)
                {
                    this.Thread.Abort();
                }
                Ptm = DateTime.Now - Pt;
                Set_ChangeStatus($"{ExecutedNumber}:Lua 脚本判定已超时 {((int)Ptm.TotalSeconds).ToString()} 秒", Color.White, Color.Red);

                if (Judge(DataJudgePonds.母港1))
                {
                    Delay(200);
                    Set_AddMessage($"超时检测已结束,共超时: {((int)Ptm.TotalSeconds).ToString()}秒。");
                    return;
                }
                else if (Judge(DataJudgePonds.远征回港) ||
                         Judge(DataJudgePonds.远征归来1) ||
                         Judge(DataJudgePonds.远征归来2))
                {
                    Click(DataClickPonds.舰娘立绘); continue;
                }
                Delay(200);


                if (Judge(DataJudgePonds.左侧返回母港1) || Judge(DataJudgePonds.左侧返回母港2))
                {
                    Click(new DataClick("60,223|86,292", "左侧返回母港")); continue;
                }
                else if (Judge(战斗中) || Judge(夜战中))
                {
                    continue;
                }
                Delay(200);

                // 战斗地图中
                if (Judge(罗盘娘) || Judge(成果1) || Judge(成果2) ||
                    Judge(舰船掉落, null, 200) || Judge(旗舰大破) || Judge(道具掉落))
                {
                    Click(DataClickPonds.舰娘立绘); continue;
                }
                Delay(200);
                if (Judge(追击与夜战突入))
                {
                    Click(new DataClick("285,208|239,236|249,270|298,277|341,246|331,209", "追撃せず")); continue;
                }
                else if (Judge(进击与撤退))
                {
                    Click(new DataClick("500,208|460,239|467,271|516,277|552,246|546,214", "撤退")); continue;
                }

                // 入渠
                if (Judge(入渠舰船确认))
                {
                    Click(new DataClick("288,394|342,406", "入渠确认否"));
                }

                // 例外,将关闭线程
                if (Judge(择阵型) || Judge(择阵型摁下))
                {
                    Set_AddMessage("脚本遇到了侵蚀鱼雷的袭击已被击沉。");
                    this.StopThread();
                }
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// 检测进击时是否有破损船
 /// </summary>
 /// <param name="GroupMember"></param>
 /// <param name="DetectionStatus"></param>
 /// <returns></returns>
 public bool AdvancingDamagedReadiness(LuaTable GroupMember, int DetectionStatus)
 {
     using (Bitmap bmp = new Bitmap(this.GetGameBitmap))
     {
         if (!(Judge(new DataJudge("49,78 @ 24292C|FFF6F2|FFF6F2|FFF6F2|24292C", "成果2"), bmp) &&
               Judge(new DataJudge("762,443 @ CDDADB", "出击成果可点"), bmp, 80)))
         {
             throw new Exceptions.TimeOutException("进击检测破损页面判定异常错误!!");
         }
         var 进击大破1 = new DataJudge(new List <DataJudge>()
         {
             new DataJudge("312,208 @ 99403B|8D3834", "大破1"),
             new DataJudge("312,208 @ A94530|A14029", "黄脸大破1"),
             new DataJudge("312,208 @ A93430|A12D29", "红脸大破1"),
         });
         var 进击大破2 = new DataJudge(new List <DataJudge>()
         {
             new DataJudge("317,194 @ A94B46", "大破2"),
             new DataJudge("317,194 @ BD5034", "黄脸大破2"),
             new DataJudge("317,194 @ BD3734", "红脸大破2"),
         });
         var 进击中破1 = new DataJudge(new List <DataJudge>()
         {
             new DataJudge("312,202 @ FDBA5C|FDBA5C", "中破1"),
             new DataJudge("312,202 @ FBA94B|FBA84A", "黄脸中破1"),
             new DataJudge("312,202 @ FB984B|FB954A", "红脸中破1"),
         });
         var 进击中破2 = new DataJudge(new List <DataJudge>()
         {
             new DataJudge("315,192 @ FFBC5D|FDBA5C", "中破2"),
             new DataJudge("315,192 @ FDA848|FBA446", "黄脸中破2"),
             new DataJudge("315,192 @ FD9248|F98C45", "红脸中破2"),
         });
         var 进击小破1 = new DataJudge(new List <DataJudge>()
         {
             new DataJudge("318,197 @ F7E25A|F6E159", "小破1"),
             new DataJudge("318,197 @ F7BF42|F6BD3F", "黄脸小破1"),
             new DataJudge("318,197 @ F7A542|F6A13F", "红脸小破1"),
         });
         var 进击小破2 = new DataJudge(new List <DataJudge>()
         {
             new DataJudge("320,212 @ ECD856", "小破2"),
             new DataJudge("320,212 @ EFB43C", "黄脸小破2"),
             new DataJudge("320,212 @ EF973C", "红脸小破2"),
         });
         for (int j = 0; j < GroupMember.Keys.Count; j++)
         {
             if ((bool)GroupMember[j + 1])
             {
                 if (DetectionStatus <= 3)
                 {
                     for (int k = 0; k < 3; k++)
                     {
                         if (Judge(进击大破1[k], bmp, 0, 0, 45 * j) && Judge(进击大破2[k], bmp, 0, 0, 45 * j))
                         {
                             return(false);
                         }
                     }
                 }
                 if (DetectionStatus <= 2)
                 {
                     for (int k = 0; k < 3; k++)
                     {
                         if (Judge(进击中破1[k], bmp, 0, 0, 45 * j) && Judge(进击中破2[k], bmp, 0, 0, 45 * j))
                         {
                             return(false);
                         }
                     }
                 }
                 if (DetectionStatus <= 1)
                 {
                     for (int k = 0; k < 3; k++)
                     {
                         if (Judge(进击小破1[k], bmp, 0, 0, 45 * j) && Judge(进击小破2[k], bmp, 0, 0, 45 * j))
                         {
                             return(false);
                         }
                     }
                 }
             }
         }
     }
     return(true);
 }