public MapWindow(BotManager botManager, AmeisenDBManager ameisenDBManager) { InitializeComponent(); BotManager = botManager; AmeisenDBManager = ameisenDBManager; Topmost = BotManager.Settings.topMost; }
public AmeisenObjectManager(AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager) { AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; RefreshObjects(); AmeisenDataHolder.Partymembers = CombatUtils.GetPartymembers(Me, ActiveWoWObjects); }
private void UpdateNodeInDB(Me me) { int zoneID = AmeisenCore.GetZoneID(); int mapID = AmeisenCore.GetMapID(); // Me AmeisenDBManager.UpdateOrAddNode(new MapNode(me.pos, zoneID, mapID)); List <ulong> copyOfPartymembers = me.PartymemberGuids; // fix with a lock or something alike... try { // All partymembers foreach (ulong guid in copyOfPartymembers) { Unit unit = (Unit)GetWoWObjectFromGUID(guid); if (unit != null && Utils.GetDistance(me.pos, unit.pos) < 75) { AmeisenDBManager.UpdateOrAddNode(new MapNode(unit.pos, zoneID, mapID)); } } } catch { } }
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 ActionLoot( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient) { AmeisenDataHolder = ameisenDataHolder; }
public ActionFollow( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenMovementEngine ameisenMovementEngine) : base(ameisenDataHolder, ameisenDBManager) { AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; AmeisenMovementEngine = ameisenMovementEngine; }
public ActionCombat( AmeisenDataHolder ameisenDataHolder, IAmeisenCombatPackage combatPackage, AmeisenDBManager ameisenDBManager, AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient) { AmeisenDataHolder = ameisenDataHolder; CombatPackage = combatPackage; }
public ActionMoving(AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenNavmeshClient ameisenNavmeshClient) { AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; AmeisenNavmeshClient = ameisenNavmeshClient; WaypointQueue = new Queue <Vector3>(); LastPosition = new Vector3(int.MaxValue, int.MaxValue, int.MaxValue); }
/// <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(); }
public ActionFollow( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenMovementEngine ameisenMovementEngine, AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient) { AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; AmeisenMovementEngine = ameisenMovementEngine; PartyPosition = 0; }
public ActionDoBotStuff( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenCharacterManager ameisenCharacterManager, AmeisenNavmeshClient ameisenNavmeshClient) { AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; AmeisenCharacterManager = ameisenCharacterManager; AmeisenNavmeshClient = ameisenNavmeshClient; }
public BotStuffCleanBags( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenCharacterManager ameisenCharacterManager, AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient) { AmeisenDBManager = ameisenDBManager; AmeisenDataHolder = ameisenDataHolder; AmeisenCharacterManager = ameisenCharacterManager; }
public BotStuffRepairEquip( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenCharacterManager ameisenCharacterManager, AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient) { AmeisenDBManager = ameisenDBManager; AmeisenDataHolder = ameisenDataHolder; AmeisenCharacterManager = ameisenCharacterManager; }
public ActionDead( AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager, AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient) { AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; // going to save these in a databse sometime InstanceEntrances = new Dictionary <Vector3, Vector3> { { new Vector3(5776, 2065, -500), new Vector3(5778, 2062, 636) } // Icecrown Citadel }; }
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); }
public void LoadNewCombatClass( AmeisenDataHolder ameisenDataHolder, IAmeisenCombatPackage combatPackage, AmeisenDBManager ameisenDBManager, AmeisenNavmeshClient ameisenNavmeshClient) => StateActionMap[BotState.Combat] = new ActionCombat(ameisenDataHolder, combatPackage, ameisenDBManager, ameisenNavmeshClient);
public ActionMoving(AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager) { AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; WaypointQueue = new Queue<Vector3>(); }
public ActionDead(AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager) : base(ameisenDataHolder, ameisenDBManager) { AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; }
/// <summary> /// Find a way to the given node and maybe thinken our path if wanted /// </summary> /// <param name="initialPosition">starting pos, you</param> /// <param name="targetPosition">target pos, the position to go to</param> /// <param name="thickenPath">if we should thinken our path, makes nodes connect better, but may be unsecure</param> /// <returns>path that was found or not</returns> private List<Node> FindWayToNode(Vector3 initialPosition, Vector3 targetPosition, bool thickenPath = false) { int distance = (int)Utils.GetDistance(initialPosition, targetPosition); // Get the map boundaries... limit nodes that we get from database... X int maxX = targetPosition.X >= initialPosition.X ? (int)targetPosition.X : (int)initialPosition.X; int minX = initialPosition.X <= targetPosition.X ? (int)initialPosition.X : (int)targetPosition.X; // Y int maxY = targetPosition.Y >= initialPosition.Y ? (int)targetPosition.Y : (int)initialPosition.Y; int minY = initialPosition.Y <= targetPosition.Y ? (int)initialPosition.Y : (int)targetPosition.Y; AmeisenLogger.Instance.Log(LogLevel.DEBUG, $"Trying to find path from {initialPosition.X},{initialPosition.Y},{initialPosition.Z} to: {targetPosition.X},{targetPosition.Y},{targetPosition.Z} Distance: {distance}", this); maxX += 10 * AmeisenDataHolder.Settings.PathfindingSearchRadius; minX -= 10 * AmeisenDataHolder.Settings.PathfindingSearchRadius; maxY += 10 * AmeisenDataHolder.Settings.PathfindingSearchRadius; minY -= 10 * AmeisenDataHolder.Settings.PathfindingSearchRadius; // Offsets to rebase nodes from negative values to positive X int offsetX = minX * -1; minX += offsetX; maxX += offsetX; // Y int offsetY = minY * -1; minY += offsetY; maxY += offsetY; initialPosition.X = (int)initialPosition.X + offsetX; initialPosition.Y = (int)initialPosition.Y + offsetY; targetPosition.X = (int)targetPosition.X + offsetX; targetPosition.Y = (int)targetPosition.Y + offsetY; // Get our nodes from the batabase List<MapNode> nodes = AmeisenDBManager.GetNodes( Me.ZoneID, Me.MapID, maxX - offsetX, minX - offsetX, maxY - offsetY, minY - offsetY); // We cant find ay path if there are no known nodes if (nodes.Count < 1) { return null; } Node[,] map = new Node[maxX + 1, maxY + 1]; // Init map with all things blocked and Rebase negative nodes to be positive InitMap(ref map, maxX, minX, maxY, minY); RebaseNodes(ref map, nodes, offsetX, offsetY); // Fill path-gaps if (thickenPath) { map = ThinkenPathsOnMap(map, maxX, maxY, 5); } else { map = ThinkenPathsOnMap(map, maxX, maxY, 1); } // Find the path List<Node> path = AmeisenPath.FindPathAStar(map, new NodePosition((int)initialPosition.X, (int)initialPosition.Y, (int)initialPosition.Z), new NodePosition((int)targetPosition.X, (int)targetPosition.Y, (int)targetPosition.Z), true, true, 5); //WriteMapToFile(map, initialPosition, targetPosition); if (path == null) { return null; } else { return RebasePath(path, offsetX, offsetY); } }
/// <summary> /// Check if we remember a Unit by its Name, ZoneID and MapID /// </summary> /// <param name="name">name of the npc</param> /// <param name="zoneID">zoneid of the npc</param> /// <param name="mapID">mapid of the npc</param> /// <returns>RememberedUnit with if we remember it, its UnitTraits and position</returns> public RememberedUnit CheckForRememberedUnit(string name, int zoneID, int mapID) { return(AmeisenDBManager.CheckForRememberedUnit(name, zoneID, mapID)); }
/// <summary> /// Add a RememberedUnit to the RememberedUnits Database to remember its position and UnitTraits /// </summary> /// <param name="rememberedUnit">Unit that you want to remember</param> public void RememberUnit(RememberedUnit rememberedUnit) { AmeisenDBManager.RememberUnit(rememberedUnit); }
/// <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); } }
public AmeisenObjectManager(AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager) { AmeisenDataHolder = ameisenDataHolder; AmeisenDBManager = ameisenDBManager; RefreshObjects(); }