Пример #1
0
 public void Start(Hero hero, GameMode mode)
 {
     GameState = new CurrentGameState {Me = {HeroData = hero}, GameMode = mode};
     var thread = new Thread(o => { MainBotLoop(); });
     thread.Start();
 }
Пример #2
0
        public static bool UpdateHeroMounted(CurrentGameState state)
        {
            if (ShouldBringToFront) ControlInput.BringHeroesToFront();
            Bitmap src;
            Bitmap sourceImage;
            Bitmap croppedImage;

            try
            {
                src = GrabScreenGDI(gameScreen);
                sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);

                Tools.Cropper.Rectangle = new Rectangle(0, 700, 70, 250);
                croppedImage = Tools.Cropper.Apply(sourceImage);

                var patternFinder = new ExhaustiveTemplateMatching(0.9f);

                var matches1 = patternFinder.ProcessImage(croppedImage, templateMounted);

                if (matches1.Length > 0)
                {
                    state.Me.IsMounted = true;
                }
                state.Me.IsMounted = false;
                src.Dispose();
                sourceImage.Dispose();
                croppedImage.Dispose();
            }
            catch (Exception e)
            {
            }
            finally
            {
            }
            return false;
        }
Пример #3
0
        public static void UpdateMinimap(CurrentGameState state)
        {
            TickNow();
            // if (heroPoints[0].Count == 0) return;
            var src = GrabScreenGDI(state.GameMode.MinimapRectangle);
            //var thresholded = ThresholdCropBitmap(src, new Rectangle(1450, 775, 450, 350), 200);
            var sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);
            src.Dispose();
            Tools.ColorFilter.Red = new IntRange(180, 255);
            Tools.ColorFilter.Green = new IntRange(180, 255);
            Tools.ColorFilter.Blue = new IntRange(180, 255);
            Tools.ColorFilter.ApplyInPlace(sourceImage);
            var grayScale = Grayscale.CommonAlgorithms.BT709.Apply(sourceImage);
            Tools.Thresholder.ThresholdValue = 1;
            Tools.Thresholder.ApplyInPlace(grayScale);
            var thresholded = Tools.GSToRgb.Apply(grayScale);
            var bc = new BlobCounter();
            bc.ProcessImage(thresholded);
            var blobs = bc.GetObjectsInformation().ToList();
            var debugPoints = new List<System.Drawing.Point>();
            try
            {
                blobs = blobs.Where(o => o.Rectangle.Width > 3 && o.Rectangle.Width < 7
                                         && o.Rectangle.Height > 3 && o.Rectangle.Height < 7).ToList();
                Point? cam = null;
                Point[] cams = {new Point()};
                for (var j = 0; j < blobs.Count; j++)
                {
                    cam = FindCamera(blobs[j].CenterOfGravity, blobs);
                    if (cam != null)
                    {
                        break;
                    }
                }

                if (cam.HasValue)
                    state.Me.HeroMinimapPosition =
                        new System.Drawing.Point((int) (cam.Value.X + state.GameMode.MinimapRectangle.X),
                            (int) (cam.Value.Y + state.GameMode.MinimapRectangle.Y));
            }
            catch (Exception e)
            {
            }
            src.Dispose();
            sourceImage.Dispose();
            MainWindow.DebugReaderStats("Minimap:" + TickNow());
            //DebugFountainShenaningans(state, debugPoints);
        }
Пример #4
0
        // beta
        public static void UpdateHeroes(CurrentGameState state)
        {
            TickNow();
            heroPoints[0].Clear();
            heroPoints[1].Clear();
            heroPoints[2].Clear();
            if (ShouldBringToFront) ControlInput.BringHeroesToFront();
            var src = GrabScreenGDI(new Rectangle(0, 78, 1024, 550));
            var sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);

            var grayScale = Grayscale.CommonAlgorithms.BT709.Apply(sourceImage);
            Tools.Thresholder.ThresholdValue = 128;
            Tools.Thresholder.ApplyInPlace(grayScale);

            var thresholded = Tools.GSToRgb.Apply(grayScale);

            var bc = new BlobCounter();
            bc.ProcessImage(thresholded);
            var blobs = bc.GetObjectsInformation().ToList();
            try
            {
                blobs =
                    blobs.Where(
                        o =>
                            o.Rectangle.Width > 80 && o.Rectangle.Width < 90 && o.Rectangle.Height < 20 &&
                            o.Rectangle.Height > 10).ToList();
                var i = 0;
                Bitmap bitmap = null;
                foreach (var blob in blobs)
                {
                    Tools.Cropper.Rectangle = new Rectangle(blob.Rectangle.X + 1,
                        blob.Rectangle.Y + 3,
                        blob.Rectangle.Width - 1,
                        4
                        );
                    var cropped = Tools.Cropper.Apply(src);
                    var imstat = new ImageStatistics(cropped);
                    //Console.WriteLine("R {0} G {1}", imstat.RedWithoutBlack.Median, imstat.GreenWithoutBlack.Median);
                    if (Math.Abs(imstat.RedWithoutBlack.Median - imstat.GreenWithoutBlack.Median) < 4)
                    {
                        state.Me.HeroScreenPosition = new System.Drawing.Point((int) blob.CenterOfGravity.X,
                            (int) blob.CenterOfGravity.Y + 150);
                        //state.Me.HeroHP = (float) (matches1.Length/120.0*100.0);
                        heroPoints[0].Add(
                            new OnScreenHero(
                                new System.Drawing.Point((int) blob.CenterOfGravity.X,
                                    (int) blob.CenterOfGravity.Y + 150),
                                0));
                    }
                    else if (imstat.RedWithoutBlack.Median > imstat.GreenWithoutBlack.Median)
                    {
                        heroPoints[1].Add(
                            new OnScreenHero(
                                new System.Drawing.Point((int) blob.CenterOfGravity.X,
                                    (int) blob.CenterOfGravity.Y + 150),
                                0));
                    }
                    else
                    {
                        heroPoints[2].Add(
                            new OnScreenHero(
                                new System.Drawing.Point((int) blob.CenterOfGravity.X,
                                    (int) blob.CenterOfGravity.Y + 150),
                                0));
                    }
                }
                state.FriendlyHeroes = heroPoints[2].ToArray();
                state.EnemyHeroes = heroPoints[1].ToArray();
            }
            catch (Exception e)
            {
            }

            MainWindow.DebugReaderStats("Heroes:" + TickNow());
            //DebugPlotVectorOnMap(state, null);
        }
Пример #5
0
        public static void UpdateHeroHP(CurrentGameState state)
        {
            TickNow();
            if (ShouldBringToFront) ControlInput.BringHeroesToFront();
            var src = GrabScreenGDI(new Rectangle(160, 695, 155, 1));
            var sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);

            Tools.ColorFilter.Red = new IntRange(50, 255);
            Tools.ColorFilter.Green = new IntRange(50, 255);
            Tools.ColorFilter.Blue = new IntRange(0, 50);
            Tools.ColorFilter.ApplyInPlace(sourceImage);
            var grayScale = Grayscale.CommonAlgorithms.BT709.Apply(sourceImage);
            Tools.Thresholder.ThresholdValue = 1;
            Tools.Thresholder.ApplyInPlace(grayScale);
            state.Me.HeroHP = Tools.FindHorizontalLineLength(grayScale)/145f*100f;
            src.Dispose();
            MainWindow.DebugReaderStats("HeroHP:" + TickNow());
        }
Пример #6
0
        public static void UpdateEverythingOptimized(CurrentGameState state)
        {
            Bitmap src;
            Bitmap sourceImage;
            Bitmap croppedImage;
            Bitmap grayScale;
            Bitmap thresholded;
            ControlInput.SendKey(Keys.Space);
            ShouldBringToFront = false;
            while (true)
            {
                #region HPCheck

                try
                {
                    ControlInput.BringHeroesToFront();
                    src = GrabScreenGDI(gameScreen);
                    sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);
                    Tools.Cropper.Rectangle = new Rectangle(200, 970, 265, 30);
                    croppedImage = Tools.Cropper.Apply(sourceImage);
                    Tools.ColorFilter.Red = new IntRange(50, 255);
                    Tools.ColorFilter.Green = new IntRange(50, 255);
                    Tools.ColorFilter.Blue = new IntRange(0, 50);
                    Tools.ColorFilter.ApplyInPlace(croppedImage);
                    grayScale = Grayscale.CommonAlgorithms.BT709.Apply(croppedImage);
                    Tools.Thresholder.ThresholdValue = 1;
                    Tools.Thresholder.ApplyInPlace(grayScale);
                    thresholded = Tools.GSToRgb.Apply(grayScale);

                    var bc = new BlobCounter();
                    bc.ProcessImage(thresholded);
                    var blobs = bc.GetObjectsInformation().ToList();
                    state.Me.HeroHP = 0;
                    try
                    {
                        blobs =
                            blobs.Where(o => o.Rectangle.Width > 1 && o.Rectangle.Height > 5)
                                .OrderBy(o => o.Rectangle.Width)
                                .ToList();
                        var i = 0;
                        foreach (var blob in blobs)
                        {
                            state.Me.HeroHP = (blob.Rectangle.Width/220f*100f);
                        }
                    }
                    catch (Exception e)
                    {
                    }

                    #endregion

                    if (state.Me.HeroHP <= 0) break;

                    #region UnitCheck

                    var unitPoints = new List<System.Drawing.Point>();
                    try
                    {
                        if (ShouldBringToFront) ControlInput.BringHeroesToFront();
                        Tools.Cropper.Rectangle = new Rectangle(0, 100, 1920, 740);
                        croppedImage = Tools.Cropper.Apply(sourceImage);
                        Tools.HSLFiltering.Hue = new IntRange(0, 3);
                        Tools.HSLFiltering.Saturation = new Range(0.8f, 1);
                        Tools.HSLFiltering.Luminance = new Range(0, 0.4f);
                        Tools.HSLFiltering.ApplyInPlace(croppedImage);
                        grayScale = Grayscale.CommonAlgorithms.BT709.Apply(croppedImage);
                        Tools.Thresholder.ThresholdValue = 1;
                        Tools.Thresholder.ApplyInPlace(grayScale);
                        Tools.HLengthSmoothing.MaxGapSize = 2;
                        Tools.VLengthSmoothing.MaxGapSize = 2;
                        Tools.HLengthSmoothing.ApplyInPlace(grayScale);
                        Tools.VLengthSmoothing.ApplyInPlace(grayScale);
                        thresholded = Tools.GSToRgb.Apply(grayScale);
                        bc.ProcessImage(thresholded);
                        blobs = bc.GetObjectsInformation().ToList();

                        blobs =
                            blobs.Where(
                                o =>
                                    !o.Rectangle.IntersectsWith(state.GameMode.MinimapRectangle) &&
                                    o.Rectangle.Width > 8 &&
                                    o.Rectangle.Width < 50 && o.Rectangle.Height >= 2 && o.Rectangle.Height < 4)
                                .ToList();
                        var i = 0;
                        foreach (var blob in blobs)
                        {
                            unitPoints.Add(new System.Drawing.Point((int) (blob.CenterOfGravity.X),
                                (int) (100 + blob.CenterOfGravity.Y)));
                        }
                    }
                    catch (Exception e)
                    {
                    }
                    state.EnemyCreepsNearby = unitPoints.ToArray();

                    unitPoints.Clear();
                    if (ShouldBringToFront) ControlInput.BringHeroesToFront();
                    try
                    {
                        Tools.Cropper.Rectangle = new Rectangle(0, 100, 1920, 740);
                        croppedImage = Tools.Cropper.Apply(sourceImage);
                        Tools.HSLFiltering.Hue = new IntRange(113, 122);
                        Tools.HSLFiltering.Saturation = new Range(0.8f, 1);
                        Tools.HSLFiltering.Luminance = new Range(0, 0.4f);
                        Tools.HSLFiltering.ApplyInPlace(croppedImage);

                        grayScale = Grayscale.CommonAlgorithms.BT709.Apply(croppedImage);
                        Tools.Thresholder.ThresholdValue = 1;
                        Tools.Thresholder.ApplyInPlace(grayScale);
                        Tools.HLengthSmoothing.MaxGapSize = 2;
                        Tools.VLengthSmoothing.MaxGapSize = 2;
                        Tools.HLengthSmoothing.ApplyInPlace(grayScale);
                        Tools.VLengthSmoothing.ApplyInPlace(grayScale);
                        thresholded = Tools.GSToRgb.Apply(grayScale);

                        bc = new BlobCounter();
                        bc.ProcessImage(thresholded);
                        //thresholded.Save("./images/unitdebug.png");
                        blobs = bc.GetObjectsInformation().ToList();

                        blobs =
                            blobs.Where(
                                o =>
                                    !o.Rectangle.IntersectsWith(state.GameMode.MinimapRectangle) &&
                                    o.Rectangle.Width > 8 &&
                                    o.Rectangle.Width < 50 && o.Rectangle.Height >= 2 && o.Rectangle.Height < 4)
                                .ToList();
                        var i = 0;
                        foreach (var blob in blobs)
                        {
                            unitPoints.Add(new System.Drawing.Point((int) (blob.CenterOfGravity.X - 12),
                                (int) (100 + blob.CenterOfGravity.Y)));
                        }
                    }
                    catch (Exception e)
                    {
                    }
                    state.FriendlyCreepsNearby = unitPoints.ToArray();

                    #endregion

                    #region TowerCheck

                    unitPoints = new List<System.Drawing.Point>();
                    try
                    {
                        //TickNow("unitSearchStart", dt);
                        if (ShouldBringToFront) ControlInput.BringHeroesToFront();
                        Tools.Cropper.Rectangle = new Rectangle(0, 100, 1920, 540);
                        croppedImage = Tools.Cropper.Apply(sourceImage);
                        Tools.HSLFiltering.Hue = new IntRange(36, 40);
                        Tools.HSLFiltering.Saturation = new Range(0.3f, 0.5f);
                        Tools.HSLFiltering.Luminance = new Range(0.3f, 0.55f);
                        Tools.HSLFiltering.ApplyInPlace(croppedImage);
                        grayScale = Grayscale.CommonAlgorithms.BT709.Apply(croppedImage);
                        Tools.Thresholder.ThresholdValue = 1;
                        Tools.Thresholder.ApplyInPlace(grayScale);
                        Tools.HLengthSmoothing.MaxGapSize = 6;
                        Tools.HLengthSmoothing.ApplyInPlace(grayScale);
                        thresholded = Tools.GSToRgb.Apply(grayScale);

                        bc.ProcessImage(thresholded);
                        blobs = bc.GetObjectsInformation().ToList();

                        blobs =
                            blobs.Where(
                                o =>
                                    !o.Rectangle.IntersectsWith(state.GameMode.MinimapRectangle) &&
                                    o.Rectangle.Width > 20 &&
                                    o.Rectangle.Width < 180 && o.Rectangle.Height > 6 && o.Rectangle.Height < 16)
                                .ToList();
                        var i = 0;
                        foreach (var blob in blobs)
                        {
                            var rc = new Rectangle(blob.Rectangle.X, blob.Rectangle.Y + 80, blob.Rectangle.Width,
                                blob.Rectangle.Height + 20);

                            Tools.Cropper.Rectangle = rc;
                            var cut = Tools.Cropper.Apply(sourceImage);
                            var res = Tools.TemplateMatcher.ProcessImage(cut, templateTower);
                            foreach (var r in res)
                            {
                                unitPoints.Add(new System.Drawing.Point(rc.X - 12, 100 + rc.Y + 350));
                            }
                        }
                    }
                    catch (Exception e)
                    {
                    }
                    state.TowersFound = unitPoints.ToArray();

                    #endregion

                    #region Hero Check

                    heroPoints[0].Clear();
                    heroPoints[1].Clear();
                    try
                    {
                        heroPoints[2].Clear();
                        if (ShouldBringToFront) ControlInput.BringHeroesToFront();
                        Tools.Cropper.Rectangle = new Rectangle(0, 100, 1920, 740);
                        croppedImage = Tools.Cropper.Apply(sourceImage);

                        grayScale = Grayscale.CommonAlgorithms.BT709.Apply(croppedImage);
                        Tools.Thresholder.ThresholdValue = 128;
                        Tools.Thresholder.ApplyInPlace(grayScale);

                        thresholded = Tools.GSToRgb.Apply(grayScale);
                        Tools.TemplateMatcher.SimilarityThreshold = 0.9f;

                        bc.ProcessImage(thresholded);
                        blobs = bc.GetObjectsInformation().ToList();
                        blobs =
                            blobs.Where(
                                o =>
                                    o.Rectangle.Width > 115 && o.Rectangle.Width < 130 && o.Rectangle.Height < 20 &&
                                    o.Rectangle.Height > 10).ToList();
                        var i = 0;
                        foreach (var blob in blobs)
                        {
                            var rect = blob.Rectangle;
                            rect.Offset(0, 100);
                            Tools.Cropper.Rectangle = blob.Rectangle;
                            var matches1 = Tools.TemplateMatcher.ProcessImage(Tools.Cropper.Apply(croppedImage),
                                templateMe);

                            if (matches1.Length > 1)
                            {
                                state.Me.HeroScreenPosition = new System.Drawing.Point((int) blob.CenterOfGravity.X,
                                    (int) blob.CenterOfGravity.Y + 250);
                                //state.Me.HeroHP = (float) (matches1.Length/120.0*100.0);
                                heroPoints[0].Add(
                                    new OnScreenHero(
                                        new System.Drawing.Point((int) blob.CenterOfGravity.X,
                                            (int) blob.CenterOfGravity.Y + 200),
                                        matches1.Length));
                                continue;
                            }
                            var matches2 = Tools.TemplateMatcher.ProcessImage(Tools.Cropper.Apply(croppedImage),
                                templateEnemy);

                            if (matches2.Length > 1)
                            {
                                heroPoints[1].Add(
                                    new OnScreenHero(
                                        new System.Drawing.Point((int) blob.CenterOfGravity.X,
                                            (int) blob.CenterOfGravity.Y + 200),
                                        matches2.Length));
                                continue;
                            }
                            var matches3 = Tools.TemplateMatcher.ProcessImage(Tools.Cropper.Apply(croppedImage),
                                templateFriend);
                            if (matches3.Length > 1)
                            {
                                heroPoints[2].Add(
                                    new OnScreenHero(
                                        new System.Drawing.Point((int) blob.CenterOfGravity.X,
                                            (int) blob.CenterOfGravity.Y + 200),
                                        matches3.Length));
                            }
                        }
                        state.FriendlyHeroes = heroPoints[2].ToArray();
                        state.EnemyHeroes = heroPoints[1].ToArray();
                    }
                    catch (Exception e)
                    {
                    }

                    #endregion

                    #region UpdateMinimap

                    var debugPoints = new List<System.Drawing.Point>();
                    try
                    {
                        Tools.Cropper.Rectangle = state.GameMode.MinimapRectangle;
                        Tools.ColorFilter.Red = new IntRange(180, 255);
                        Tools.ColorFilter.Green = new IntRange(180, 255);
                        Tools.ColorFilter.Blue = new IntRange(180, 255);
                        croppedImage = Tools.Cropper.Apply(sourceImage);
                        Tools.ColorFilter.ApplyInPlace(croppedImage);
                        croppedImage.Save("./debug/hsl.png");
                        grayScale = Grayscale.CommonAlgorithms.BT709.Apply(croppedImage);
                        Tools.Thresholder.ThresholdValue = 1;
                        Tools.Thresholder.ApplyInPlace(grayScale);
                        thresholded = Tools.GSToRgb.Apply(grayScale);

                        bc.ProcessImage(thresholded);
                        blobs = bc.GetObjectsInformation().ToList();

                        blobs = blobs.Where(o => o.Rectangle.Width > 4 && o.Rectangle.Width < 11
                                                 && o.Rectangle.Height > 4 && o.Rectangle.Height < 11).ToList();
                        Point? cam = null;
                        Point[] cams = {new Point()};
                        for (var j = 0; j < blobs.Count; j++)
                        {
                            cam = FindCamera(blobs[j].CenterOfGravity, blobs);
                            if (cam != null)
                            {
                                break;
                            }
                        }

                        foreach (var c in cams)
                        {
                            debugPoints.Add(new System.Drawing.Point((int) c.X, (int) c.Y));
                        }
                        if (cam.HasValue)
                            state.Me.HeroMinimapPosition = new System.Drawing.Point(
                                (int) (cam.Value.X + state.GameMode.MinimapRectangle.X),
                                (int) (cam.Value.Y + state.GameMode.MinimapRectangle.Y));
                    }
                    catch (Exception e)
                    {
                    }

                    #endregion

                    if (!state.IsPlayerSafe) break;

                    #region Check Mounted

                    if (ShouldBringToFront) ControlInput.BringHeroesToFront();
                    try
                    {
                        Tools.Cropper.Rectangle = new Rectangle(0, 700, 70, 250);
                        croppedImage = Tools.Cropper.Apply(sourceImage);

                        Tools.TemplateMatcher.SimilarityThreshold = 0.9f;

                        var matches1 = Tools.TemplateMatcher.ProcessImage(croppedImage, templateMounted);

                        if (matches1.Length > 0)
                        {
                            state.Me.IsMounted = true;
                        }
                        state.Me.IsMounted = false;
                    }
                    catch (Exception e)
                    {
                    }

                    #endregion

                    #region Has talents?

                    var canLevel = false;
                    try
                    {
                        if (ShouldBringToFront) ControlInput.BringHeroesToFront();
                        Tools.Cropper.Rectangle = new Rectangle(70, 1020, 105, 30);
                        croppedImage = Tools.Cropper.Apply(sourceImage);

                        Tools.TemplateMatcher.SimilarityThreshold = 0.9f;

                        var matches1 = Tools.TemplateMatcher.ProcessImage(croppedImage, templateHasTalents);

                        if (matches1.Length > 0)
                        {
                            canLevel = true;
                        }
                    }
                    catch (Exception e)
                    {
                    }
                    state.Me.CanLevelTalents = canLevel;

                    #endregion

                    if (!state.Me.CanLevelTalents) break;

                    #region Talent Scan

                    /*
                    try
                    {
                        Tools.Cropper.Rectangle = new Rectangle(48, 800, 390, 70);
                        croppedImage = Tools.Cropper.Apply(sourceImage);
                        state.Me.CharacterLevel = 1;
                        var patternFinder = new ExhaustiveTemplateMatching(0.9f);

                        var matches = patternFinder.ProcessImage(croppedImage, templateTalents4);
                        if (matches.Length == 1)
                        {
                            state.Me.CharacterLevel = 4;
                            return;
                        }
                        matches = patternFinder.ProcessImage(croppedImage, templateTalents7);
                        if (matches.Length == 1)
                        {
                            state.Me.CharacterLevel = 7;
                            return;
                        }
                        matches = patternFinder.ProcessImage(croppedImage, templateTalents10);
                        if (matches.Length == 1)
                        {
                            state.Me.CharacterLevel = 10;
                            return;
                        }
                        matches = patternFinder.ProcessImage(croppedImage, templateTalents13);
                        if (matches.Length == 1)
                        {
                            state.Me.CharacterLevel = 13;
                            return;
                        }
                        matches = patternFinder.ProcessImage(croppedImage, templateTalents16);
                        if (matches.Length == 1)
                        {
                            state.Me.CharacterLevel = 16;
                            return;
                        }
                        matches = patternFinder.ProcessImage(croppedImage, templateTalents20);
                        if (matches.Length == 1)
                        {
                            state.Me.CharacterLevel = 20;
                        }
                    }
                    catch (Exception e)
                    {
                    }
                    */

                    #endregion
                }
                catch (Exception e)
                {
                }
                break;
            }

            #region Dispose EVERYTHING

            #endregion
        }
Пример #7
0
        public static void UpdateHasTalents(CurrentGameState state)
        {
            if (ShouldBringToFront) ControlInput.BringHeroesToFront();
            var src = GrabScreenGDI(gameScreen);
            var sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);

            Tools.Cropper.Rectangle = new Rectangle(70, 1020, 105, 30);
            var croppedImage = Tools.Cropper.Apply(sourceImage);

            var patternFinder = new ExhaustiveTemplateMatching(0.9f);
            var canLevel = false;
            try
            {
                var matches1 = patternFinder.ProcessImage(croppedImage, templateHasTalents);

                if (matches1.Length > 0)
                {
                    canLevel = true;
                }
            }
            catch (Exception e)
            {
            }
            state.Me.CanLevelTalents = canLevel;
        }
Пример #8
0
        public static void UpdateCurrentTalentLevel(CurrentGameState state)
        {
            /*
            if (ShouldBringToFront) ControlInput.BringHeroesToFront();
            var src = GrabScreenGDI(gameScreen);
            var sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);

            Tools.Cropper.Rectangle = new Rectangle(48, 800, 390, 70);
            var croppedImage = Tools.Cropper.Apply(sourceImage);
            state.Me.CharacterLevel = 1;
            var patternFinder = new ExhaustiveTemplateMatching(0.9f);
            try
            {
                var matches = patternFinder.ProcessImage(croppedImage, templateTalents4);
                if (matches.Length == 1)
                {
                    state.Me.CharacterLevel = 4;
                    return;
                }
                matches = patternFinder.ProcessImage(croppedImage, templateTalents7);
                if (matches.Length == 1)
                {
                    state.Me.CharacterLevel = 7;
                    return;
                }
                matches = patternFinder.ProcessImage(croppedImage, templateTalents10);
                if (matches.Length == 1)
                {
                    state.Me.CharacterLevel = 10;
                    return;
                }
                matches = patternFinder.ProcessImage(croppedImage, templateTalents13);
                if (matches.Length == 1)
                {
                    state.Me.CharacterLevel = 13;
                    return;
                }
                matches = patternFinder.ProcessImage(croppedImage, templateTalents16);
                if (matches.Length == 1)
                {
                    state.Me.CharacterLevel = 16;
                    return;
                }
                matches = patternFinder.ProcessImage(croppedImage, templateTalents20);
                if (matches.Length == 1)
                {
                    state.Me.CharacterLevel = 20;
                }
            }
            catch (Exception e)
            {
            }

            }

            public static void UpdateCamps(CurrentGameState state)
            {
            var src = GrabScreenGDI(gameScreen);
            //var thresholded = ThresholdCropBitmap(src, new Rectangle(1450, 775, 450, 350), 200);
            var sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);
            src.Dispose();
            Tools.Cropper.Rectangle = state.GameMode.MinimapRectangle;
            Tools.HSLFiltering.Hue = new IntRange(30, 63);
            Tools.HSLFiltering.Luminance = new Range(0, 1);
            Tools.HSLFiltering.Saturation = new Range(0.9f, 1);
            var croppedImage = Tools.Cropper.Apply(sourceImage);
            Tools.HSLFiltering.ApplyInPlace(croppedImage);
            try
            {
                var matches = Tools.TemplateMatcher.ProcessImage(croppedImage, templateCampSmall);
                var bigmatches = Tools.TemplateMatcher.ProcessImage(croppedImage, templateCampBig);
                if (matches.Length > 0)
                {
                }
            }
            catch (Exception e)
            {
            }
             * */
        }
Пример #9
0
 public static void DetectSide(CurrentGameState state)
 {
     while (state.CurrentSide == CurrentGameState.FriendlySide.Undecided)
     {
         if (FindOnScreen("./images/ingame_blackheart_red_crown.png", 0.91f, false,
             new Rectangle(730, 540, 150, 300)) != null)
         {
             state.CurrentSide = CurrentGameState.FriendlySide.Right;
         }
         else if (FindOnScreen("./images/ingame_blackheart_red_crown.png", 0.91f, false,
             new Rectangle(880, 540, 150, 300)) != null)
         {
             state.CurrentSide = CurrentGameState.FriendlySide.Left;
         }
     }
 }
Пример #10
0
        public static void DebugPlotVectorOnMap(CurrentGameState state, System.Drawing.Point[] points = null)
        {
            if (state.FriendlyHeroes == null) return;
            var src = GrabScreenGDI(gameScreen);
            //var thresholded = ThresholdCropBitmap(src, new Rectangle(1450, 775, 450, 350), 200);
            var sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);
            src.Dispose();
            var gc = Graphics.FromImage(sourceImage);
            var greenBrush = new SolidBrush(Color.Lime);
            var redBrush = new SolidBrush(Color.Red);
            var font = new Font(SystemFonts.DefaultFont.FontFamily, 50);

            foreach (var point in state.TowersFound)
            {
                gc.DrawString("T", font, redBrush, point.X, point.Y);
            }
            foreach (var point in state.EnemyHeroes)
            {
                gc.DrawString("H", font, redBrush, point.Position.X, point.Position.Y);
            }
            foreach (var point in state.FriendlyHeroes)
                gc.DrawString("H", font, greenBrush, point.Position.X, point.Position.Y);

            foreach (var point in state.EnemyCreepsNearby)
                gc.DrawString("C", font, redBrush, point.X, point.Y);
            foreach (var point in state.FriendlyCreepsNearby)
                gc.DrawString("C", font, greenBrush, point.X, point.Y);

            try
            {
                var pp = new System.Drawing.Point();
                foreach (var p in points)
                {
                    gc.DrawEllipse(new Pen(Color.Magenta), p.X - 4, p.Y - 4, 8, 8);
                    if (!pp.IsEmpty)
                        gc.DrawLine(new Pen(Color.Lime), pp, p);
                    pp = p;
                }
            }
            catch (Exception e)
            {
            }

            gc.Dispose();
            sourceImage.Save("./debug/ss.png");
            sourceImage.Dispose();
        }
Пример #11
0
        public static void UpdateUnits(CurrentGameState state)
        {
            TickNow();
            var unitPoints = new List<System.Drawing.Point>();
            if (ShouldBringToFront) ControlInput.BringHeroesToFront();
            var src = GrabScreenGDI(new Rectangle(0, 100, 1024, 400));
            var sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);

            if (false)
            {
                Tools.HSLFiltering.Hue = new IntRange(358, 5);
                Tools.HSLFiltering.Saturation = new Range(0.3f, 1);
                Tools.HSLFiltering.Luminance = new Range(0, 0.4f);
                Tools.HSLFiltering.ApplyInPlace(sourceImage);
            }
            Tools.ColorFilter.Red = new IntRange(140, 180);
            Tools.ColorFilter.Green = new IntRange(0, 50);
            Tools.ColorFilter.Blue = new IntRange(0, 50);
            Tools.ColorFilter.ApplyInPlace(sourceImage);

            var grayScale = Grayscale.CommonAlgorithms.BT709.Apply(sourceImage);
            /*Tools.Thresholder.ThresholdValue = 1;
            Tools.Thresholder.ApplyInPlace(grayScale);
            Tools.HLengthSmoothing.MaxGapSize = 2;
            Tools.VLengthSmoothing.MaxGapSize = 2;
            Tools.HLengthSmoothing.ApplyInPlace(grayScale);
            Tools.VLengthSmoothing.ApplyInPlace(grayScale);*/
            var thresholded = Tools.GSToRgb.Apply(grayScale);
            var bc = new BlobCounter();
            bc.ProcessImage(thresholded);
            var blobs = bc.GetObjectsInformation().ToList();
            var gc = Graphics.FromImage(sourceImage);
            try
            {
                blobs =
                    blobs.Where(
                        o =>
                            !o.Rectangle.IntersectsWith(state.GameMode.MinimapRectangle) && o.Rectangle.Width > 4 &&
                            o.Rectangle.Width < 35 && o.Rectangle.Height == 1).ToList();
                var i = 0;
                foreach (var blob in blobs)
                {
                    unitPoints.Add(new System.Drawing.Point((int) (blob.CenterOfGravity.X),
                        (int) (100 + blob.CenterOfGravity.Y)));
                    //gc.DrawEllipse(new Pen(Color.White), blob.Rectangle.X - 4, blob.Rectangle.Y - 4, 8, 8 );
                }
            }
            catch (Exception e)
            {
            }

            //gc.Flush();
            state.EnemyCreepsNearby = unitPoints.ToArray();
            //sourceImage.Save("./debug/go.png");

            unitPoints.Clear();

            if (ShouldBringToFront) ControlInput.BringHeroesToFront();
            try
            {
                sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);
                if (false)
                {
                    Tools.HSLFiltering.Hue = new IntRange(112, 128);
                    Tools.HSLFiltering.Saturation = new Range(0.8f, 1);
                    Tools.HSLFiltering.Luminance = new Range(0, 0.4f);
                    Tools.HSLFiltering.ApplyInPlace(sourceImage);
                }
                Tools.ColorFilter.Red = new IntRange(0, 50);
                Tools.ColorFilter.Green = new IntRange(120, 160);
                Tools.ColorFilter.Blue = new IntRange(0, 50);
                Tools.ColorFilter.ApplyInPlace(sourceImage);
                grayScale = Grayscale.CommonAlgorithms.BT709.Apply(sourceImage);
                /*Tools.Thresholder.ThresholdValue = 1;
                Tools.Thresholder.ApplyInPlace(grayScale);
                Tools.HLengthSmoothing.MaxGapSize = 2;
                Tools.VLengthSmoothing.MaxGapSize = 2;
                Tools.HLengthSmoothing.ApplyInPlace(grayScale);
                Tools.VLengthSmoothing.ApplyInPlace(grayScale);*/
                thresholded = Tools.GSToRgb.Apply(grayScale);

                bc = new BlobCounter();
                bc.ProcessImage(thresholded);
                //thresholded.Save("./images/unitdebug.png");
                blobs = bc.GetObjectsInformation().ToList();

                blobs =
                    blobs.Where(
                        o =>
                            !o.Rectangle.IntersectsWith(state.GameMode.MinimapRectangle) && o.Rectangle.Width > 4 &&
                            o.Rectangle.Width < 35 && o.Rectangle.Height >= 2 && o.Rectangle.Height < 4).ToList();
                var i = 0;
                foreach (var blob in blobs)
                {
                    unitPoints.Add(new System.Drawing.Point((int) (blob.CenterOfGravity.X - 12),
                        (int) (100 + blob.CenterOfGravity.Y)));
                }
            }
            catch (Exception e)
            {
            }
            state.FriendlyCreepsNearby = unitPoints.ToArray();
            MainWindow.DebugReaderStats("Units:" + TickNow());
        }
Пример #12
0
        public static void UpdateTowers(CurrentGameState state)
        {
            TickNow();
            var unitPoints = new List<System.Drawing.Point>();
            try
            {
                //TickNow("unitSearchStart", dt);
                if (ShouldBringToFront) ControlInput.BringHeroesToFront();
                var src = GrabScreenGDI(new Rectangle(0, 100, 1024, 450));
                var sourceImage = ChangePixelFormat(src, PixelFormat.Format24bppRgb);
                Tools.ColorFilter.Red = new IntRange(100, 255);
                Tools.ColorFilter.Green = new IntRange(0, 10);
                Tools.ColorFilter.Blue = new IntRange(0, 10);
                var filtered = Tools.ColorFilter.Apply(sourceImage);
                var grayScale = Grayscale.CommonAlgorithms.BT709.Apply(filtered);
                var bc = new BlobCounter();
                bc.ProcessImage(filtered);
                var blobs = bc.GetObjectsInformation().ToList();

                blobs =
                    blobs.Where(
                        o =>
                            !o.Rectangle.IntersectsWith(state.GameMode.MinimapRectangle) && o.Rectangle.Width > 10 &&
                            o.Rectangle.Width < 100 && o.Rectangle.Height >= 3 && o.Rectangle.Height <= 5).ToList();
                var i = 0;
                var gc = Graphics.FromImage(sourceImage);
                foreach (var blob in blobs)
                {
                    var rc = new Rectangle(blob.Rectangle.X, blob.Rectangle.Y, 100, 20);
                    Tools.Cropper.Rectangle = rc;
                    var cut = Tools.Cropper.Apply(sourceImage);
                    var res = Tools.TemplateMatcher.ProcessImage(cut, templateTower);
                    foreach (var r in res)
                    {
                        gc.DrawRectangle(new Pen(Color.Magenta), rc.X, rc.Y, 100, 20);
                        unitPoints.Add(new System.Drawing.Point(rc.X - 12, 100 + rc.Y + 350));
                    }
                }
                sourceImage.Save("./debug/towaz.png");
            }
            catch (Exception e)
            {
            }
            state.TowersFound = unitPoints.ToArray();

            if (state.TowersFound.Length > 0) Console.WriteLine("TOWERS " + state.TowersFound.Length);
            MainWindow.DebugReaderStats("Towers:" + TickNow());
        }