Example #1
0
        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();
        }
Example #3
0
 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);
 }
Example #4
0
        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();
        }
Example #5
0
        /// <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();
        }
Example #7
0
        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();
            }
        }