/// <summary> /// Stops the bots mechanisms, hooks, ... /// </summary> public void StopBot() { // Disconnect from Server AmeisenClient.Unregister( Me, IPAddress.Parse(AmeisenSettings.Settings.ameisenServerIP), AmeisenSettings.Settings.ameisenServerPort); // Save WoW's window positions SafeNativeMethods.Rect wowRect = AmeisenCore.GetWowDiemsions(WowExe.process.MainWindowHandle); AmeisenSettings.Settings.wowRectT = wowRect.Top; AmeisenSettings.Settings.wowRectB = wowRect.Bottom; AmeisenSettings.Settings.wowRectL = wowRect.Left; AmeisenSettings.Settings.wowRectR = wowRect.Right; // Stop object updates AmeisenObjectManager.Stop(); // Stop the statemachine AmeisenStateMachineManager.Stop(); // Unhook Events AmeisenEventHook?.Stop(); // Unhook the EndScene AmeisenHook.DisposeHooking(); // Detach BlackMagic, causing weird crash right now... //Blackmagic.Close(); // Stop logging AmeisenLogger.Instance.StopLogging(); }
/// <summary> /// Create a new AmeisenBotManager to manage the bot's functionality /// </summary> public BotManager() { IsBlackmagicAttached = false; IsEndsceneHooked = false; AmeisenDataHolder = new AmeisenDataHolder(); AmeisenSettings = new AmeisenSettings(AmeisenDataHolder); AmeisenClient = new AmeisenClient(AmeisenDataHolder); AmeisenDBManager = new AmeisenDBManager(); }
/// <summary> /// Starts the bots mechanisms, hooks, ... /// </summary> /// <param name="wowExe">WowExe to start the bot on</param> public void StartBot(WowExe wowExe) { WowExe = wowExe; // Load Settings AmeisenSettings.LoadFromFile(wowExe.characterName); // Load old WoW Position if (AmeisenSettings.Settings.saveBotWindowPosition) { if (AmeisenSettings.Settings.wowRectL != 0 && AmeisenSettings.Settings.wowRectR != 0 && AmeisenSettings.Settings.wowRectT != 0 && AmeisenSettings.Settings.wowRectB != 0) { AmeisenCore.SetWindowPosition( wowExe.process.MainWindowHandle, (int)AmeisenSettings.Settings.wowRectL, (int)AmeisenSettings.Settings.wowRectT, (int)AmeisenSettings.Settings.wowRectB - (int)AmeisenSettings.Settings.wowRectT, (int)AmeisenSettings.Settings.wowRectR - (int)AmeisenSettings.Settings.wowRectL); } } // Connect to DB if (AmeisenSettings.Settings.databaseAutoConnect) { AmeisenDBManager.ConnectToMySQL( string.Format(sqlConnectionString, AmeisenSettings.Settings.databaseIP, AmeisenSettings.Settings.databasePort, AmeisenSettings.Settings.databaseName, AmeisenSettings.Settings.databaseUsername, AmeisenSettings.Settings.databasePasswort) ); } // Attach to Proccess Blackmagic = new BlackMagic(wowExe.process.Id); IsBlackmagicAttached = Blackmagic.IsProcessOpen; // TODO: make this non static AmeisenCore.BlackMagic = Blackmagic; // Hook EndScene AmeisenHook = new AmeisenHook(Blackmagic); IsEndsceneHooked = AmeisenHook.isHooked; // TODO: make this non static AmeisenCore.AmeisenHook = AmeisenHook; // Hook Events /*AmeisenEventHook = new AmeisenEventHook(); * AmeisenEventHook.Init(); * AmeisenEventHook.Subscribe("UI_ERROR_MESSAGE");*/ // Start our object updates AmeisenObjectManager = new AmeisenObjectManager(AmeisenDataHolder, AmeisenDBManager); AmeisenObjectManager.Start(); // Load the combatclass IAmeisenCombatClass combatClass = CompileAndLoadCombatClass(AmeisenSettings.Settings.combatClassPath); // Init our MovementEngine to hposition ourself according to our formation AmeisenMovementEngine = new AmeisenMovementEngine(new DefaultFormation()) { MemberCount = 40 }; // Start the StateMachine AmeisenStateMachineManager = new AmeisenStateMachineManager( AmeisenDataHolder, AmeisenDBManager, AmeisenMovementEngine, combatClass); // Deafult Idle state AmeisenStateMachineManager.StateMachine.PushAction(BotState.Idle); AmeisenStateMachineManager.Start(); // Connect to Server if (Settings.serverAutoConnect) { AmeisenClient.Register( Me, IPAddress.Parse(AmeisenSettings.Settings.ameisenServerIP), AmeisenSettings.Settings.ameisenServerPort); } }