示例#1
0
 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 { }
        }
示例#4
0
        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)
            };
        }
示例#5
0
 public ActionLoot(
     AmeisenDataHolder ameisenDataHolder,
     AmeisenDBManager ameisenDBManager,
     AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient)
 {
     AmeisenDataHolder = ameisenDataHolder;
 }
示例#6
0
 public ActionFollow(
     AmeisenDataHolder ameisenDataHolder,
     AmeisenDBManager ameisenDBManager,
     AmeisenMovementEngine ameisenMovementEngine) : base(ameisenDataHolder, ameisenDBManager)
 {
     AmeisenDataHolder     = ameisenDataHolder;
     AmeisenDBManager      = ameisenDBManager;
     AmeisenMovementEngine = ameisenMovementEngine;
 }
示例#7
0
 public ActionCombat(
     AmeisenDataHolder ameisenDataHolder,
     IAmeisenCombatPackage combatPackage,
     AmeisenDBManager ameisenDBManager,
     AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient)
 {
     AmeisenDataHolder = ameisenDataHolder;
     CombatPackage     = combatPackage;
 }
示例#8
0
        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);
        }
示例#9
0
        /// <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();
        }
示例#10
0
 public ActionFollow(
     AmeisenDataHolder ameisenDataHolder,
     AmeisenDBManager ameisenDBManager,
     AmeisenMovementEngine ameisenMovementEngine,
     AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient)
 {
     AmeisenDataHolder     = ameisenDataHolder;
     AmeisenDBManager      = ameisenDBManager;
     AmeisenMovementEngine = ameisenMovementEngine;
     PartyPosition         = 0;
 }
示例#11
0
 public ActionDoBotStuff(
     AmeisenDataHolder ameisenDataHolder,
     AmeisenDBManager ameisenDBManager,
     AmeisenCharacterManager ameisenCharacterManager,
     AmeisenNavmeshClient ameisenNavmeshClient)
 {
     AmeisenDataHolder       = ameisenDataHolder;
     AmeisenDBManager        = ameisenDBManager;
     AmeisenCharacterManager = ameisenCharacterManager;
     AmeisenNavmeshClient    = ameisenNavmeshClient;
 }
示例#12
0
 public BotStuffCleanBags(
     AmeisenDataHolder ameisenDataHolder,
     AmeisenDBManager ameisenDBManager,
     AmeisenCharacterManager ameisenCharacterManager,
     AmeisenNavmeshClient ameisenNavmeshClient)
     : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient)
 {
     AmeisenDBManager        = ameisenDBManager;
     AmeisenDataHolder       = ameisenDataHolder;
     AmeisenCharacterManager = ameisenCharacterManager;
 }
示例#13
0
 public BotStuffRepairEquip(
     AmeisenDataHolder ameisenDataHolder,
     AmeisenDBManager ameisenDBManager,
     AmeisenCharacterManager ameisenCharacterManager,
     AmeisenNavmeshClient ameisenNavmeshClient)
     : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient)
 {
     AmeisenDBManager        = ameisenDBManager;
     AmeisenDataHolder       = ameisenDataHolder;
     AmeisenCharacterManager = ameisenCharacterManager;
 }
示例#14
0
        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
            };
        }
示例#15
0
 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()) }
     };
 }
示例#16
0
        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);
        }
示例#18
0
 public void LoadNewCombatClass(
     AmeisenDataHolder ameisenDataHolder,
     IAmeisenCombatPackage combatPackage,
     AmeisenDBManager ameisenDBManager,
     AmeisenNavmeshClient ameisenNavmeshClient)
 => StateActionMap[BotState.Combat] = new ActionCombat(ameisenDataHolder, combatPackage, ameisenDBManager, ameisenNavmeshClient);
示例#19
0
 public ActionMoving(AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager)
 {
     AmeisenDataHolder = ameisenDataHolder;
     AmeisenDBManager = ameisenDBManager;
     WaypointQueue = new Queue<Vector3>();
 }
示例#20
0
 public ActionDead(AmeisenDataHolder ameisenDataHolder, AmeisenDBManager ameisenDBManager) : base(ameisenDataHolder, ameisenDBManager)
 {
     AmeisenDataHolder = ameisenDataHolder;
     AmeisenDBManager  = ameisenDBManager;
 }
示例#21
0
        /// <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);
            }
        }
示例#22
0
 /// <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));
 }
示例#23
0
 /// <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);
 }
示例#24
0
        /// <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();
 }