public BotController(ILogger logger, IPPather pather, DataConfig dataConfig, IConfiguration configuration) { this.logger = logger; this.pather = pather; this.DataConfig = dataConfig; this.areaDb = new AreaDB(logger, dataConfig); updatePlayerPostion.Start(); wowProcess = new WowProcess(); WowScreen = new WowScreen(logger, wowProcess); WowProcessInput = new WowProcessInput(logger, wowProcess); var frames = DataFrameConfiguration.LoadFrames(); var scad = new StartupConfigAddonData(); configuration.GetSection(StartupConfigAddonData.Position).Bind(scad); if (scad.Mode == "Network") { logger.LogInformation("Using NetworkedAddonDataProvider"); addonDataProvider = new NetworkedAddonDataProvider(logger, scad.myPort, scad.connectTo, scad.connectPort); } else { logger.LogInformation("Using AddonDataProvider"); addonDataProvider = new AddonDataProvider(WowScreen, frames); } AddonReader = new AddonReader(logger, DataConfig, areaDb, addonDataProvider); minimapNodeFinder = new MinimapNodeFinder(WowScreen, new PixelClassifier()); MinimapImageFinder = minimapNodeFinder as IImageProvider; addonThread = new Thread(AddonRefreshThread); addonThread.Start(); // wait for addon to read the wow state var sw = new Stopwatch(); sw.Start(); while (AddonReader.PlayerReader.Sequence == 0 || !Enum.GetValues(typeof(PlayerClassEnum)).Cast <PlayerClassEnum>().Contains(AddonReader.PlayerReader.PlayerClass)) { if (sw.ElapsedMilliseconds > 5000) { logger.LogWarning("There is a problem with the addon, I have been unable to read the player class. Is it running ?"); sw.Restart(); } Thread.Sleep(100); } logger.LogDebug($"Woohoo, I have read the player class. You are a {AddonReader.PlayerReader.PlayerClass}."); npcNameFinder = new NpcNameFinder(logger, WowScreen, WowProcessInput); WowScreen.AddDrawAction(npcNameFinder.ShowNames); //ActionFactory = new GoalFactory(AddonReader, logger, wowProcess, npcNameFinder); screenshotThread = new Thread(ScreenshotRefreshThread); screenshotThread.Start(); }
static void Main(string[] args) { int port = 9050; Parser.Default.ParseArguments <Options>(args) .WithParsed(o => { if (o.Port != 0) { port = o.Port; } }); CreateLogger(); WaitForProcess(); var wowProcess = new WowProcess(); var wowScreen = new WowScreen(logger, wowProcess); if (!DataFrameConfiguration.Exists()) { Log.Logger.Error("DataFrameConfiguration not exists"); CreateConfig(wowScreen); } else { var frames = DataFrameConfiguration.LoadFrames(); IDataProvider provider = new DataProvider(logger, wowScreen, frames); Server server = new Server(logger, port, provider); server.ListenServer(); } }
// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public static void ConfigureServices(IServiceCollection services) { var logger = new SerilogLoggerProvider(Log.Logger).CreateLogger(nameof(Program)); services.AddSingleton <Microsoft.Extensions.Logging.ILogger>(logger); if (DataFrameConfiguration.ConfigurationExists()) { var pather = GetPather(logger); var botController = new BotController(logger, pather); services.AddSingleton <IBotController>(botController); services.AddSingleton <IAddonReader>(botController.AddonReader); botController.InitialiseBot(); } else { services.AddSingleton <IBotController>(new ConfigBotController()); services.AddSingleton <IAddonReader>(new ConfigAddonReader()); } services.AddRazorPages(); services.AddServerSideBlazor(); //services.AddSingleton<RouteInfo>(botController.WowBot.RouteInfo); }
// This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 public void ConfigureServices(IServiceCollection services) { var logger = new SerilogLoggerProvider(Log.Logger).CreateLogger(nameof(Program)); services.AddSingleton(logger); var wowProcess = new WowProcess(); var wowScreen = new WowScreen(logger, wowProcess); wowScreen.GetRectangle(out var rect); var addonConfig = AddonConfig.Load(); var addonConfigurator = new AddonConfigurator(logger, addonConfig); if (!addonConfig.IsDefault() && !addonConfigurator.Installed()) { // At this point the webpage never loads so fallback to configuration page AddonConfig.Delete(); DataFrameConfiguration.RemoveConfiguration(); } if (DataFrameConfiguration.Exists() && !DataFrameConfiguration.IsValid(rect, addonConfigurator.GetInstalledVersion())) { // At this point the webpage never loads so fallback to configuration page DataFrameConfiguration.RemoveConfiguration(); } if (AddonConfig.Exists() && DataFrameConfiguration.Exists()) { var dataConfig = DataConfig.Load(); var pather = GetPather(logger, dataConfig); var botController = new BotController(logger, pather, dataConfig, Configuration); services.AddSingleton <IBotController>(botController); services.AddSingleton <IGrindSessionHandler>(botController.GrindSessionHandler); services.AddSingleton <IGrindSession>(botController.GrindSession); services.AddSingleton <IAddonReader>(botController.AddonReader); services.AddMatBlazor(); } else { services.AddSingleton <IBotController>(new ConfigBotController()); services.AddSingleton <IAddonReader>(new ConfigAddonReader()); } services.AddRazorPages(); services.AddServerSideBlazor(); services.AddBlazorTable(); }
private static void CreateConfig(WowScreen wowScreen) { // Requirement enabled addon var enabledAddon = wowScreen.GetBitmap(1, 1); var firstPixel = enabledAddon.GetPixel(0, 0); while (firstPixel.ToArgb() != System.Drawing.Color.Black.ToArgb()) { Log.Logger.Information("Addon not visible!"); Thread.Sleep(1000); enabledAddon = wowScreen.GetBitmap(1, 1); firstPixel = enabledAddon.GetPixel(0, 0); } // Enabled Addon visible Log.Logger.Information("Addon Visible"); var dataFrameMeta = DataFrameMeta.Empty; while (dataFrameMeta == DataFrameMeta.Empty) { var metaBmp = wowScreen.GetBitmap(5, 5); dataFrameMeta = DataFrameConfiguration.GetMeta(metaBmp); Thread.Sleep(1000); Log.Logger.Information("Enter Addon Configure mode!"); } wowScreen.GetRectangle(out var rect); var size = dataFrameMeta.EstimatedSize(rect); var screenshot = wowScreen.GetBitmap(size.Width, size.Height); var dataFrames = DataFrameConfiguration.CreateFrames(dataFrameMeta, screenshot); while (dataFrames.Count != dataFrameMeta.frames) { dataFrames = DataFrameConfiguration.CreateFrames(dataFrameMeta, screenshot); Thread.Sleep(1000); Log.Logger.Information($"Size missmatch {dataFrames.Count} != {dataFrameMeta.frames}"); } DataFrameConfiguration.SaveConfiguration(rect, null, dataFrameMeta, dataFrames); Log.Logger.Information("DataFrameConfiguration Saved!"); Log.Logger.Information("Leave Addon Configure mode!"); Log.Logger.Information("Please Restart!"); System.Console.ReadLine(); }