예제 #1
0
 void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
 {
     if (e.RowIndex >= 0 && dataGridView1.Rows[e.RowIndex].IsNewRow)
     {
         var ofd = new OpenFileDialog {Filter = "Profile file|*.xml", Title = "Browse to profile"};
         if (ofd.ShowDialog() == DialogResult.OK)
         {
             //dataGridView1.Rows.Add(Path.GetFileName(ofd.FileName), ofd.FileName, 0, 0);
             var p = new Profile();
             p.Location = ofd.FileName;
             p.Name = Path.GetFileName(ofd.FileName);
             p.Runs = 0;
             p.Minutes = 0;
             dataGridView1.DataSource = null;
             Profiles.Add(p);
             dataGridView1.DataSource = Profiles;
             dataGridView1.Columns["isDone"].Visible = false;
         }
     }
 }
 public ProfileScheduleClass()
 {
     Current = new Profile {IsDone = true};
     Profiles = new BindingList<Profile>();
 }
예제 #3
0
        public void Start(bool noprofile = false, string profilepath = null, bool crashtenderstart = false)
        {
            if (!Parent.IsStarted || !Parent.Diablo.IsRunning || (_crashTenderRestart && !crashtenderstart))
                return;
            if (!File.Exists(Location))
            {
                Logger.Instance.Write("File not found: {0}", Location);
                return;
            }

            while (Parent.IsStarted && Parent.Diablo.IsRunning)
            {
                // Get Last login time and kill old session
                if (GetLastLoginTime)
                    BuddyAuth.Instance.KillSession(Parent);

                _isStopped = false;

                // Reset AntiIdle;
                Parent.AntiIdle.Reset(true);

                string arguments = "-pid=" + Parent.Diablo.Proc.Id;
                arguments += " -key=" + Key;
                arguments += " -autostart";
                arguments += string.Format(" -routine=\"{0}\"", CombatRoutine);
                arguments += string.Format(" -bnetaccount=\"{0}\"", Parent.Diablo.Username);
                arguments += string.Format(" -bnetpassword=\"{0}\"", Parent.Diablo.Password);

                if (profilepath != null)
                {
                    // Check if current profile path is Kickstart
                    string file = Path.GetFileName(profilepath);
                    if (file == null || (file.Equals("YAR_Kickstart.xml") || file.Equals("YAR_TMP_Kickstart.xml")))
                        profilepath = Parent.ProfileSchedule.Current.Location;

                    var profile = new Profile {Location = profilepath};
                    string path = ProfileKickstart.GenerateKickstart(profile);
                    Logger.Instance.Write("Using Profile {0}", path);
                    arguments += string.Format(" -profile=\"{0}\"", path);
                }
                else if (Parent.ProfileSchedule.Profiles.Count > 0 && !noprofile)
                {
                    string path = Parent.ProfileSchedule.GetProfile;
                    Logger.Instance.Write("Using Scheduled Profile {0}", path);
                    if (File.Exists(path))
                        arguments += string.Format(" -profile=\"{0}\"", path);
                }
                else if (!noprofile)
                    Logger.Instance.Write(
                        "Warning: Launching Demonbuddy without a starting profile (Add a profile to the profilescheduler for this bot)");

                if (NoFlash)
                    arguments += " -noflash";
                if (AutoUpdate)
                    arguments += " -autoupdate";
                if (NoUpdate)
                    arguments += " -noupdate";

                if (ForceEnableAllPlugins)
                    arguments += " -YarEnableAll";

                Debug.WriteLine("DB Arguments: {0}", arguments);

                var p = new ProcessStartInfo(Location, arguments) {WorkingDirectory = Path.GetDirectoryName(Location)};
                p = UserAccount.ImpersonateStartInfo(p, Parent);

                // Check/Install latest Communicator plugin
                string plugin = string.Format("{0}\\Plugins\\YAR\\Plugin.cs", p.WorkingDirectory);
                if (!PluginVersionCheck.Check(plugin))
                    PluginVersionCheck.Install(plugin);

                DateTime timeout;
                try // Try to start Demonbuddy
                {
                    Parent.Status = "Starting Demonbuddy"; // Update Status
                    Proc = Process.Start(p);

                    if (Program.IsRunAsAdmin)
                        Proc.PriorityClass = General.GetPriorityClass(Priority);
                    else
                        Logger.Instance.Write(Parent, "Failed to change priority (No admin rights)");

                    // Set affinity
                    if (CpuCount != Environment.ProcessorCount)
                    {
                        ProcessorAffinity = AllProcessors; // set it to all ones
                        CpuCount = Environment.ProcessorCount;
                    }
                    Proc.ProcessorAffinity = (IntPtr) ProcessorAffinity;

                    Logger.Instance.Write(Parent, "Demonbuddy:{0}: Waiting for process to become ready", Proc.Id);

                    timeout = DateTime.Now;
                    while (true)
                    {
                        if (Program.Pause)
                        {
                            timeout = DateTime.Now;
                            return;
                        }
                        if (General.DateSubtract(timeout) > 30)
                        {
                            Logger.Instance.Write(Parent, "Demonbuddy:{0}: Failed to start!", Proc.Id);
                            Parent.Restart();
                            return;
                        }
                        Thread.Sleep(500);
                        try
                        {
                            Proc.Refresh();
                            if (Proc.WaitForInputIdle(100) || CrashChecker.IsResponding(MainWindowHandle))
                                break;
                        }
                        catch
                        {
                        }
                    }

                    if (_isStopped)
                        return;
                }
                catch (Exception ex)
                {
                    DebugHelper.Exception(ex);
                    Parent.Stop();
                }

                timeout = DateTime.Now;
                while (!FindMainWindow())
                {
                    if (General.DateSubtract(timeout) > 30)
                    {
                        MainWindowHandle = Proc.MainWindowHandle;
                        break;
                    }
                    Thread.Sleep(500);
                }

                // Window postion & resizing
                if (ManualPosSize)
                    AutoPosition.ManualPositionWindow(MainWindowHandle, X, Y, W, H, Parent);
                Logger.Instance.Write(Parent, "Demonbuddy:{0}: Process is ready", Proc.Id);

                // Wait for demonbuddy to be Initialized (this means we are logged in)
                // If we don't wait here the Region changeing for diablo fails!
                Logger.Instance.Write(Parent, "Demonbuddy:{0}: Waiting for demonbuddy to log into Diablo", Proc.Id);
                while (!IsInitialized && !_isStopped)
                    Thread.Sleep(1000);
                // We made to many attempts break here
                if (Parent.AntiIdle.FailedInitCount > 3)
                    break;
                if (!Parent.AntiIdle.IsInitialized)
                    continue; // Retry

                // We are ready to go
                Logger.Instance.Write(Parent, "Demonbuddy:{0}: Initialized! We are ready to go", Proc.Id);
                Parent.AntiIdle.FailedInitCount = 0; // only reset counter
                break;
            } // while (Parent.IsStarted && Parent.Diablo.IsRunning)
        }
예제 #4
0
 public ProfileScheduleClass()
 {
     Current  = new Profile();
     Profiles = new BindingList <Profile>();
 }
 private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
 {
     if (e.RowIndex >= 0 && dataGridView1.Rows[e.RowIndex].IsNewRow)
     {
         var ofd = new OpenFileDialog {Filter = "Profile file|*.xml", Title = "Browse to profile"};
         if (ofd.ShowDialog() == DialogResult.OK)
         {
             //dataGridView1.Rows.Add(Path.GetFileName(ofd.FileName), ofd.FileName, 0, 0);
             var p = new Profile
             {
                 Location = ofd.FileName,
                 Name = Path.GetFileName(ofd.FileName),
                 Runs = 0,
                 Minutes = 0,
                 DifficultyLevel = Difficulty.Disabled,
                 GoldTimer = 0,
             };
             dataGridView1.DataSource = null;
             Profiles.Add(p);
             dataGridView1.DataSource = Profiles;
             dataGridView1.Columns["isDone"].Visible = false;
             UpdateGridview();
         }
     }
 }
예제 #6
0
 public ProfileScheduleClass()
 {
     Current = new Profile();
     Profiles = new BindingList<Profile>();
 }
        public static string GenerateKickstart(Profile profile, bool tmpkickstart = false)
        {
            try
            {
                string path = Path.Combine(Path.GetDirectoryName(profile.Location),
                    string.Format("YAR{0}_Kickstart.xml", tmpkickstart ? "_TMP" : ""));

                if (File.Exists(path))
                {
                    Logger.Instance.Write("Delete old Kickstart profile: {0}", path);
                    File.Delete(path);
                }

                Logger.Instance.Write("Generate new Kickstart profile: {0}", path);
                string kickstartprofile = YarKickstart;
                // Replace stuff with current profile
                kickstartprofile = kickstartprofile.Replace("{profile}", profile.Name);
                kickstartprofile = kickstartprofile.Replace("{profile_path}", profile.Location);
                kickstartprofile = kickstartprofile.Replace("{delay}", Settings.Default.KickstartDelay.ToString());

                // Get current profile GameParams
                string gameparams = string.Empty;
                using (var reader = new StreamReader(profile.Location))
                {
                    string line;
                    // Read line for line and match with GameParamsRegex pattern to finde GameParams tag
                    while ((line = reader.ReadLine()) != null)
                    {
                        Match m = new Regex(GameParamsRegex).Match(line);
                        if (m.Success)
                        {
                            gameparams = m.Groups[1].Value;
                            break;
                        }
                    }
                }

                // GameParams not found
                if (gameparams == string.Empty)
                {
                    Logger.Instance.Write("Failed to get GameParams in profile: ", profile.Location);
                    Logger.Instance.Write("Using the profile without Kickstart!");
                    return profile.Location;
                }

                // Insert current profile GameParams
                kickstartprofile = kickstartprofile.Replace("{gameparams}", gameparams);

                // Write Kickstart file to disk
                using (var writer = new StreamWriter(path))
                {
                    writer.WriteLine(kickstartprofile);
                }

                // Return path for kickstart file
                return path;
            }
            catch (Exception ex)
            {
                Logger.Instance.Write("Failed to generate Kickstart profile: {0}", ex.Message);
                Logger.Instance.Write("Using the profile without Kickstart!");
                DebugHelper.Exception(ex);
                return profile.Location;
            }
        }