private void ActiveWowTimer_Elapsed(object sender, ElapsedEventArgs e) { try { List <WowProcess> wowProcesses = BotUtils.GetRunningWows(OffsetList); Dispatcher.Invoke(() => AddUnusedWowProcessesToView(wowProcesses)); Dispatcher.Invoke(() => AddUsedWowProcessesToView()); Dispatcher.Invoke(() => RemoveDeadViews()); ManagedAmeisenBots.RemoveAll(b => b.WowProcess.Process.HasExited); if (FleetMode) { Dispatcher.Invoke(() => HandleFleet()); } } catch (TaskCanceledException) { // can be ignored, happens sometimes when you exit the bot // maybe i'll fix this, maybe not :^) } }
private void SetupNewAmeisenBot(WowAccount account, WowProcess wowProcess) { WowAccounts[account] = BotStartState.BotIsAttaching; TrashMem trashMem = new TrashMem(wowProcess.Process); MemoryWowDataAdapter memoryWowDataAdapter = new MemoryWowDataAdapter(trashMem, OffsetList); MemoryWowActionExecutor memoryWowActionExecutioner = new MemoryWowActionExecutor(trashMem, OffsetList); AmeisenNavPathfindingClient ameisenNavPathfindingClient = new AmeisenNavPathfindingClient(Settings.AmeisenNavmeshServerIp, Settings.AmeisenNavmeshServerPort, wowProcess.Process.Id); LuaHookWowEventAdapter luaHookWowEventAdapter = new LuaHookWowEventAdapter(memoryWowActionExecutioner); BasicMeleeMovementProvider basicMeleeMovementProvider = new BasicMeleeMovementProvider(); SimpleAutologinProvider simpleAutologinProvider = new SimpleAutologinProvider(); AmeisenBot ameisenBot = new AmeisenBot(trashMem, memoryWowDataAdapter, simpleAutologinProvider, wowProcess.Process); ManagedAmeisenBot managedAmeisenBot = new ManagedAmeisenBot(wowProcess, account, ameisenBot); if (ameisenBot.AutologinProvider.DoLogin(wowProcess.Process, account, OffsetList)) { ameisenBot.Attach(memoryWowActionExecutioner, ameisenNavPathfindingClient, luaHookWowEventAdapter, basicMeleeMovementProvider, null); if (Settings.WowPositions.ContainsKey(account.CharacterName)) { ameisenBot.SetWindowPosition(Settings.WowPositions[account.CharacterName]); } ManagedAmeisenBots.Add(managedAmeisenBot); IAmeisenBotViews.OfType <WowView>().ToList().RemoveAll(v => v.WowProcess.Process.Id == managedAmeisenBot.WowProcess.Process.Id); WowAccounts[account] = BotStartState.BotIsAttached; } else { // we failed to login, restart wow... if (!wowProcess.Process.HasExited) { wowProcess.Process.Kill(); } WowAccounts[account] = BotStartState.None; } }
private void RemoveDeadViews() { // remov old wow views converted to a botview IAmeisenBotViews.RemoveAll(v => v.GetType() == typeof(WowView) && ManagedAmeisenBots.Any(m => m.WowProcess.Process.Id == v.Process.Id)); IAmeisenBotViews.RemoveAll(v => v.Process.HasExited); }