예제 #1
0
        private void UpdateSaints(IEnumerable <Saint> saints)
        {
            var party     = LiveDataService.ReadParty().ToList();
            var saintList = saints.ToList();

            if (saintList.Any())
            {
                var sb = new StringBuilder();
                foreach (var saint in saintList)
                {
                    sb.AppendLine(saint.Clue);
                    var alreadyKnown = (from c in party
                                        where c.HasSaint(saint.Id)
                                        select c.ShortName).ToList();

                    if (alreadyKnown.Any())
                    {
                        sb.AppendLine("Known by: " + string.Join(", ", alreadyKnown) + ".");
                    }

                    sb.AppendLine();
                }
                Messages = sb.ToString();
            }
        }
예제 #2
0
 private static void DoListenMenu(string[] args)
 {
     StartLiveDataService(() =>
     {
         LiveDataService.MonitorCurrentScreen(menu =>
         {
             Console.WriteLine();
             Console.WriteLine(menu);
         });
     });
 }
예제 #3
0
        public void Start()
        {
            if (!IsListening)
            {
                IsListening = true;

                LiveDataService.MonitorCurrentScreen(OnScreenUpdated);
                LiveDataService.MonitorFormulae(UpdateFormulae);
                LiveDataService.MonitorSaints(UpdateSaints);
            }
        }
예제 #4
0
        private void OnConnected(bool isConnected)
        {
            Title = "Darklands Companion - " +
                    (isConnected ? "Connected" : "Looking for Darklands process...");
            IsConnected = isConnected;

            if (isConnected && !MessageVm.IsListening)
            {
                MessageVm.Start();

                LiveDataService.MonitorDate(OnDateChanged);
            }
        }
예제 #5
0
        public bool Start()
        {
            var path = ConfigurationService.GetDarklandsPath(ConfigType.DarklandsCompanion);

            if (StaticDataService.SetDarklandsPath(path))
            {
                LiveDataService.ConnectionMonitor += OnConnected;
                LiveDataService.Connect();

                return(true);
            }
            MessageVm.Messages = "Error: Cannot find Darklands from the folder '" + path + "'";

            return(false);
        }
예제 #6
0
        private static void StartLiveDataService(Action callback)
        {
            LiveDataService.ConnectionMonitor += connected =>
            {
                if (connected)
                {
                    Console.WriteLine("Darklands process found.");
                    callback();
                }
                else
                {
                    Console.WriteLine("Searching for Darklands process...");
                }
            };

            LiveDataService.Connect();
        }
예제 #7
0
        private void UpdateFormulae(IEnumerable <Formula> formulae)
        {
            var formulaList = formulae.ToList();

            if (_currentScreen == ScreenType.Alchemist &&
                formulaList.Count == 4)    // ackward hack #1
            {
                // #1 when entring the the alchemy screen memory section contains
                // 3 last formulaList and text 'potions'. Skip that.
                var party = LiveDataService.ReadParty().ToList();


                var sb = new StringBuilder();
                foreach (var f in formulaList)
                {
                    var formula = f;

                    var ingredientsWithNames =
                        from ing in formula.Ingrediens
                        let item = StaticDataService.ItemDefinitions.FirstOrDefault(i => i.Id == ing.ItemCode)
                                   select string.Format("{0} ({1})", (item != null ? item.ShortName : "???"), ing.Quantity);

                    var alreadyKnown = (from c in party
                                        where c.HasFormula(formula.Id)
                                        select c.ShortName).ToList();

                    sb.AppendLine(f.FullName + " (" + f.Quality + ") " +
                                  (alreadyKnown.Any() ? string.Join(", ", alreadyKnown) : string.Empty));
                    sb.AppendLine(string.Join(", ", ingredientsWithNames));

                    sb.AppendLine(f.Description);
                    sb.AppendLine();
                }

                Messages = sb.ToString();
            }
        }
예제 #8
0
 private static void DoListFormulae(string[] args)
 {
     if (args.Length == 1 || args[1] == "list")
     {
         foreach (var l in StaticDataService.Formulae)
         {
             Console.WriteLine(l);
         }
     }
     else if (args[1] == "listen")
     {
         StartLiveDataService(() =>
         {
             LiveDataService.MonitorFormulae(formulae =>
             {
                 Console.WriteLine();
                 foreach (var f in formulae)
                 {
                     Console.WriteLine(f);
                 }
             });
         });
     }
 }
예제 #9
0
 private static void DoListSaints(string[] args)
 {
     if (args.Length == 1 || args[1] == "list")
     {
         foreach (var l in StaticDataService.Saints)
         {
             Console.WriteLine(l);
         }
     }
     else if (args[1] == "listen")
     {
         StartLiveDataService(() =>
         {
             LiveDataService.MonitorSaints(saints =>
             {
                 Console.WriteLine();
                 foreach (var s in saints)
                 {
                     Console.WriteLine(s);
                 }
             });
         });
     }
 }
예제 #10
0
        private static void DoMonitorMemory(string[] args)
        {
            StartLiveDataService(() =>
            {
                var numEv = 0x50;
                LiveDataService.MonitorMemory(0x8B0A070, numEv * 0x40, bytes =>
                {
                    Console.WriteLine(DateTime.Now);
                    var s = new ByteStream(bytes);

                    var ev = new List <Event>(numEv);
                    for (var i = 0; i < numEv; i++)
                    {
                        var offset = i * (Event.EventSize + 0x40 - Event.EventSize);
                        var e      = new Event(s, offset);
                        if (e.IsActiveQuest)
                        {
                            Console.WriteLine(e.CreateDate + " - " + e.ExpireDate);
                        }
                        ev.Add(e);
                    }
                });
            });
        }
예제 #11
0
 public void Stop()
 {
     LiveDataService.Stop();
 }
 public CardsController(ILogger <CardsController> logger, LiveDataService liveDataService)
 {
     _logger          = logger;
     _liveDataService = liveDataService;
 }
예제 #13
0
 public LivedataController(ILogger <LivedataController> logger, LiveDataService liveDataService)
 {
     _logger          = logger;
     _liveDataService = liveDataService;
 }
예제 #14
0
        private void UpdateResults()
        {
            var sb = new StringBuilder();

            if (string.IsNullOrEmpty(Filter))
            {
                sb.AppendLine(DefaultText);
            }
            else if (Filter.ToLower().StartsWith("help"))
            {
                sb.AppendLine(_helpText);
            }
            else
            {
                var buffFilter = SaintBuffManager.FindFilter(Filter);
                if (buffFilter == null)
                {
                    return;
                }

                var party = LiveDataService.ReadParty().ToList();

                IEnumerable <int> knownSaintIds = null;
                if (KnownOnly)
                {
                    knownSaintIds = (from c in party
                                     select c.SaintBitmask.SaintIds).SelectMany(s => s).Distinct();
                }

                var matchingSaints = StaticDataService.FilterSaints(buffFilter, knownSaintIds).ToList();
                if (matchingSaints.Any())
                {
                    sb.AppendLine("Known saints with bonus to '" + buffFilter.Name + "': ");
                    sb.AppendLine();

                    foreach (var s in matchingSaints)
                    {
                        var saint = s;

                        sb.AppendFormat("{0}: {1}", saint.ShortName, saint.GetBuff(buffFilter.Name));

                        var knownBy = (from c in party
                                       where c.SaintBitmask.HasSaint(saint.Id)
                                       select c.ShortName).ToList();

                        if (knownBy.Any())
                        {
                            sb.AppendFormat(" ({0})", string.Join(", ", knownBy));
                        }

                        sb.AppendLine();
                    }
                }
                else
                {
                    sb.AppendLine("No one in the party knows saints with buff to '" + buffFilter.Name + "'.");
                }
            }

            if (sb.Length > 0)
            {
                Result = sb.ToString();
            }
        }
예제 #15
0
 public SSEController(ILogger <SSEController> logger, LiveDataService livedata)
 {
     _logger   = logger;
     _livedata = livedata;
 }
예제 #16
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILogger <Startup> logger, LiveDataService liveDataService)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
            }

            app.UseStaticFiles();
            app.UseSpaStaticFiles();

            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                    name: "default",
                    pattern: "{controller}/{action=Index}/{id?}");

                if (env.IsDevelopment())
                {
                    endpoints.MapToVueCliProxy(
                        "{*path}",
                        new SpaOptions {
                        SourcePath = "ClientApp"
                    },
                        npmScript: "serve",
                        regex: "Compiled successfully");
                }

                // Add MapRazorPages if the app uses Razor Pages. Since Endpoint Routing includes support for many frameworks, adding Razor Pages is now opt -in.
                endpoints.MapRazorPages();
            });

            app.UseSpa(spa =>
            {
                spa.Options.SourcePath = "ClientApp";
            });

            try{
                liveDataService.InitService();
            }
            catch (System.Exception e)
            {
                logger.LogError($"Folders or files could not be created at startup :\n{e}");
            }
        }
예제 #17
0
 public PlayersController(ILogger <PlayersController> logger, LiveDataService liveDataService)
 {
     _logger          = logger;
     _liveDataService = liveDataService;
 }
예제 #18
0
 private void OnScreenUpdated(string screenName)
 {
     _currentScreen = LiveDataService.GetScreen(screenName);
 }