public object Clone()
        {
            var clone = new BotClass
            {
                AntiIdle            = AntiIdle.Copy(),
                ChartStats          = ChartStats.Copy(),
                CreateWindowsUser   = CreateWindowsUser.Copy(),
                D3PrefsLocation     = D3PrefsLocation.Copy(),
                Demonbuddy          = Demonbuddy.Copy(),
                Description         = Description.Copy(),
                Diablo              = Diablo.Copy(),
                DiabloCloneLocation = DiabloCloneLocation.Copy(),
                Name                = Name.Copy(),
                ProfileSchedule     = new ProfileScheduleClass(),
                UseDiabloClone      = UseDiabloClone.Copy(),
                UseWindowsUser      = UseWindowsUser.Copy(),
                Week                = Week.Copy(),
                WindowsUserName     = WindowsUserName.Copy(),
                WindowsUserPassword = WindowsUserPassword.Copy()
            };

            foreach (var profile in ProfileSchedule.Profiles)
            {
                clone.ProfileSchedule.Profiles.Add(profile);
            }
            return(clone);
        }
Beispiel #2
0
 public BotClass()
 {
     Name        = string.Empty;
     Description = String.Empty;
     AntiIdle    = new AntiIdleClass();
     ChartStats  = new ChartStats();
 }
Beispiel #3
0
        public void StatsUpdaterWorker()
        {
            // Wait here till mainform is up
            while (Program.Mainform == null)
            {
                Thread.Sleep(100);
            }

            var  usages   = new CpuRamUsage();
            long totalRam = PerformanceInfo.GetTotalMemory();

            prepareMainGraphCpu();
            prepareMainGraphMemory();
            prepareMainGraphConnections();
            prepareMainGraphGold();
            while (true)
            {
                // Update Cpu/Ram Usage
                usages.Update();

                double diabloCpuUsage     = 0;
                long   diabloRamUsage     = 0;
                int    diabloCount        = 0;
                double demonbuddyCpuUsage = 0;
                long   demonbuddyRamUsage = 0;
                int    demonbuddyCount    = 0;
                double goldPerHour        = 0;
                double totalGold          = 0;
                lock (BotSettings.Instance)
                {
                    foreach (BotClass bot in BotSettings.Instance.Bots.ToList())
                    {
                        ChartStats chartStats = bot.ChartStats;
                        // Update bot uptime
                        bot.RunningTime = bot.IsRunning
                            ? DateTime.UtcNow.Subtract(bot.StartTime).ToString(@"hh\hmm\mss\s")
                            : "";

                        // Update bot specific Chart stats
                        CreateChartStats(bot, Program.Mainform.GoldStats, ChartValueType.Double);

                        if (bot.IsRunning)
                        {
                            #region Calculate System Usage

                            if (bot.Diablo.IsRunning)
                            {
                                // Calculate total Cpu/Ram usage for Diablo
                                try
                                {
                                    CpuRamUsage.Usage usage = usages.GetUsageById(bot.Diablo.Proc.Id);
                                    diabloCpuUsage += usage.Cpu;
                                    diabloRamUsage += usage.Memory;
                                    diabloCount++;
                                }
                                catch
                                {
                                }
                            }

                            if (bot.Demonbuddy.IsRunning)
                            {
                                // Calculate total Cpu/Ram usage for Demonbuddy
                                try
                                {
                                    CpuRamUsage.Usage usage = usages.GetUsageById(bot.Demonbuddy.Proc.Id);
                                    demonbuddyCpuUsage += usage.Cpu;
                                    demonbuddyRamUsage += usage.Memory;
                                    demonbuddyCount++;
                                }
                                catch
                                {
                                }
                            }

                            #endregion

                            #region Gold Stats

                            chartStats.GoldStats.Update(bot); // Update Current bot

                            // Calculate total gold for all bots
                            goldPerHour += chartStats.GoldStats.GoldPerHour;
                            totalGold   += chartStats.GoldStats.LastCoinage;

                            Series serie = Program.Mainform.GoldStats.Series.FirstOrDefault(x => x.Name == bot.Name);
                            if (serie != null)
                            {
                                updateMainformGraph(Program.Mainform.GoldStats, serie.Name,
                                                    Math.Round(chartStats.GoldStats.GoldPerHour), (int)Settings.Default.StatsGphHistory,
                                                    autoscale: true);
                            }

                            #endregion
                        }
                    }
                }
                try
                {
                    // add to Cpu graph
                    Chart  graph    = Program.Mainform.CpuUsage;
                    double allusage = diabloCpuUsage + demonbuddyCpuUsage;
                    updateMainformGraph(graph, "All Usage", allusage,
                                        legend: string.Format("All usage: {0,11}%", allusage.ToString("000.0")),
                                        limit: (int)Settings.Default.StatsCPUHistory);
                    updateMainformGraph(graph, "Diablo", diabloCpuUsage,
                                        legend: string.Format("Diablo: {0,16}%", diabloCpuUsage.ToString("000.0")),
                                        limit: (int)Settings.Default.StatsCPUHistory);
                    updateMainformGraph(graph, "Demonbuddy", demonbuddyCpuUsage,
                                        legend: string.Format("Demonbuddy: {0,4}%", demonbuddyCpuUsage.ToString("000.0")),
                                        limit: (int)Settings.Default.StatsCPUHistory);
                    updateMainformGraph(graph, "Total System", Math.Round(usages.TotalCpuUsage, 2),
                                        legend: string.Format("Total System: {0,2}%", usages.TotalCpuUsage.ToString("000.0")),
                                        limit: (int)Settings.Default.StatsCPUHistory);

                    // add to Memory graph
                    graph    = Program.Mainform.MemoryUsage;
                    allusage = (double)(diabloRamUsage + demonbuddyRamUsage) / totalRam * 100;
                    double diablousage     = (double)diabloRamUsage / totalRam * 100;
                    double demonbuddyusage = (double)demonbuddyRamUsage / totalRam * 100;
                    updateMainformGraph(graph, "All Usage", allusage,
                                        legend:
                                        string.Format("All usage: {0,11}%",
                                                      ((double)(diabloRamUsage + demonbuddyRamUsage) / totalRam * 100).ToString("000.0")),
                                        limit: (int)Settings.Default.StatsMemoryHistory);
                    updateMainformGraph(graph, "Diablo", diablousage,
                                        legend: string.Format("Diablo: {0,16}%", diablousage.ToString("000.0")),
                                        limit: (int)Settings.Default.StatsMemoryHistory);
                    updateMainformGraph(graph, "Demonbuddy", demonbuddyusage,
                                        legend: string.Format("Demonbuddy: {0,4}%", demonbuddyusage.ToString("000.0")),
                                        limit: (int)Settings.Default.StatsMemoryHistory);
                    double mem = (double)PerformanceInfo.GetPhysicalUsedMemory() / totalRam * 100;
                    updateMainformGraph(graph, "Total System", mem,
                                        legend: string.Format("Total System: {0,2}%", mem.ToString("000.0")),
                                        limit: (int)Settings.Default.StatsMemoryHistory);

                    // add to Connection graph
                    updateMainformGraph(Program.Mainform.CommConnections, "Connections", Communicator.StatConnections,
                                        legend: string.Format("Connections {0}", Communicator.StatConnections), autoscale: true,
                                        limit: (int)Settings.Default.StatsConnectionsHistory);
                    updateMainformGraph(Program.Mainform.CommConnections, "Failed", Communicator.StatFailed,
                                        legend: string.Format("Failed {0}", Communicator.StatFailed), autoscale: true,
                                        limit: (int)Settings.Default.StatsConnectionsHistory);
                    Communicator.StatConnections = 0;
                    Communicator.StatFailed      = 0;

                    // add to Gold Graph
                    updateMainformGraph(Program.Mainform.GoldStats, "Gph", Math.Round(goldPerHour),
                                        legend: string.Format("Gph {0}", Math.Round(goldPerHour)), autoscale: true,
                                        limit: (int)Settings.Default.StatsGphHistory);
                    updateMainformLabel(Program.Mainform.CashPerHour,
                                        string.Format("{0:C2}", (goldPerHour / 1000000 * (double)Settings.Default.StatsGoldPrice)));
                    updateMainformLabel(Program.Mainform.CurrentCash,
                                        string.Format("{0:C2}", (totalGold / 1000000 * (double)Settings.Default.StatsGoldPrice)));
                    updateMainformLabel(Program.Mainform.TotalGold, string.Format("{0:N0}", totalGold));
                }
                catch (Exception ex)
                {
                    DebugHelper.Exception(ex);
                }
                Thread.Sleep((int)Settings.Default.StatsUpdateRate);
            }
        }