public AmeisenStateMachine( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenMovementEngine ameisenMovementEngine, IAmeisenCombatPackage combatPackage, AmeisenCharacterManager ameisenCharacterManager, AmeisenNavmeshClient ameisenNavmeshClient) { StateStack = new Stack <BotState>(); StateActionMap = new Dictionary <BotState, IAction> { { BotState.Idle, new ActionIdle(ameisenDataHolder) }, { BotState.Follow, new ActionFollow(ameisenDataHolder, ameisenDBManager, ameisenMovementEngine, ameisenNavmeshClient) }, { BotState.Moving, new ActionMoving(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient) }, { BotState.Combat, new ActionCombat(ameisenDataHolder, combatPackage, ameisenDBManager, ameisenNavmeshClient) }, { BotState.Dead, new ActionDead(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient) }, { BotState.Loot, new ActionLoot(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient) }, { BotState.BotStuff, new ActionDoBotStuff(ameisenDataHolder, ameisenDBManager, ameisenCharacterManager, ameisenNavmeshClient) } }; BotStuffList = new List <IAction>() { new BotStuffRepairEquip(ameisenDataHolder, ameisenDBManager, ameisenCharacterManager, ameisenNavmeshClient) }; }
public ActionFollow( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenMovementEngine ameisenMovementEngine) : base(ameisenDataHolder, ameisenDBManager) { AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; AmeisenMovementEngine = ameisenMovementEngine; }
public ActionFollow( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenMovementEngine ameisenMovementEngine, AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient) { AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; AmeisenMovementEngine = ameisenMovementEngine; PartyPosition = 0; }
public override void DoThings() { if (WaypointQueue.Count > 0) { // Do the movement stuff base.DoThings(); Thread.Sleep(100); return; } RefreshActiveUnit(); Me?.Update(); ActiveUnit?.Update(); if (Me == null || ActiveUnit == null) { return; } /*Vector3 posToMoveTo = ActiveUnit.pos; * posToMoveTo = CalculateMovementOffset( * posToMoveTo, * GetFollowAngle( * GetPartymemberCount(), * GetMyPartyPosition()), * AmeisenDataHolder.Settings.followDistance);*/ //AmeisenMovementEngine.MemberCount = GetPartymemberCount(); Vector4 targetPos = AmeisenMovementEngine.GetPosition( new Vector4(ActiveUnit.pos.X, ActiveUnit.pos.Y, ActiveUnit.pos.Z, ActiveUnit.Rotation), AmeisenDataHolder.Settings.followDistance / 10, GetMyPartyPosition()); Vector3 posToMoveTo = new Vector3(targetPos.X, targetPos.Y, targetPos.Z); // When we are far enough away, follow if (WaypointQueue.Count == 0) { if (Utils.GetDistance(Me.pos, ActiveUnit.pos) > AmeisenDataHolder.Settings.followDistance) { if (!WaypointQueue.Contains(posToMoveTo)) { WaypointQueue.Enqueue(posToMoveTo); } } } }
public AmeisenStateMachine( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenMovementEngine ameisenMovementEngine, IAmeisenCombatClass combatClass) { StateStack = new Stack <BotState>(); StateActionMap = new Dictionary <BotState, IAction> { { BotState.Idle, new ActionIdle(ameisenDataHolder) }, { BotState.Follow, new ActionFollow(ameisenDataHolder, ameisenDBManager, ameisenMovementEngine) }, { BotState.Moving, new ActionMoving(ameisenDataHolder, ameisenDBManager) }, { BotState.Combat, new ActionCombat(ameisenDataHolder, combatClass) }, { BotState.Dead, new ActionDead(ameisenDataHolder, ameisenDBManager) }, { BotState.BotStuff, new ActionDoBotStuff(ameisenDataHolder, GetBotStuffToDo()) } }; }
public AmeisenStateMachineManager( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenMovementEngine ameisenMovementEngine, IAmeisenCombatClass combatClass) { Active = false; AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; CombatClass = combatClass; MainWorker = new Thread(new ThreadStart(DoWork)); StateWatcherWorker = new Thread(new ThreadStart(WatchForStateChanges)); StateMachine = new AmeisenStateMachine(ameisenDataHolder, ameisenDBManager, ameisenMovementEngine, combatClass); }
public AmeisenStateMachineManager( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenMovementEngine ameisenMovementEngine, IAmeisenCombatPackage combatPackage, AmeisenCharacterManager characterManager, AmeisenNavmeshClient ameisenNavmeshClient) { Active = false; AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; CombatPackage = combatPackage; AmeisenNavmeshClient = ameisenNavmeshClient; AmeisenCharacterManager = characterManager; AmeisenMovementEngine = ameisenMovementEngine; MainWorker = new Thread(new ThreadStart(DoWork)); StateWatcherWorker = new Thread(new ThreadStart(WatchForStateChanges)); StateMachine = new AmeisenStateMachine(ameisenDataHolder, ameisenDBManager, ameisenMovementEngine, combatPackage, characterManager, ameisenNavmeshClient); }
/// <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); } }
/// <summary> /// Starts the bots mechanisms, hooks, ... /// </summary> /// <param name="wowExe">WowExe to start the bot on</param> public void StartBot(WowExe wowExe) { AmeisenLogger.Instance.currentUsername = wowExe.characterName; AmeisenLogger.Instance.RefreshLogName(); WowExe = wowExe; LootableUnits = new Queue <Unit>(); // 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) { ConnectToDB(); } // Connect to NavmeshServer if (AmeisenSettings.Settings.navigationServerAutoConnect) { AmeisenNavmeshClient = new AmeisenNavmeshClient( AmeisenSettings.Settings.navigationServerIp, AmeisenSettings.Settings.navigationServerPort ); } // 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; // Unlimit fps to speed up loading, we will limit them later again AmeisenCore.RunSlashCommand($"/console maxfps 30"); AmeisenCore.RunSlashCommand($"/console maxfpsbk 30"); // Init our CharacterMangager to keep track of our stats/items/money AmeisenCharacterManager = new AmeisenCharacterManager(); AmeisenCharacterManager.UpdateCharacterAsync(); // Hook Events AmeisenEventHook = new AmeisenEventHook(); AmeisenEventHook.Init(); AmeisenEventHook.Subscribe(WowEvents.PLAYER_ENTERING_WORLD, OnPlayerEnteringWorld); AmeisenEventHook.Subscribe(WowEvents.LOOT_OPENED, OnLootWindowOpened); AmeisenEventHook.Subscribe(WowEvents.LOOT_BIND_CONFIRM, OnLootBindOnPickup); AmeisenEventHook.Subscribe(WowEvents.READY_CHECK, OnReadyCheck); AmeisenEventHook.Subscribe(WowEvents.PARTY_INVITE_REQUEST, OnPartyInvitation); AmeisenEventHook.Subscribe(WowEvents.CONFIRM_SUMMON, OnSummonRequest); AmeisenEventHook.Subscribe(WowEvents.RESURRECT_REQUEST, OnResurrectRequest); AmeisenEventHook.Subscribe(WowEvents.PLAYER_REGEN_DISABLED, OnRegenDisabled); AmeisenEventHook.Subscribe(WowEvents.PLAYER_REGEN_ENABLED, OnRegenEnabled); AmeisenEventHook.Subscribe(WowEvents.START_LOOT_ROLL, OnStartLootRoll); AmeisenEventHook.Subscribe(WowEvents.ITEM_PUSH, OnNewItem); AmeisenEventHook.Subscribe(WowEvents.PARTY_MEMBERS_CHANGED, OnGroupChanged); //AmeisenEventHook.Subscribe(WowEvents.COMBAT_LOG_EVENT_UNFILTERED, OnCombatLogEvent); // LoadingscreenChecker, stops our hook if we are in loadingscreens IsLoadingScreenCheckerActive = true; LoadingScreenCheckerThread = new Thread(new ThreadStart(LoadingScreenChecker)); LoadingScreenCheckerThread.Start(); // Start our object updates AmeisenObjectManager = new AmeisenObjectManager(AmeisenDataHolder, AmeisenDBManager); AmeisenObjectManager.Start(); // Load the combatclass // CombatClass = CompileAndLoadCombatClass(AmeisenSettings.Settings.combatClassPath); if (CombatPackage == null) { CombatPackage = LoadDefaultClassForSpec(); } // Init our MovementEngine to position ourself according to our formation AmeisenMovementEngine = new AmeisenMovementEngine(new DefaultFormation()) { MemberCount = 40 }; // Start the StateMachine AmeisenStateMachineManager = new AmeisenStateMachineManager( AmeisenDataHolder, AmeisenDBManager, AmeisenMovementEngine, CombatPackage, AmeisenCharacterManager, AmeisenNavmeshClient); // Deafult Idle state AmeisenStateMachineManager.StateMachine.PushAction(BotState.Idle); AmeisenStateMachineManager.Start(); // Connect to Server if (Settings.serverAutoConnect) { ConnectToServer(); } // Ultralow Gfx if (Settings.autoUltralowGfx) { AmeisenCore.RunSlashCommand("/console farclip 350"); AmeisenCore.RunSlashCommand("/console groundEffectDensity 0"); AmeisenCore.RunSlashCommand("/console groundEffectDistance 0"); AmeisenCore.RunSlashCommand("/console environmentDetail 0"); AmeisenCore.RunSlashCommand("/console particleDensity 10"); AmeisenCore.RunSlashCommand("/console shadowMode 0"); AmeisenCore.RunSlashCommand("/console waterDetail 0"); AmeisenCore.RunSlashCommand("/console reflectionMode 0"); AmeisenCore.RunSlashCommand("/console sunShafts 0"); AmeisenCore.RunSlashCommand("/console basemip 1"); AmeisenCore.RunSlashCommand("/console terrainMipLevel 1"); AmeisenCore.RunSlashCommand("/console projectedTextures 0"); AmeisenCore.RunSlashCommand("/console weatherDensity 0"); AmeisenCore.RunSlashCommand("/console componentTextureLevel 0"); AmeisenCore.RunSlashCommand("/console textureFilteringMode 0"); } // Limit fps AmeisenCore.RunSlashCommand($"/console maxfps {Settings.maxFpsForeground}"); AmeisenCore.RunSlashCommand($"/console maxfpsbk {Settings.maxFpsBackground}"); }