Exemplo n.º 1
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)
            };
        }
Exemplo n.º 2
0
 public ActionLoot(
     AmeisenDataHolder ameisenDataHolder,
     AmeisenDBManager ameisenDBManager,
     AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient)
 {
     AmeisenDataHolder = ameisenDataHolder;
 }
Exemplo n.º 3
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);
        }
Exemplo n.º 4
0
 public ActionCombat(
     AmeisenDataHolder ameisenDataHolder,
     IAmeisenCombatPackage combatPackage,
     AmeisenDBManager ameisenDBManager,
     AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient)
 {
     AmeisenDataHolder = ameisenDataHolder;
     CombatPackage     = combatPackage;
 }
Exemplo n.º 5
0
 public BotStuffCleanBags(
     AmeisenDataHolder ameisenDataHolder,
     AmeisenDBManager ameisenDBManager,
     AmeisenCharacterManager ameisenCharacterManager,
     AmeisenNavmeshClient ameisenNavmeshClient)
     : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient)
 {
     AmeisenDBManager        = ameisenDBManager;
     AmeisenDataHolder       = ameisenDataHolder;
     AmeisenCharacterManager = ameisenCharacterManager;
 }
Exemplo n.º 6
0
 public ActionFollow(
     AmeisenDataHolder ameisenDataHolder,
     AmeisenDBManager ameisenDBManager,
     AmeisenMovementEngine ameisenMovementEngine,
     AmeisenNavmeshClient ameisenNavmeshClient) : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient)
 {
     AmeisenDataHolder     = ameisenDataHolder;
     AmeisenDBManager      = ameisenDBManager;
     AmeisenMovementEngine = ameisenMovementEngine;
     PartyPosition         = 0;
 }
Exemplo n.º 7
0
 public BotStuffRepairEquip(
     AmeisenDataHolder ameisenDataHolder,
     AmeisenDBManager ameisenDBManager,
     AmeisenCharacterManager ameisenCharacterManager,
     AmeisenNavmeshClient ameisenNavmeshClient)
     : base(ameisenDataHolder, ameisenDBManager, ameisenNavmeshClient)
 {
     AmeisenDBManager        = ameisenDBManager;
     AmeisenDataHolder       = ameisenDataHolder;
     AmeisenCharacterManager = ameisenCharacterManager;
 }
Exemplo n.º 8
0
 public ActionDoBotStuff(
     AmeisenDataHolder ameisenDataHolder,
     AmeisenDBManager ameisenDBManager,
     AmeisenCharacterManager ameisenCharacterManager,
     AmeisenNavmeshClient ameisenNavmeshClient)
 {
     AmeisenDataHolder       = ameisenDataHolder;
     AmeisenDBManager        = ameisenDBManager;
     AmeisenCharacterManager = ameisenCharacterManager;
     AmeisenNavmeshClient    = ameisenNavmeshClient;
 }
Exemplo n.º 9
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
            };
        }
        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);
        }
Exemplo n.º 11
0
 public List <Vector3> UsePathfinding(Vector3 initialPosition, Vector3 targetPosition)
 {
     Me.Update();
     return(AmeisenNavmeshClient.RequestPath(new PathRequest(initialPosition, targetPosition, Me.MapId)));
 }
Exemplo n.º 12
0
 public void LoadNewCombatClass(
     AmeisenDataHolder ameisenDataHolder,
     IAmeisenCombatPackage combatPackage,
     AmeisenDBManager ameisenDBManager,
     AmeisenNavmeshClient ameisenNavmeshClient)
 => StateActionMap[BotState.Combat] = new ActionCombat(ameisenDataHolder, combatPackage, ameisenDBManager, ameisenNavmeshClient);
Exemplo n.º 13
0
        /// <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}");
        }