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>(); }
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) }
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(); } } }
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; } }