public static void Run() { var bitmap = new Bitmap("E:\\dev\\venomsw\\images\\cropped_rune.png"); var scaled = ScaleBitmap(bitmap, bitmap.Width * 2, bitmap.Height * 2); //TODO debug only if (analyzer.ShouldGetRune(scaled)) { return; } TesseractEngine engine = new TesseractEngine(@"E:\\dev\\venomsw\\venomsw\\tessdata", "eng", EngineMode.Default, "venom"); engine.SetVariable("language_model_penalty_non_freq_dict_word", "1"); engine.SetVariable("language_model_penalty_non_dict_word", "1"); using (Page page = engine.Process(scaled, PageSegMode.SingleBlock)) { Console.WriteLine(page.GetText()); } scaled.Save("E:\\dev\\venomsw\\images\\cropped_rune3_nobg.png"); }
State DefineStates() { State teamSelection = new State("Team selection", 2); State teamConfirmation = new State("Team confirmation", 5); // can ask for more energy, have internet instability or go to the dungeon State internetInstability = new State("Internet instability", 5); // goes to team confirmation // if there's the need for more energy State moreEnergyRequired = new State("More energy required", 2); State energyShop = new State("Energy shop", 3); State energyBuyingConfirmation = new State("Energy buying confirmation", 3); State energyBuyingOk = new State("Energy buying ok", 3); State energyShopLeave = new State("Energy shop leave", 3); // goes to team selection // entered the dungeon State defeatRevive = new State("Defeat revive", 2); State defeated = new State("Defeated", 2); State victory = new State("Victory", 2); State victoryChest = new State("Victory Chest", 2); State runeGained = new State("Rune gained", 2); // get button State miscGained = new State("Misc gained", 2); // ok button // custom patterns Pattern.Load(); // selecting team teamSelection.roads = new Road[] { new Road(Pattern.Get("team_selection"), teamConfirmation, 537, 238) }; teamConfirmation.roads = new Road[] { new Road(Pattern.Get("more_energy_required"), energyShop, 0, 0), new Road(null, internetInstability, 0, 0), new Road(Pattern.Get("defeat_revive"), defeatRevive, 425, 225), new Road(Pattern.Get("victory"), victory, 340, 65) }; // internet instability internetInstability.roads = new Road[] { new Road(null, teamConfirmation, 0, 0) }; // buying more energy energyShop.roads = new Road[] { new Road(Pattern.Get("energy_shop"), energyBuyingConfirmation, 0, 0) }; energyBuyingConfirmation.roads = new Road[] { new Road(Pattern.Get("energy_buying_confirmation"), energyBuyingOk, 0, 0) }; energyBuyingOk.roads = new Road[] { new Road(Pattern.Get("energy_buying_ok"), energyShopLeave, 0, 0) }; energyShopLeave.roads = new Road[] { new Road(Pattern.Get("energy_shop_leave"), teamSelection, 0, 0) }; // farming defeatRevive.roads = new Road[] { new Road(Pattern.Get("defeated"), defeated, 350, 70) }; defeated.roads = new Road[] { new Road(Pattern.Get("dungeon_replay"), teamSelection, 240, 190) }; victory.roads = new Road[] { new Road(Pattern.Get("victory"), victoryChest, 340, 65, null, 1) }; victoryChest.roads = new Road[] { new Road(Pattern.Get("rune_gained"), runeGained, 390, 275, (r) => { Bitmap screen = User32.CaptureApplication(PROCESS_NAME); Rectangle crop = r.pattern.coordinates; float ratio = r.pattern.GetRatio(screen); crop.X = (int)(crop.X * ratio); crop.Y = (int)(crop.Y * ratio); crop.Width = (int)(crop.Width * ratio); crop.Height = (int)(crop.Height * ratio); Bitmap cropped = Comparer.Crop(screen, crop); //TODO verify instead of just call analyzer.ShouldGetRune(cropped); try { cropped.Save(PATH + "\\runes\\rune_" + runesAcquired + ".png"); } catch (Exception e) { Console.WriteLine("Exception: " + e.Message); } }), new Road(Pattern.Get("misc_gained"), miscGained, 340, 280), new Road(Pattern.Get("victory"), victoryChest, 340, 65, null, 1) }; // try again runeGained.roads = new Road[] { new Road(Pattern.Get("dungeon_replay"), teamSelection, 240, 190) }; miscGained.roads = new Road[] { new Road(Pattern.Get("dungeon_replay"), teamSelection, 240, 190) }; return(teamSelection); // starting node }