コード例 #1
0
 public static void DisposeCombatClass()
 {
     try
     {
         lock (CombatClassLocker)
         {
             if (_instanceFromOtherAssembly != null)
             {
                 _instanceFromOtherAssembly.Dispose();
             }
             if (_worker != null)
             {
                 if (_worker.IsAlive)
                 {
                     _worker.Abort();
                 }
             }
         }
     }
     catch (Exception exception)
     {
         Logging.WriteError("DisposeCombatClass(): " + exception);
     }
     finally
     {
         _instanceFromOtherAssembly = null;
         _assembly = null;
         _obj      = null;
     }
 }
コード例 #2
0
        public AmeisenBotStateMachine(
            string botDataPath,
            Process wowProcess,
            AmeisenBotConfig config,
            XMemory xMemory,
            IOffsetList offsetList,
            ObjectManager objectManager,
            CharacterManager characterManager,
            HookManager hookManager,
            EventHookManager eventHookManager,
            IAmeisenBotCache botCache,
            IPathfindingHandler pathfindingHandler,
            IMovementEngine movementEngine,
            ICombatClass combatClass)
        {
            AmeisenLogger.Instance.Log("Starting AmeisenBotStateMachine...", LogLevel.Verbose);

            BotDataPath      = botDataPath;
            Config           = config;
            XMemory          = xMemory;
            OffsetList       = offsetList;
            ObjectManager    = objectManager;
            CharacterManager = characterManager;
            HookManager      = hookManager;
            EventHookManager = eventHookManager;
            BotCache         = botCache;

            LastObjectUpdate = DateTime.Now;
            LastGhostCheck   = DateTime.Now;
            LastEventPull    = DateTime.Now;

            LastState    = AmeisenBotState.None;
            UnitLootList = new Queue <ulong>();

            States = new Dictionary <AmeisenBotState, State>()
            {
                { AmeisenBotState.None, new StateNone(this, config) },
                { AmeisenBotState.StartWow, new StateStartWow(this, config, wowProcess, xMemory) },
                { AmeisenBotState.Login, new StateLogin(this, config, offsetList, characterManager) },
                { AmeisenBotState.LoadingScreen, new StateLoadingScreen(this, xMemory, config, objectManager) },
                { AmeisenBotState.Idle, new StateIdle(this, config, offsetList, objectManager, characterManager, hookManager, eventHookManager, combatClass, UnitLootList) },
                { AmeisenBotState.Dead, new StateDead(this, config, objectManager, hookManager) },
                { AmeisenBotState.Ghost, new StateGhost(this, config, offsetList, objectManager, characterManager, hookManager, pathfindingHandler, movementEngine) },
                { AmeisenBotState.Following, new StateFollowing(this, config, objectManager, characterManager, pathfindingHandler, movementEngine) },
                { AmeisenBotState.Attacking, new StateAttacking(this, config, objectManager, characterManager, hookManager, pathfindingHandler, movementEngine, combatClass) },
                { AmeisenBotState.Repairing, new StateRepairing(this, config, objectManager, hookManager, characterManager, pathfindingHandler, movementEngine) },
                { AmeisenBotState.Selling, new StateSelling(this, config, objectManager, hookManager, characterManager, pathfindingHandler, movementEngine) },
                { AmeisenBotState.Healing, new StateEating(this, config, objectManager, characterManager) },
                { AmeisenBotState.InsideAoeDamage, new StateInsideAoeDamage(this, config, objectManager, characterManager, pathfindingHandler, movementEngine) },
                { AmeisenBotState.Looting, new StateLooting(this, config, offsetList, objectManager, characterManager, hookManager, pathfindingHandler, movementEngine, UnitLootList) }
            };

            CurrentState = States.First();
            CurrentState.Value.Enter();
        }
コード例 #3
0
 public StateIdle(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, IOffsetList offsetList, ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager, EventHookManager eventHookManager, ICombatClass combatClass, Queue <ulong> unitLootList) : base(stateMachine)
 {
     Config           = config;
     OffsetList       = offsetList;
     ObjectManager    = objectManager;
     HookManager      = hookManager;
     EventHookManager = eventHookManager;
     CharacterManager = characterManager;
     CombatClass      = combatClass;
     UnitLootList     = unitLootList;
 }
コード例 #4
0
        public StateAttacking(AmeisenBotStateMachine stateMachine, AmeisenBotConfig config, ObjectManager objectManager, CharacterManager characterManager, HookManager hookManager, IPathfindingHandler pathfindingHandler, IMovementEngine movementEngine, ICombatClass combatClass) : base(stateMachine)
        {
            Config             = config;
            ObjectManager      = objectManager;
            CharacterManager   = characterManager;
            HookManager        = hookManager;
            PathfindingHandler = pathfindingHandler;
            MovementEngine     = movementEngine;
            CombatClass        = combatClass;

            // default distance values
            DistanceToTarget = combatClass == null || combatClass.IsMelee ? 3.0 : 25.0;
        }
コード例 #5
0
ファイル: CPDefault.cs プロジェクト: IgorYunusov/wow-bot
 public CPDefault(List <Spell> spells, ICombatClass spellStrategy, IMovementStrategy movementStrategy)
 {
     Spells           = spells;
     SpellStrategy    = spellStrategy;
     MovementStrategy = movementStrategy;
 }
コード例 #6
0
ファイル: AIManager.cs プロジェクト: wladimiiir/vault112
        private void InitAIEvents(Critter npc, ICombatClass combatClass)
        {
            Critter currentTarget = null;
            long NextProcessTime = 0;

            npc.Attacked += (sender, e) => {
                if (e.Attacker != null)
                    npc.AddEnemyInStack (e.Attacker.Id);
            };
            npc.PlaneBegin += (sender, e) => {
                if (e.Plane.Type == PlaneType.CustomAI) {
                    e.Result = NpcPlaneEventResult.Keep;
                } else {
                    //TODO: check if discard
                    Global.Log ("Plane begin: " + e.Plane.Type);
                }
            };
            npc.PlaneRun += (sender, e) => {
                e.Result = NpcPlaneEventResult.Discard;
            };
            npc.PlaneEnd += (sender, e) => {
                if (e.Plane.Type == PlaneType.CustomAI) {
                    if (NextProcessTime <= Time.ElapsedMilliseconds) {
                        var breakTime = ProcessCustomAI (npc, ref currentTarget, combatClass, e.Plane);
                        NextProcessTime = Time.ElapsedMilliseconds + (breakTime == 0 ? PROCESS_INTERVAL : breakTime);
                    }

                    e.Result = NpcPlaneEventResult.Keep;
                } else if (e.Plane.Type == PlaneType.Walk) {
                    e.Result = ProcessWalkResult (npc, e);
                } else {
                    e.Result = NpcPlaneEventResult.Discard;
                }
            };

            npc.DropPlanes ();
            npc.AddPlane (CreateCustomAIPlane ());
        }
コード例 #7
0
ファイル: AIManager.cs プロジェクト: wladimiiir/vault112
        private long ProcessCustomAI(Critter npc, ref Critter currentTarget, ICombatClass combatClass, NpcPlane plane)
        {
            currentTarget = combatClass.ChooseNextTarget (npc, currentTarget);
            if (currentTarget == null)
                return 0;

            var attackChoice = combatClass.ChooseAttack (npc, currentTarget);
            if (attackChoice != null) {
                var position = combatClass.ChooseAttackPosition (npc, currentTarget, attackChoice);
                if (position != null) {
                    GoToPosition (npc, plane, position [0], position [1], position [2]);
                    return 0;
                }

                return AttackTarget (npc, currentTarget, attackChoice);
            }

            var itemChoice = combatClass.ChooseItem (npc, currentTarget);
            if (itemChoice != null) {
                UseItemOnTarget (npc, currentTarget, itemChoice);
                return 0;
            }

            var skillChoice = combatClass.ChooseSkill (npc, currentTarget);
            if (skillChoice != null) {
                UseSkillOnTarget (npc, currentTarget, skillChoice);
                return 0;
            }

            return 0;
        }
コード例 #8
0
        public static void LoadCombatClass(string pathToCombatClassFile, bool settingOnly = false,
                                           bool resetSettings = false,
                                           bool cSharpFile    = true)
        {
            try
            {
                _pathToCombatClassFile = pathToCombatClassFile;
                if (_instanceFromOtherAssembly != null)
                {
                    _instanceFromOtherAssembly.Dispose();
                }

                _instanceFromOtherAssembly = null;
                _assembly = null;
                _obj      = null;

                if (cSharpFile)
                {
                    CodeDomProvider      cc         = new CSharpCodeProvider();
                    var                  cp         = new CompilerParameters();
                    IEnumerable <string> assemblies = AppDomain.CurrentDomain
                                                      .GetAssemblies()
                                                      .Where(
                        a =>
                        !a.IsDynamic &&
                        !a.CodeBase.Contains((Process.GetCurrentProcess().ProcessName + ".exe")))
                                                      .Select(a => a.Location);
                    cp.ReferencedAssemblies.AddRange(assemblies.ToArray());
                    StreamReader    sr        = File.OpenText(pathToCombatClassFile);
                    string          toCompile = sr.ReadToEnd();
                    CompilerResults cr        = cc.CompileAssemblyFromSource(cp, toCompile);
                    if (cr.Errors.HasErrors)
                    {
                        String text = cr.Errors.Cast <CompilerError>().Aggregate("Compilator Error :\n",
                                                                                 (current, err) => current + (err + "\n"));
                        Logging.WriteError(text);
                        MessageBox.Show(text);
                        return;
                    }

                    _assembly   = cr.CompiledAssembly;
                    _obj        = _assembly.CreateInstance("Main", true);
                    _threadName = "CombatClass CS";
                }
                else
                {
                    _assembly   = Assembly.LoadFrom(_pathToCombatClassFile);
                    _obj        = _assembly.CreateInstance("Main", false);
                    _threadName = "CombatClass DLL";
                }
                if (_obj != null && _assembly != null)
                {
                    _instanceFromOtherAssembly = _obj as ICombatClass;
                    if (_instanceFromOtherAssembly != null)
                    {
                        if (settingOnly)
                        {
                            if (resetSettings)
                            {
                                _instanceFromOtherAssembly.ResetConfiguration();
                            }
                            else
                            {
                                _instanceFromOtherAssembly.ShowConfiguration();
                            }
                            _instanceFromOtherAssembly.Dispose();
                            return;
                        }

                        _worker = new Thread(_instanceFromOtherAssembly.Initialize)
                        {
                            IsBackground = true, Name = _threadName
                        };
                        _worker.Start();
                    }
                    else
                    {
                        Logging.WriteError("Custom Class Loading error.");
                    }
                }
            }
            catch (Exception exception)
            {
                Logging.WriteError("LoadCombatClass(string _pathToCombatClassFile): " + exception);
            }
        }