private bool ClickOkayButton() { if (_okayText == null) { _okayText = _wowManager.Globals.GetValue("OKAY").String.Value; } var buttons = GetGlueDialogButtons().ToList(); var okayButton = buttons.FirstOrDefault(b => b.Text == _okayText); if (okayButton == null) { return(false); } // if there's only one button then we just need to press 'Enter' if (buttons.Count == 1) { _wowManager.Profile.Log("Pressing 'Enter' key to close dialog."); Utility.SendBackgroundKey(_wowManager.GameProcess.MainWindowHandle, (char)Keys.Enter, false); } else { _wowManager.Profile.Log("Clicking okay on dialog."); var clickPos = _wowManager.ConvertWidgetCenterToWin32Coord(okayButton); Utility.LeftClickAtPos(_wowManager.GameProcess.MainWindowHandle, (int)clickPos.X, (int)clickPos.Y, true); } return(true); }
void ChangeRealm() { if (_realmChangeSw.IsRunning && _realmChangeSw.Elapsed < TimeSpan.FromSeconds(5)) { return; } var changeRealmButton = UIObject.GetUIObjectByName <Button>(_wowManager, "CharSelectChangeRealmButton"); var clickPos = _wowManager.ConvertWidgetCenterToWin32Coord(changeRealmButton); Utility.LeftClickAtPos(_wowManager.GameProcess.MainWindowHandle, (int)clickPos.X, (int)clickPos.Y); _wowManager.Profile.Log("Changing server."); _realmChangeSw.Restart(); }
public static bool ClickButton(Frame obj, WowManager _wowManager) { if (obj != null) { var clickPos = _wowManager.ConvertWidgetCenterToWin32Coord(obj); Utility.LeftClickAtPos(_wowManager.GameProcess.MainWindowHandle, (int)clickPos.X, (int)clickPos.Y); return(true); } return(false); }
void ChangeRealm() { if (_realmChangeSw.IsRunning && _realmChangeSw.Elapsed < TimeSpan.FromSeconds(5)) { return; } if (UnableToSwitchRealm) { _wowManager.Profile.Log("Unable to switch realms. Trying a restart of WoW."); _wowManager.CloseGameProcess(); return; } var changeRealmButton = UIObject.GetUIObjectByName <Button>(_wowManager, "CharSelectChangeRealmButton"); var clickPos = _wowManager.ConvertWidgetCenterToWin32Coord(changeRealmButton); Utility.LeftClickAtPos(_wowManager.GameWindow, (int)clickPos.X, (int)clickPos.Y); _wowManager.Profile.Log("Changing server."); _realmChangeSw.Restart(); }
/// <summary> /// Handles the account selection on Login screen. /// </summary> /// <returns></returns> private bool HandleAccountSelectionOnLoginScreen() { var accountLoginDropDownText = UIObject.GetUIObjectByName <FontString>(_wowManager, "AccountLoginDropDownText"); if (accountLoginDropDownText == null || !accountLoginDropDownText.IsVisible || accountLoginDropDownText.Text.Equals(_wowManager.Settings.AcountName, StringComparison.InvariantCultureIgnoreCase)) { return(false); } var accountLoginDropDownButton = UIObject.GetUIObjectByName <Button>(_wowManager, "AccountLoginDropDownButton"); _wowManager.Profile.Log("Opening account selection drop-down"); var clickPos = _wowManager.ConvertWidgetCenterToWin32Coord(accountLoginDropDownButton); Utility.LeftClickAtPos(_wowManager.GameProcess.MainWindowHandle, (int)clickPos.X, (int)clickPos.Y, false); var dropdownList = UIObject.GetUIObjectByName <Frame>(_wowManager, "DropDownList1"); if (dropdownList == null || !dropdownList.IsVisible) { return(false); } var wantedButton = dropdownList.Children.OfType <Button>() .FirstOrDefault(b => b.Text.Equals(_wowManager.Settings.AcountName, StringComparison.InvariantCultureIgnoreCase)); if (wantedButton == null) { _wowManager.Profile.Log("Account name not found. Double check spelling"); return(false); } clickPos = _wowManager.ConvertWidgetCenterToWin32Coord(wantedButton); Utility.LeftClickAtPos(_wowManager.GameProcess.MainWindowHandle, (int)clickPos.X, (int)clickPos.Y, false); Thread.Sleep(4000); return(true); }
void ChangeRealm() { if (_realmChangeSw.IsRunning && _realmChangeSw.Elapsed < TimeSpan.FromSeconds(5)) { return; } if (UnableToSwitchRealm) { _wowManager.Profile.Log("Unable to switch realms. Trying a restart of WoW."); _wowManager.CloseGameProcess(); return; } // Inserts a delay before pressing button because pressing too fast causes the 'You have been disconnected' error. // See https://github.com/BosslandGmbH/HBRelog/issues/49 Thread.Sleep(4000); var changeRealmButton = UIObject.GetUIObjectByName <Button>(_wowManager, "CharSelectChangeRealmButton"); var clickPos = _wowManager.ConvertWidgetCenterToWin32Coord(changeRealmButton); Utility.LeftClickAtPos(_wowManager.GameWindow, (int)clickPos.X, (int)clickPos.Y); _wowManager.Profile.Log("Changing server."); _realmChangeSw.Restart(); }
public override void Run() { if (_wowManager.Throttled) { return; } if (_wowManager.ServerHasQueue) { var status = QueueStatus; _wowManager.Profile.Status = string.IsNullOrEmpty(status) ? status : "Waiting in server queue"; _wowManager.Profile.Log("Waiting in server queue"); return; } if (_wowManager.IsConnectiongOrLoading || IsConnecting) { return; } if (!IsRealmListVisible) { return; } // throttle how fast realm is selected. if (_realmSelectionTimer.IsRunning && _realmSelectionTimer.ElapsedMilliseconds < 5000) { return; } Utility.SaveForegroundWindowAndMouse(); var tabs = RealmTabs; bool foundServer = false; if (tabs.Any()) { while (tabs.Any() && _wowManager.GlueStatus == WowManager.GlueState.ServerSelection) { foundServer = SelectRealm(_wowManager.Settings.ServerName); if (foundServer) { break; } var currentTab = tabs.FirstOrDefault(t => !t.IsEnabled); tabs.Remove(currentTab); var nextTab = tabs.FirstOrDefault(); if (nextTab != null) { var clickPos = _wowManager.ConvertWidgetCenterToWin32Coord(nextTab); Utility.LeftClickAtPos(_wowManager.GameProcess.MainWindowHandle, (int)clickPos.X, (int)clickPos.Y, true, false); // need to wait a little for click to register. try { NativeMethods.BlockInput(true); Utility.SleepUntil(() => !nextTab.IsEnabled, TimeSpan.FromMilliseconds(1000)); } finally { NativeMethods.BlockInput(false); } } } } else { foundServer = SelectRealm(_wowManager.Settings.ServerName); } Utility.RestoreForegroundWindowAndMouse(); if (!foundServer) { _wowManager.Profile.Log("Unable to find server. Pausing profile."); _wowManager.Profile.Pause(); } else { _realmSelectionTimer.Restart(); } }