public void Initialize(IClassRotation specialization)
        {
            settings = RogueSettings.Current;
            if (settings.PartyDrinkName != "")
            {
                ToolBox.AddToDoNotSellList(settings.PartyDrinkName);
            }
            cast = new Cast(SinisterStrike, null, settings);

            this.specialization          = specialization as Rogue;
            (RotationType, RotationRole) = ToolBox.GetRotationType(specialization);
            TalentsManager.InitTalents(settings);

            RangeManager.SetRangeToMelee();
            AddPoisonsToNoSellList();

            FightEvents.OnFightEnd                      += FightEndHandler;
            FightEvents.OnFightStart                    += FightStartHandler;
            MovementEvents.OnMoveToPulse                += MoveToPulseHandler;
            FightEvents.OnFightLoop                     += FightLoopHandler;
            OthersEvents.OnAddBlackListGuid             += BlackListHandler;
            EventsLuaWithArgs.OnEventsLuaStringWithArgs += EventsWithArgsHandler;

            Rotation();
        }
        public void Initialize(IClassRotation specialization)
        {
            settings = WarlockSettings.Current;
            if (settings.PartyDrinkName != "")
            {
                ToolBox.AddToDoNotSellList(settings.PartyDrinkName);
            }
            cast = new Cast(ShadowBolt, UseWand, settings);

            this.specialization          = specialization as Warlock;
            (RotationType, RotationRole) = ToolBox.GetRotationType(specialization);
            TalentsManager.InitTalents(settings);

            WarlockPetAndConsumables.Setup();

            _petPulseThread.DoWork += PetThread;
            _petPulseThread.RunWorkerAsync();

            RangeManager.SetRange(ShadowBolt.MaxRange);

            // Set pet mode
            if (settings.PetInPassiveWhenOOC)
            {
                Lua.LuaDoString("PetPassiveMode();");
            }
            else
            {
                Lua.LuaDoString("PetDefensiveMode();");
            }

            FightEvents.OnFightEnd   += FightEndHandler;
            FightEvents.OnFightStart += FightStartHandler;

            Rotation();
        }
Exemplo n.º 3
0
        public void Initialize(IClassRotation specialization)
        {
            settings = ShamanSettings.Current;
            if (settings.PartyDrinkName != "")
            {
                ToolBox.AddToDoNotSellList(settings.PartyDrinkName);
            }
            cast          = new Cast(LightningBolt, null, settings);
            _totemManager = new TotemManager(cast);

            this.specialization          = specialization as Shaman;
            (RotationType, RotationRole) = ToolBox.GetRotationType(specialization);
            TalentsManager.InitTalents(settings);

            ToolBox.AddToDoNotSellList("Air Totem");
            ToolBox.AddToDoNotSellList("Earth Totem");
            ToolBox.AddToDoNotSellList("Water Totem");
            ToolBox.AddToDoNotSellList("Fire Totem");

            RangeManager.SetRange(_pullRange);

            FightEvents.OnFightEnd   += FightEndHandler;
            FightEvents.OnFightStart += FightStartHandler;
            FightEvents.OnFightLoop  += FightLoopHandler;

            Rotation();
        }
 private void FightEndHandler(ulong guid)
 {
     _fightingACaster     = false;
     _isStealthApproching = false;
     _myBestBandage       = null;
     RangeManager.SetRangeToMelee();
 }
        protected override void BuffRotation()
        {
            RangeManager.SetRange(30);

            if (!Me.HaveBuff("Drink") || Me.ManaPercentage > 95)
            {
                base.BuffRotation();
            }
        }
        private void Rotation()
        {
            while (Main.isLaunched)
            {
                try
                {
                    if (Me.HaveBuff("Feign Death"))
                    {
                        Thread.Sleep(500);
                        Move.Backward(Move.MoveAction.PressKey, 100);
                        cast.OnTarget(AutoShot);
                    }

                    if (StatusChecker.BasicConditions() &&
                        !Me.IsMounted &&
                        !Me.HaveBuff("Food") &&
                        !Me.HaveBuff("Drink"))
                    {
                        if (_canOnlyMelee)
                        {
                            RangeManager.SetRangeToMelee();
                        }
                        else
                        {
                            RangeManager.SetRange(AutoShot.MaxRange - 1);
                        }

                        if (Me.Level >= 10)
                        {
                            PetManager();
                        }
                    }

                    if (StatusChecker.OutOfCombat(RotationRole))
                    {
                        specialization.BuffRotation();
                    }

                    if (StatusChecker.InPull())
                    {
                        specialization.Pull();
                    }

                    if (StatusChecker.InCombat())
                    {
                        specialization.CombatRotation();
                    }
                }
                catch (Exception arg)
                {
                    Logging.WriteError("ERROR: " + arg, true);
                }
                Thread.Sleep(ToolBox.GetLatency() + settings.ThreadSleepCycle);
            }
            Logger.Log("Stopped.");
        }
 // EVENT HANDLERS
 private void FightEndHandler(ulong guid)
 {
     _iCanUseWand = false;
     RangeManager.SetRange(ShadowBolt.MaxRange);
     _addCheckTimer.Reset();
     if (settings.PetInPassiveWhenOOC)
     {
         Lua.LuaDoString("PetPassiveMode();");
     }
 }
Exemplo n.º 8
0
 public void Sell()
 {
     if (ableToSell)
     {
         RangeManager rangeMan = GameObject.FindGameObjectWithTag("RangeManager").GetComponent <RangeManager>();
         rangeMan.ResetRanges();
         Destroy(selectedTower);
         totalMoney       += selectedSellPrice;
         selectedSellPrice = 0;
     }
 }
        protected override void BuffRotation()
        {
            if (!Me.HaveBuff("Drink") || Me.ManaPercentage > 95)
            {
                base.BuffRotation();

                if (_knowImprovedScorch)
                {
                    RangeManager.SetRange(Scorch.MaxRange);
                }
                else
                {
                    RangeManager.SetRange(Fireball.MaxRange);
                }

                // Molten Armor
                if (!Me.HaveBuff("Molten Armor") &&
                    cast.OnSelf(MoltenArmor))
                {
                    return;
                }

                // Mage Armor
                if (!Me.HaveBuff("Mage Armor") &&
                    !MoltenArmor.KnownSpell &&
                    cast.OnSelf(MageArmor))
                {
                    return;
                }

                // Ice Armor
                if (!Me.HaveBuff("Ice Armor") &&
                    (!MoltenArmor.KnownSpell && !MageArmor.KnownSpell) &&
                    cast.OnSelf(IceArmor))
                {
                    return;
                }

                // Frost Armor
                if (!Me.HaveBuff("Frost Armor") &&
                    (!MoltenArmor.KnownSpell && !MageArmor.KnownSpell && !IceArmor.KnownSpell) &&
                    cast.OnSelf(FrostArmor))
                {
                    return;
                }

                // PARTY Drink
                if (AIOParty.PartyDrink(settings.PartyDrinkName, settings.PartyDrinkThreshold))
                {
                    return;
                }
            }
        }
Exemplo n.º 10
0
 public void Awake()
 {
     rangeMan = GameObject.FindGameObjectWithTag("RangeManager").GetComponent <RangeManager>();
     if (gameObject.GetComponent <HighlightPath>() != null)
     {
         h = GetComponent <HighlightPath>();
     }
     tim       = maxTim;
     realTower = realTowerObject.GetComponentInChildren <Tower>();
     if (range != null && realTower != null)
     {
         range.transform.localScale = new Vector3(realTower.rad * 2, range.transform.localScale.y, realTower.rad * 2);
         range.transform.position   = transform.position;
     }
 }
        protected override void Pull()
        {
            base.Pull();

            // Bear Form
            if (!CatForm.KnownSpell &&
                !Me.HaveBuff(BearForm.Name) &&
                cast.OnSelf(BearForm))
            {
                return;
            }

            // Cat Form
            if (!Me.HaveBuff(CatForm.Name) &&
                cast.OnSelf(CatForm))
            {
                return;
            }

            // Prowl
            if (Me.HaveBuff(CatForm.Name) &&
                !Me.HaveBuff(Prowl.Name) &&
                ObjectManager.Target.GetDistance > 15f &&
                ObjectManager.Target.GetDistance < 25f &&
                settings.StealthEngage &&
                cast.OnSelf(Prowl))
            {
                return;
            }

            // Pull Bear/Cat
            if (Me.HaveBuff("Bear Form") ||
                Me.HaveBuff("Dire Bear Form") ||
                Me.HaveBuff("Cat Form"))
            {
                RangeManager.SetRangeToMelee();

                // Prowl approach
                if (Me.HaveBuff("Prowl") &&
                    ObjectManager.Target.GetDistance > 3f &&
                    !_isStealthApproching)
                {
                    StealthApproach();
                }

                return;
            }
        }
Exemplo n.º 12
0
    protected override void OnTouch(object sender, InfoEventArgs <Point> e)
    {
        Tile tile = Board.GetTile(e.info);

        if (tile.content == null)
        {
            return;
        }

        Unit unit = tile.content.GetComponent <Unit>();

        if (unit && unit.turn.IsAvailable() && RoundController.RoundSide == unit.alliance)
        {
            RangeManager.GetRanges(unit);
            RoundController.Select(unit);

            owner.ChangeState <SelectActionState>();
        }
    }
        public void Initialize(IClassRotation specialization)
        {
            settings = PriestSettings.Current;
            if (settings.PartyDrinkName != "")
            {
                ToolBox.AddToDoNotSellList(settings.PartyDrinkName);
            }
            cast = new Cast(Smite, UseWand, settings);

            this.specialization          = specialization as Priest;
            (RotationType, RotationRole) = ToolBox.GetRotationType(specialization);
            TalentsManager.InitTalents(settings);

            _wandThreshold = settings.WandThreshold > 100 ? 50 : settings.WandThreshold;
            RangeManager.SetRange(28f);

            FightEvents.OnFightEnd   += FightEndHandler;
            FightEvents.OnFightStart += FightStartHandler;

            Rotation();
        }
Exemplo n.º 14
0
        // EVENT HANDLERS
        private void FightEndHandler(ulong guid)
        {
            cast.IsBackingUp = false;
            _iCanUseWand     = false;
            _polymorphableEnemyInThisFight = false;
            _isPolymorphing = false;
            RangeManager.SetRange(Fireball.MaxRange);

            if (!Fight.InFight &&
                Me.InCombatFlagOnly &&
                _polymorphedEnemy != null &&
                ObjectManager.GetNumberAttackPlayer() < 1 &&
                _polymorphedEnemy.IsAlive)
            {
                Logger.Log($"Starting fight with {_polymorphedEnemy.Name} (polymorphed)");
                Fight.InFight       = false;
                Fight.CurrentTarget = _polymorphedEnemy;
                ulong _enemyGUID = _polymorphedEnemy.Guid;
                _polymorphedEnemy = null;
                Fight.StartFight(_enemyGUID);
            }
        }
        protected override void Pull()
        {
            base.Pull();

            RangeManager.SetRangeToMelee();

            // Check if caster
            if (_casterEnemies.Contains(ObjectManager.Target.Name))
            {
                _fightingACaster = true;
            }

            // Remove Ghost Wolf
            if (Me.HaveBuff("Ghost Wolf") &&
                cast.OnSelf(GhostWolf))
            {
                return;
            }

            // Water Shield
            if (!Me.HaveBuff("Water Shield") &&
                !Me.HaveBuff("Lightning Shield") &&
                (settings.UseWaterShield || !settings.UseLightningShield || Me.ManaPercentage < _lowManaThreshold) &&
                cast.OnSelf(WaterShield))
            {
                return;
            }

            // Ligntning Shield
            if (Me.ManaPercentage > _lowManaThreshold &&
                !Me.HaveBuff("Lightning Shield") &&
                !Me.HaveBuff("Water Shield") &&
                settings.UseLightningShield &&
                (!WaterShield.KnownSpell || !settings.UseWaterShield) &&
                cast.OnSelf(LightningShield))
            {
                return;
            }
        }
Exemplo n.º 16
0
        public void Initialize(IClassRotation specialization)
        {
            settings = MageSettings.Current;
            if (settings.PartyDrinkName != "")
            {
                ToolBox.AddToDoNotSellList(settings.PartyDrinkName);
            }
            cast         = new Cast(Fireball, UseWand, settings);
            _foodManager = new MageFoodManager(cast);

            this.specialization          = specialization as Mage;
            (RotationType, RotationRole) = ToolBox.GetRotationType(specialization);
            TalentsManager.InitTalents(settings);

            RangeManager.SetRange(30);

            FightEvents.OnFightEnd   += FightEndHandler;
            FightEvents.OnFightStart += FightStartHandler;
            FightEvents.OnFightLoop  += FightLoopHandler;

            Rotation();
        }
        public void Initialize(IClassRotation specialization)
        {
            RangeManager.SetRange(28);
            settings = DruidSettings.Current;
            if (settings.PartyDrinkName != "")
            {
                ToolBox.AddToDoNotSellList(settings.PartyDrinkName);
            }
            cast = new Cast(Wrath, null, settings);

            this.specialization          = specialization as Druid;
            (RotationType, RotationRole) = ToolBox.GetRotationType(specialization);
            TalentsManager.InitTalents(settings);

            FightEvents.OnFightEnd          += FightEndHandler;
            FightEvents.OnFightStart        += FightStartHandler;
            FightEvents.OnFightLoop         += FightLoopHandler;
            MovementEvents.OnMoveToPulse    += MoveToPulseHandler;
            OthersEvents.OnAddBlackListGuid += BlackListHandler;

            Rotation();
        }
Exemplo n.º 18
0
        protected override void Pull()
        {
            base.Pull();

            RangeManager.SetRangeToMelee();

            // Check if caster in list
            if (_casterEnemies.Contains(ObjectManager.Target.Name))
            {
                _fightingACaster = true;
            }

            // Charge Berserker Stance
            if (InBerserkStance() &&
                ObjectManager.Target.GetDistance > 9f &&
                ObjectManager.Target.GetDistance < 24f &&
                ObjectManager.Target.HealthPercent < 90 &&
                cast.OnTarget(Intercept))
            {
                return;
            }
        }
        protected override void Pull()
        {
            base.Pull();

            RangeManager.SetRangeToMelee();

            // Check if caster in list
            if (_casterEnemies.Contains(ObjectManager.Target.Name))
            {
                _fightingACaster = true;
            }

            // Stealth
            if (!Me.HaveBuff("Stealth") &&
                ObjectManager.Target.GetDistance > 15f &&
                ObjectManager.Target.GetDistance < 25f &&
                settings.StealthApproach &&
                Backstab.KnownSpell &&
                (!ToolBox.HasPoisonDebuff() || settings.StealthWhenPoisoned) &&
                cast.OnSelf(Stealth))
            {
                return;
            }

            // Stealth approach
            if (Me.HaveBuff("Stealth") &&
                ObjectManager.Target.GetDistance > 3f &&
                !_isStealthApproching)
            {
                StealthApproach();
            }

            // Auto
            if (ObjectManager.Target.GetDistance < 6f && !Me.HaveBuff("Stealth"))
            {
                ToggleAutoAttack(true);
            }
        }
        protected void StealthApproach()
        {
            RangeManager.SetRangeToMelee();
            Timer stealthApproachTimer = new Timer(15000);

            _isStealthApproching = true;

            if (ObjectManager.Me.IsAlive && ObjectManager.Target.IsAlive)
            {
                while (Conditions.InGameAndConnectedAndAliveAndProductStartedNotInPause &&
                       ObjectManager.Target.GetDistance > 2.5f &&
                       (specialization.RotationType == Enums.RotationType.Party || ToolBox.GetClosestHostileFrom(ObjectManager.Target, 20f) == null) &&
                       Fight.InFight &&
                       !stealthApproachTimer.IsReady &&
                       Me.HaveBuff("Stealth"))
                {
                    ToggleAutoAttack(false);

                    Vector3 position = ToolBox.BackofVector3(ObjectManager.Target.Position, ObjectManager.Target, 2.5f);
                    MovementManager.MoveTo(position);
                    Thread.Sleep(50);
                    CastOpener();
                }

                if (stealthApproachTimer.IsReady &&
                    ToolBox.Pull(cast, settings.AlwaysPull, new List <AIOSpell> {
                    Shoot, Throw
                }))
                {
                    _combatMeleeTimer = new Timer(2000);
                    return;
                }

                //ToolBox.CheckAutoAttack(Attack);

                _isStealthApproching = false;
            }
        }
Exemplo n.º 21
0
        private void FightLoopHandler(WoWUnit unit, CancelEventArgs cancelable)
        {
            float minDistance = RangeManager.GetMeleeRangeWithTarget() + 3f;

            // Do we need to backup?
            if ((ObjectManager.Target.HaveBuff("Frostbite") || ObjectManager.Target.HaveBuff("Frost Nova")) &&
                ObjectManager.Target.GetDistance < minDistance &&
                Me.IsAlive &&
                ObjectManager.Target.IsAlive &&
                !cast.IsBackingUp &&
                !Me.IsCast &&
                !RangeManager.CurrentRangeIsMelee() &&
                ObjectManager.Target.HealthPercent > 5 &&
                !_isPolymorphing)
            {
                cast.IsBackingUp = true;
                Timer timer = new Timer(3000);

                // Using CTM
                if (settings.BackupUsingCTM)
                {
                    Vector3 position = ToolBox.BackofVector3(Me.Position, Me, 15f);
                    MovementManager.Go(PathFinder.FindPath(position), false);
                    Thread.Sleep(500);

                    // Backup loop
                    while (MovementManager.InMoveTo &&
                           Conditions.InGameAndConnectedAndAliveAndProductStartedNotInPause &&
                           ObjectManager.Target.GetDistance < minDistance &&
                           ObjectManager.Me.IsAlive &&
                           ObjectManager.Target.IsAlive &&
                           (ObjectManager.Target.HaveBuff("Frostbite") || ObjectManager.Target.HaveBuff("Frost Nova")) &&
                           !timer.IsReady)
                    {
                        // Wait follow path
                        Thread.Sleep(300);
                        if (settings.BlinkWhenBackup)
                        {
                            cast.OnSelf(Blink);
                        }
                    }
                    MovementManager.StopMove();
                    Thread.Sleep(500);
                }
                // Using Keyboard
                else
                {
                    while (Conditions.InGameAndConnectedAndAliveAndProductStartedNotInPause &&
                           ObjectManager.Me.IsAlive &&
                           ObjectManager.Target.IsAlive &&
                           ObjectManager.Target.GetDistance < minDistance &&
                           (ObjectManager.Target.HaveBuff("Frostbite") || ObjectManager.Target.HaveBuff("Frost Nova")) &&
                           !timer.IsReady)
                    {
                        Move.Backward(Move.MoveAction.PressKey, 500);
                    }
                }
                cast.IsBackingUp = false;
            }

            // Polymorph
            if (settings.UsePolymorph &&
                ObjectManager.GetNumberAttackPlayer() > 1 &&
                Polymorph.KnownSpell &&
                !cast.IsBackingUp &&
                !cast.IsApproachingTarget &&
                specialization.RotationType != Enums.RotationType.Party &&
                _polymorphableEnemyInThisFight)
            {
                WoWUnit myNearbyPolymorphed = null;
                // Detect if a polymorph cast has succeeded
                if (_polymorphedEnemy != null)
                {
                    myNearbyPolymorphed = ObjectManager.GetObjectWoWUnit().Find(u => u.HaveBuff("Polymorph") && u.Guid == _polymorphedEnemy.Guid);
                }

                // If we don't have a polymorphed enemy
                if (myNearbyPolymorphed == null)
                {
                    _polymorphedEnemy = null;
                    _isPolymorphing   = true;
                    WoWUnit firstTarget = ObjectManager.Target;
                    WoWUnit potentialPolymorphTarget = null;

                    // Select our attackers one by one for potential polymorphs
                    foreach (WoWUnit enemy in ObjectManager.GetUnitAttackPlayer())
                    {
                        Interact.InteractGameObject(enemy.GetBaseAddress);

                        if ((enemy.CreatureTypeTarget == "Beast" || enemy.CreatureTypeTarget == "Humanoid") &&
                            enemy.Guid != firstTarget.Guid)
                        {
                            potentialPolymorphTarget = enemy;
                            break;
                        }
                    }

                    if (potentialPolymorphTarget == null)
                    {
                        _polymorphableEnemyInThisFight = false;
                    }

                    // Polymorph cast
                    if (potentialPolymorphTarget != null &&
                        _polymorphedEnemy == null &&
                        cast.OnFocusUnit(Polymorph, potentialPolymorphTarget))
                    {
                        Usefuls.WaitIsCasting();
                        _polymorphedEnemy = potentialPolymorphTarget;
                    }

                    _isPolymorphing = false;
                }
            }
        }
        protected override void CombatRotation()
        {
            // Reactivate auto attack (after dragon's breath)
            if (!ToolBox.UsingWand())
            {
                ToolBox.CheckAutoAttack(Attack);
            }

            base.CombatRotation();
            WoWUnit Target = ObjectManager.Target;

            // Stop wand use on multipull
            if (_iCanUseWand && ObjectManager.GetNumberAttackPlayer() > 1)
            {
                _iCanUseWand = false;
            }

            // Remove Curse
            if (ToolBox.HasCurseDebuff())
            {
                Thread.Sleep(Main.humanReflexTime);
                if (cast.OnSelf(RemoveCurse))
                {
                    return;
                }
            }

            // Mana Shield
            if (!Me.HaveBuff("Mana Shield") &&
                (Me.HealthPercent < 30 && Me.ManaPercentage > 50 ||
                 Me.HealthPercent < 10) &&
                cast.OnTarget(ManaShield))
            {
                return;
            }

            // Use Mana Stone
            if ((ObjectManager.GetNumberAttackPlayer() > 1 && Me.ManaPercentage < 50 || Me.ManaPercentage < 5) &&
                _foodManager.UseManaStone())
            {
                return;
            }

            // Combustion
            if (!Me.HaveBuff("Combustion") &&
                cast.OnSelf(Combustion))
            {
                return;
            }

            // Blast Wave
            if (settings.BlastWaveOnMulti &&
                ToolBox.GetNbEnemiesClose(10) > 1 &&
                ObjectManager.GetNumberAttackPlayer() > 1 &&
                cast.OnSelf(BlastWave))
            {
                return;
            }

            // Dragon's Breath
            if (Target.GetDistance <= 10f &&
                settings.UseDragonsBreath &&
                (Target.HealthPercent > settings.WandThreshold || ObjectManager.GetNumberAttackPlayer() > 1 || Me.HealthPercent < 40 || !_iCanUseWand) &&
                _polymorphedEnemy == null &&
                cast.OnSelf(DragonsBreath))
            {
                return;
            }

            // Fire Blast
            if (Target.HealthPercent <= settings.FireblastThreshold &&
                (Target.HealthPercent > settings.WandThreshold || ObjectManager.GetNumberAttackPlayer() > 1 || Me.HealthPercent < 40 || !_iCanUseWand) &&
                !Target.HaveBuff("Polymorph") &&
                cast.OnTarget(FireBlast))
            {
                return;
            }

            // Cone of Cold
            if (Target.GetDistance < 10 &&
                settings.UseConeOfCold &&
                _polymorphedEnemy == null &&
                cast.OnTarget(ConeOfCold))
            {
                return;
            }

            // FireBall
            if ((Target.HealthPercent > settings.WandThreshold || ObjectManager.GetNumberAttackPlayer() > 1 || Me.HealthPercent < 40 || !_iCanUseWand) &&
                !Target.HaveBuff("Polymorph") &&
                cast.OnTarget(Fireball))
            {
                return;
            }

            // Stop wand if banned
            if (ToolBox.UsingWand() &&
                UnitImmunities.Contains(ObjectManager.Target, "Shoot"))
            {
                if (cast.OnTarget(UseWand))
                {
                    return;
                }
            }

            // Spell if wand banned
            if (UnitImmunities.Contains(ObjectManager.Target, "Shoot"))
            {
                if (cast.OnTarget(Fireball) || cast.OnTarget(Frostbolt) || cast.OnTarget(ArcaneMissiles))
                {
                    return;
                }
            }

            // Use Wand
            if (!ToolBox.UsingWand() &&
                _iCanUseWand &&
                !cast.IsBackingUp &&
                !MovementManager.InMovement)
            {
                if (cast.OnTarget(UseWand, false))
                {
                    return;
                }
            }

            // Go in melee because nothing else to do
            if (!ToolBox.UsingWand() &&
                !UseWand.IsSpellUsable &&
                !RangeManager.CurrentRangeIsMelee() &&
                !cast.IsBackingUp &&
                Target.IsAlive)
            {
                Logger.Log("Going in melee");
                RangeManager.SetRangeToMelee();
                return;
            }
        }
Exemplo n.º 23
0
        protected override void CombatRotation()
        {
            base.CombatRotation();
            WoWUnit Target = ObjectManager.Target;
            bool    _shouldBeInterrupted = ToolBox.TargetIsCasting();
            bool    _inMeleeRange        = Target.GetDistance < RangeManager.GetMeleeRangeWithTarget();
            bool    _saveRage            = Cleave.KnownSpell &&
                                           ObjectManager.GetNumberAttackPlayer() > 1 &&
                                           ToolBox.GetNbEnemiesClose(15f) > 1 &&
                                           settings.UseCleave ||
                                           Execute.KnownSpell && Target.HealthPercent < 40 ||
                                           Bloodthirst.KnownSpell && ObjectManager.Me.Rage < 40 && Target.HealthPercent > 50;

            // Check Auto-Attacking
            ToolBox.CheckAutoAttack(Attack);

            // Check if we need to interrupt
            if (_shouldBeInterrupted)
            {
                _fightingACaster = true;
                if (!_casterEnemies.Contains(Target.Name))
                {
                    _casterEnemies.Add(Target.Name);
                }
            }

            // Intercept
            if (ObjectManager.Target.GetDistance > 12f &&
                ObjectManager.Target.HealthPercent < 90 &&
                ObjectManager.Target.GetDistance < 24f &&
                cast.OnTarget(Intercept))
            {
                return;
            }

            // Berserker stance
            if (!InBerserkStance() &&
                cast.OnSelf(BerserkerStance))
            {
                return;
            }

            // Interrupt
            if (_shouldBeInterrupted &&
                cast.OnTarget(Pummel))
            {
                return;
            }

            // Victory Rush
            if (cast.OnTarget(VictoryRush))
            {
                return;
            }

            // Rampage
            if (!Me.HaveBuff("Rampage") || Me.HaveBuff("Rampage") && ToolBox.BuffTimeLeft("Rampage") < 10)
            {
                if (cast.OnTarget(Rampage))
                {
                    return;
                }
            }

            // Execute
            if (cast.OnTarget(Execute))
            {
                return;
            }

            // Overpower
            if (cast.OnTarget(Overpower))
            {
                return;
            }

            // Bloodthirst
            if (_inMeleeRange &&
                cast.OnTarget(Bloodthirst))
            {
                return;
            }

            // Whirlwind
            if (_inMeleeRange &&
                Me.Rage > 30 &&
                cast.OnTarget(Whirlwind))
            {
                return;
            }

            // Sweeping Strikes
            if (_inMeleeRange &&
                ToolBox.GetNbEnemiesClose(15f) > 1 &&
                cast.OnTarget(SweepingStrikes))
            {
                return;
            }

            // Cleave
            if (_inMeleeRange &&
                ToolBox.GetNbEnemiesClose(15f) > 1 &&
                (!SweepingStrikes.IsSpellUsable || !SweepingStrikes.KnownSpell) &&
                ObjectManager.Me.Rage > 40 &&
                settings.UseCleave &&
                cast.OnTarget(Cleave))
            {
                return;
            }

            // Blood Rage
            if (settings.UseBloodRage &&
                Me.HealthPercent > 90 &&
                cast.OnSelf(BloodRage))
            {
                return;
            }

            // Hamstring
            if ((Target.CreatureTypeTarget == "Humanoid" || Target.Name.Contains("Plainstrider")) &&
                _inMeleeRange &&
                settings.UseHamstring &&
                Target.HealthPercent < 40 &&
                !Target.HaveBuff("Hamstring") &&
                cast.OnTarget(Hamstring))
            {
                return;
            }

            // Commanding Shout
            if (!Me.HaveBuff("Commanding Shout") &&
                settings.UseCommandingShout &&
                cast.OnSelf(CommandingShout))
            {
                return;
            }

            // Battle Shout
            if (!Me.HaveBuff("Battle Shout") &&
                (!settings.UseCommandingShout || !CommandingShout.KnownSpell) &&
                cast.OnSelf(BattleShout))
            {
                return;
            }

            // Heroic Strike (after whirlwind)
            if (_inMeleeRange &&
                !HeroicStrikeOn() &&
                Me.Rage > 60 &&
                cast.OnTarget(HeroicStrike))
            {
                return;
            }

            // Heroic Strike (before whirlwind)
            if (_inMeleeRange &&
                !Whirlwind.KnownSpell &&
                !HeroicStrikeOn() &&
                (!_saveRage || Me.Rage > 60) &&
                cast.OnTarget(HeroicStrike))
            {
                return;
            }
        }
Exemplo n.º 24
0
        protected override void HealerCombat()
        {
            base.HealerCombat();

            WoWUnit Target = ObjectManager.Target;

            WoWPlayer allyNeedBigHeal = AIOParty.GroupAndRaid
                                        .Find(a => a.IsAlive && a.HealthPercent < 40);

            RangeManager.SetRange(25);

            // Remove Ghost Wolf
            if (Me.HaveBuff("Ghost Wolf") &&
                cast.OnSelf(GhostWolf))
            {
                return;
            }

            // PARTY Healing Wave with NATURE SWIFTNESS
            if (Me.HaveBuff("Nature's Swiftness"))
            {
                if (allyNeedBigHeal != null && cast.OnFocusUnit(HealingWave, allyNeedBigHeal))
                {
                    return;
                }
            }

            // Party Nature's Swiftness
            if (allyNeedBigHeal != null &&
                !Me.HaveBuff("Nature's Swiftness") &&
                cast.OnSelf(NaturesSwiftness))
            {
                return;
            }

            // PARTY Lesser Healing Wave
            List <AIOPartyMember> alliesNeedingLesserHealWave = AIOParty.GroupAndRaid
                                                                .FindAll(a => a.IsAlive && a.HealthPercent < settings.PartyLesserHealingWaveThreshold)
                                                                .OrderBy(a => a.HealthPercent)
                                                                .ToList();

            if (alliesNeedingLesserHealWave.Count > 0 &&
                cast.OnFocusUnit(LesserHealingWave, alliesNeedingLesserHealWave[0]))
            {
                return;
            }

            // PARTY Healing Wave
            List <AIOPartyMember> alliesNeedingHealWave = AIOParty.GroupAndRaid
                                                          .FindAll(a => a.IsAlive && a.HealthPercent < settings.PartyHealingWaveThreshold)
                                                          .OrderBy(a => a.HealthPercent)
                                                          .ToList();

            if (alliesNeedingHealWave.Count > 0 &&
                cast.OnFocusUnit(HealingWave, alliesNeedingHealWave[0]))
            {
                return;
            }

            // PARTY Chain Heal
            List <AIOPartyMember> alliesNeedChainHeal = AIOParty.GroupAndRaid
                                                        .FindAll(a => a.IsAlive && a.HealthPercent < settings.PartyChainHealThreshold)
                                                        .OrderBy(a => a.GetDistance)
                                                        .ToList();

            if (alliesNeedChainHeal.Count >= settings.PartyChainHealAmount)
            {
                if (alliesNeedChainHeal.Exists(p => p.Guid == Me.Guid) &&
                    cast.OnSelf(ChainHeal))
                {
                    return;
                }
                if (cast.OnFocusUnit(ChainHeal, alliesNeedChainHeal[0]))
                {
                    return;
                }
            }

            // PARTY Earth Shield
            if (EarthShield.KnownSpell && !AIOParty.GroupAndRaid.Exists(a => a.HaveBuff("Earth Shield")))
            {
                foreach (WoWPlayer player in AIOParty.GroupAndRaid.FindAll(p => p.IsAlive && p.WowClass != wManager.Wow.Enums.WoWClass.Shaman))
                {
                    List <WoWUnit> enemiesTargetingHim = AIOParty.EnemiesFighting
                                                         .FindAll(e => e.Target == player.Guid);
                    if (enemiesTargetingHim.Count > 1 && cast.OnFocusUnit(EarthShield, player))
                    {
                        return;
                    }
                }
            }

            // PARTY Cure Poison
            if (settings.PartyCurePoison)
            {
                WoWPlayer needCurePoison = AIOParty.GroupAndRaid
                                           .Find(m => ToolBox.HasPoisonDebuff(m.Name));
                if (needCurePoison != null && cast.OnFocusUnit(CurePoison, needCurePoison))
                {
                    return;
                }
            }

            // PARTY Cure Disease
            if (settings.PartyCureDisease)
            {
                WoWPlayer needCureDisease = AIOParty.GroupAndRaid
                                            .Find(m => m.IsAlive && ToolBox.HasDiseaseDebuff(m.Name));
                if (needCureDisease != null && cast.OnFocusUnit(CureDisease, needCureDisease))
                {
                    return;
                }
            }

            // Bloodlust
            if (!Me.HaveBuff("Bloodlust") &&
                Target.HealthPercent > 80 &&
                cast.OnSelf(Bloodlust))
            {
                return;
            }

            // Water Shield
            if (!Me.HaveBuff("Water Shield") &&
                !Me.HaveBuff("Lightning Shield") &&
                (settings.UseWaterShield || !settings.UseLightningShield || Me.ManaPercentage <= _lowManaThreshold) &&
                cast.OnSelf(WaterShield))
            {
                return;
            }

            // Totems
            if (_totemManager.CastTotems(specialization))
            {
                return;
            }
        }
Exemplo n.º 25
0
 private void Awake()
 {
     rangeMan = GameObject.FindGameObjectWithTag("RangeManager").GetComponent <RangeManager>();
 }
Exemplo n.º 26
0
        protected override void CombatRotation()
        {
            base.CombatRotation();

            bool    _shouldBeInterrupted = ToolBox.TargetIsCasting();
            WoWUnit Target = ObjectManager.Target;

            // Force melee
            if (_combatMeleeTimer.IsReady)
            {
                RangeManager.SetRangeToMelee();
            }

            // Check Auto-Attacking
            ToolBox.CheckAutoAttack(Attack);

            // Check if interruptable enemy is in list
            if (_shouldBeInterrupted)
            {
                _fightingACaster = true;
                RangeManager.SetRangeToMelee();
                if (!_casterEnemies.Contains(ObjectManager.Target.Name))
                {
                    _casterEnemies.Add(ObjectManager.Target.Name);
                }
            }

            // Kick interrupt
            if (_shouldBeInterrupted)
            {
                Thread.Sleep(Main.humanReflexTime);
                if (cast.OnTarget(Kick) || cast.OnTarget(Gouge) || cast.OnTarget(KidneyShot))
                {
                    return;
                }
            }

            // Adrenaline Rush
            if ((ObjectManager.GetNumberAttackPlayer() > 1 || Target.IsElite) && !Me.HaveBuff("Adrenaline Rush"))
            {
                if (cast.OnTarget(AdrenalineRush))
                {
                    return;
                }
            }

            // Blade Flurry
            if (ObjectManager.GetNumberAttackPlayer() > 1 && !Me.HaveBuff("Blade Flurry"))
            {
                if (cast.OnTarget(BladeFlurry))
                {
                    return;
                }
            }

            // Riposte
            if (Riposte.IsSpellUsable && (Target.CreatureTypeTarget.Equals("Humanoid") || settings.RiposteAll))
            {
                if (cast.OnTarget(Riposte))
                {
                    return;
                }
            }

            // Bandage
            if (Target.HaveBuff("Blind"))
            {
                MovementManager.StopMoveTo(true, 500);
                ItemsManager.UseItemByNameOrId(_myBestBandage);
                Logger.Log("Using " + _myBestBandage);
                Usefuls.WaitIsCasting();
                return;
            }

            // Blind
            if (Me.HealthPercent < 40 && !ToolBox.HasDebuff("Recently Bandaged") && _myBestBandage != null &&
                settings.UseBlindBandage)
            {
                if (cast.OnTarget(Blind))
                {
                    return;
                }
            }

            // Evasion
            if (ObjectManager.GetNumberAttackPlayer() > 1 || Me.HealthPercent < 30 && !Me.HaveBuff("Evasion") && Target.HealthPercent > 50)
            {
                if (cast.OnTarget(Evasion))
                {
                    return;
                }
            }

            // Cloak of Shadows
            if (Me.HealthPercent < 30 && !Me.HaveBuff("Cloak of Shadows") && Target.HealthPercent > 50)
            {
                if (cast.OnTarget(CloakOfShadows))
                {
                    return;
                }
            }

            // Backstab in combat
            if (IsTargetStunned() && ToolBox.GetMHWeaponType().Equals("Daggers"))
            {
                if (cast.OnTarget(Backstab))
                {
                    return;
                }
            }

            // Slice and Dice
            if (!Me.HaveBuff("Slice and Dice") && Me.ComboPoint > 1 && Target.HealthPercent > 40)
            {
                if (cast.OnTarget(SliceAndDice))
                {
                    return;
                }
            }

            // Eviscerate logic
            if (Me.ComboPoint > 0 && Target.HealthPercent < 30 ||
                Me.ComboPoint > 1 && Target.HealthPercent < 45 ||
                Me.ComboPoint > 2 && Target.HealthPercent < 60 ||
                Me.ComboPoint > 3 && Target.HealthPercent < 70)
            {
                if (cast.OnTarget(Eviscerate))
                {
                    return;
                }
            }

            // GhostlyStrike
            if (Me.ComboPoint < 5 && !IsTargetStunned() &&
                (!_fightingACaster || !Kick.KnownSpell ||
                 Me.Energy > GhostlyStrike.Cost + Kick.Cost))
            {
                if (cast.OnTarget(GhostlyStrike))
                {
                    return;
                }
            }

            // Hemohrrage
            if (Me.ComboPoint < 5 && !IsTargetStunned() &&
                (!_fightingACaster || !Kick.KnownSpell ||
                 Me.Energy > Hemorrhage.Cost + Kick.Cost))
            {
                if (cast.OnTarget(Hemorrhage))
                {
                    return;
                }
            }

            // Sinister Strike
            if (Me.ComboPoint < 5 && !IsTargetStunned() &&
                (!_fightingACaster || !Kick.KnownSpell ||
                 Me.Energy > SinisterStrike.Cost + Kick.Cost))
            {
                if (cast.OnTarget(SinisterStrike))
                {
                    return;
                }
            }
        }
Exemplo n.º 27
0
        protected override void CombatRotation()
        {
            WoWUnit Target   = ObjectManager.Target;
            float   minRange = RangeManager.GetMeleeRangeWithTarget() + settings.BackupDistance;

            if (Target.GetDistance < minRange &&
                !cast.IsBackingUp)
            {
                ToolBox.CheckAutoAttack(Attack);
            }

            if (Target.GetDistance > minRange &&
                !cast.IsBackingUp)
            {
                ReenableAutoshot();
            }

            if (Target.GetDistance < minRange &&
                !settings.BackupFromMelee)
            {
                _canOnlyMelee = true;
            }

            // Mend Pet
            if (ObjectManager.Pet.IsAlive &&
                ObjectManager.Pet.HealthPercent <= 50 &&
                !ObjectManager.Pet.HaveBuff("Mend Pet") &&
                cast.OnFocusUnit(MendPet, ObjectManager.Pet))
            {
                return;
            }

            // Aspect of the viper
            if (!Me.HaveBuff("Aspect of the Viper") &&
                Me.ManaPercentage < 30 &&
                cast.OnSelf(AspectViper))
            {
                return;
            }

            // Aspect of the Hawk
            if (!Me.HaveBuff("Aspect of the Hawk") &&
                (Me.ManaPercentage > 90 || Me.HaveBuff("Aspect of the Cheetah")) ||
                !Me.HaveBuff("Aspect of the Hawk") &&
                !Me.HaveBuff("Aspect of the Cheetah") &&
                !Me.HaveBuff("Aspect of the Viper"))
            {
                if (cast.OnSelf(AspectHawk))
                {
                    return;
                }
            }

            // Aspect of the Monkey
            if (!Me.HaveBuff("Aspect of the Monkey") &&
                !AspectHawk.KnownSpell &&
                cast.OnSelf(AspectMonkey))
            {
                return;
            }

            // Disengage
            if (settings.UseDisengage &&
                ObjectManager.Pet.Target == Me.Target &&
                Target.Target == Me.Guid &&
                Target.GetDistance < minRange &&
                cast.OnTarget(Disengage))
            {
                return;
            }

            // Bestial Wrath
            if (Target.GetDistance < AutoShot.MaxRange &&
                Target.HealthPercent >= 60 &&
                Me.ManaPercentage > 10 &&
                BestialWrath.IsSpellUsable &&
                (settings.BestialWrathOnMulti && ObjectManager.GetUnitAttackPlayer().Count > 1 || !settings.BestialWrathOnMulti) &&
                cast.OnSelf(BestialWrath))
            {
                return;
            }

            // Rapid Fire
            if (Target.GetDistance < AutoShot.MaxRange &&
                Target.HealthPercent >= 80.0 &&
                (settings.RapidFireOnMulti && ObjectManager.GetUnitAttackPlayer().Count > 1 || !settings.RapidFireOnMulti) &&
                cast.OnSelf(RapidFire))
            {
                return;
            }

            // Kill Command
            if (ObjectManager.Pet.IsAlive &&
                cast.OnTarget(KillCommand))
            {
                return;
            }

            // Raptor Strike
            if (settings.UseRaptorStrike &&
                Target.GetDistance < minRange &&
                !RaptorStrikeOn() &&
                cast.OnTarget(RaptorStrike))
            {
                return;
            }

            // Mongoose Bite
            if (Target.GetDistance < minRange &&
                cast.OnTarget(MongooseBite))
            {
                return;
            }

            // Feign Death
            if ((Me.HealthPercent < 20 ||
                 (ObjectManager.GetNumberAttackPlayer() > 1 && ObjectManager.GetUnitAttackPlayer().Where(u => u.Target == Me.Guid).Count() > 0)) &&
                cast.OnSelf(FeignDeath))
            {
                return;
            }

            // Concussive Shot
            if ((Target.CreatureTypeTarget == "Humanoid" || Target.Name.Contains("Plainstrider")) &&
                settings.UseConcussiveShot &&
                Target.HealthPercent < 20 &&
                !ConcussiveShot.TargetHaveBuff &&
                cast.OnTarget(ConcussiveShot))
            {
                return;
            }

            // Wing Clip
            if ((Target.CreatureTypeTarget == "Humanoid" || Target.Name.Contains("Plainstrider")) &&
                settings.UseConcussiveShot &&
                Target.HealthPercent < 20 &&
                !Target.HaveBuff("Wing Clip") &&
                cast.OnTarget(WingClip))
            {
                return;
            }

            // Hunter's Mark
            if (ObjectManager.Pet.IsValid &&
                !HuntersMark.TargetHaveBuff &&
                Target.GetDistance > minRange &&
                Target.IsAlive &&
                cast.OnTarget(HuntersMark))
            {
                return;
            }

            double lastAutoInMilliseconds = (DateTime.Now - LastAuto).TotalMilliseconds;

            // Steady Shot
            if (lastAutoInMilliseconds > 0 &&
                lastAutoInMilliseconds < 500 &&
                Me.ManaPercentage > 30 &&
                cast.OnTarget(SteadyShot))
            {
                return;
            }

            // Serpent Sting
            if (!Target.HaveBuff("Serpent Sting") &&
                Target.GetDistance < AutoShot.MaxRange &&
                Target.HealthPercent >= 60 &&
                Me.ManaPercentage > 50u &&
                !SteadyShot.KnownSpell &&
                Target.GetDistance > minRange &&
                cast.OnTarget(SerpentSting))
            {
                return;
            }

            // Intimidation
            if (Target.GetDistance < AutoShot.MaxRange &&
                Target.GetDistance > minRange &&
                Target.HealthPercent >= 20 &&
                Me.ManaPercentage > 10 &&
                !settings.IntimidationInterrupt &&
                cast.OnSelf(Intimidation))
            {
                return;
            }

            // Intimidation interrupt
            if (Target.GetDistance < AutoShot.MaxRange &&
                ToolBox.TargetIsCasting() &&
                settings.IntimidationInterrupt &&
                cast.OnSelf(Intimidation))
            {
                return;
            }

            // Arcane Shot
            if (Target.GetDistance < AutoShot.MaxRange &&
                Target.HealthPercent >= 30 &&
                Me.ManaPercentage > 80 &&
                !SteadyShot.KnownSpell &&
                cast.OnTarget(ArcaneShot))
            {
                return;
            }
        }
        protected override void CombatRotation()
        {
            base.CombatRotation();

            WoWUnit Target               = ObjectManager.Target;
            bool    _isPoisoned          = ToolBox.HasPoisonDebuff();
            bool    _hasDisease          = ToolBox.HasDiseaseDebuff();
            bool    _shouldBeInterrupted = ToolBox.TargetIsCasting();

            // Force melee
            if (_combatMeleeTimer.IsReady)
            {
                RangeManager.SetRangeToMelee();
            }

            // Check Auto-Attacking
            ToolBox.CheckAutoAttack(Attack);

            if (_shouldBeInterrupted)
            {
                _fightingACaster = true;
                RangeManager.SetRangeToMelee();
                if (!_casterEnemies.Contains(Target.Name))
                {
                    _casterEnemies.Add(Target.Name);
                }
            }

            // Remove Ghost Wolf
            if (Me.HaveBuff("Ghost Wolf") &&
                cast.OnSelf(GhostWolf))
            {
                return;
            }

            // Healing Wave + Lesser Healing Wave
            if (Me.HealthPercent < settings.HealThreshold &&
                (Target.HealthPercent > 15 || Me.HealthPercent < 25))
            {
                if (cast.OnSelf(LesserHealingWave) || cast.OnSelf(HealingWave))
                {
                    return;
                }
            }

            // Cure Poison
            if (settings.CurePoison &&
                _isPoisoned &&
                CurePoison.KnownSpell &&
                Me.ManaPercentage > _lowManaThreshold)
            {
                Thread.Sleep(Main.humanReflexTime);
                if (cast.OnSelf(CurePoison))
                {
                    return;
                }
            }

            // Cure Disease
            if (settings.CureDisease &&
                CureDisease.KnownSpell &&
                _hasDisease &&
                Me.ManaPercentage > _lowManaThreshold)
            {
                Thread.Sleep(Main.humanReflexTime);
                if (cast.OnSelf(CureDisease))
                {
                    return;
                }
            }

            // Bloodlust
            if (!Me.HaveBuff("Bloodlust") &&
                Target.HealthPercent > 80 &&
                cast.OnSelf(Bloodlust))
            {
                return;
            }

            // Water Shield
            if (!Me.HaveBuff("Water Shield") &&
                !Me.HaveBuff("Lightning Shield") &&
                (settings.UseWaterShield || !settings.UseLightningShield || Me.ManaPercentage <= _lowManaThreshold) &&
                cast.OnSelf(WaterShield))
            {
                return;
            }

            // Lightning Shield
            if (Me.ManaPercentage > _lowManaThreshold &&
                !Me.HaveBuff("Lightning Shield") &&
                !Me.HaveBuff("Water Shield") &&
                settings.UseLightningShield &&
                (!WaterShield.KnownSpell || !settings.UseWaterShield) &&
                cast.OnTarget(LightningShield))
            {
                return;
            }

            // Shamanistic Rage
            if (Me.ManaPercentage < _mediumManaThreshold &&
                (Target.HealthPercent > 80 && !settings.ENShamanisticRageOnMultiOnly || ObjectManager.GetNumberAttackPlayer() > 1) &&
                cast.OnSelf(ShamanisticRage))
            {
                return;
            }

            // Earth Shock Focused
            if (Me.HaveBuff("Focused") &&
                Target.GetDistance < 19f &&
                cast.OnTarget(EarthShock))
            {
                return;
            }

            // Frost Shock
            if ((Target.CreatureTypeTarget == "Humanoid" || Target.Name.Contains("Plainstrider")) &&
                settings.ENFrostShockHumanoids &&
                Target.HealthPercent < 40 &&
                !Target.HaveBuff("Frost Shock") &&
                cast.OnTarget(FrostShock))
            {
                return;
            }

            // Earth Shock Interupt Rank 1
            if (_shouldBeInterrupted &&
                (settings.ENInterruptWithRankOne || Me.ManaPercentage <= _lowManaThreshold))
            {
                _fightingACaster = true;
                if (!_casterEnemies.Contains(Target.Name))
                {
                    _casterEnemies.Add(Target.Name);
                }
                Thread.Sleep(Main.humanReflexTime);
                if (cast.OnTarget(EarthShockRank1))
                {
                    return;
                }
            }

            // Earth Shock Interupt
            if (_shouldBeInterrupted &&
                !settings.ENInterruptWithRankOne)
            {
                if (!_casterEnemies.Contains(Target.Name))
                {
                    _casterEnemies.Add(Target.Name);
                }
                _fightingACaster = true;
                Thread.Sleep(Main.humanReflexTime);
                if (cast.OnTarget(EarthShock))
                {
                    return;
                }
            }

            // Totems
            if (Me.ManaPercentage > 20 &&
                Target.GetDistance < 20 &&
                _totemManager.CastTotems(specialization))
            {
                return;
            }

            // Flame Shock DPS
            if (Me.ManaPercentage > _lowManaThreshold &&
                Target.GetDistance < 19f &&
                !Target.HaveBuff("Flame Shock") &&
                Target.HealthPercent > 20 &&
                settings.UseFlameShock &&
                cast.OnTarget(FlameShock))
            {
                return;
            }

            // Stormstrike
            if (Me.ManaPercentage > _lowManaThreshold &&
                cast.OnTarget(Stormstrike))
            {
                return;
            }

            // Earth Shock DPS
            if (Me.ManaPercentage > _lowManaThreshold &&
                Target.GetDistance < 19f &&
                !FlameShock.KnownSpell &&
                Target.HealthPercent > 25 &&
                Me.ManaPercentage > 30 &&
                cast.OnTarget(EarthShock))
            {
                return;
            }

            // Low level lightning bolt
            if (!EarthShock.KnownSpell &&
                Me.ManaPercentage > _lowManaThreshold &&
                Target.HealthPercent > 40 &&
                cast.OnTarget(LightningBolt))
            {
                return;
            }
        }
        protected override void CombatRotation()
        {
            base.CombatRotation();

            WoWUnit Target               = ObjectManager.Target;
            bool    _isPoisoned          = ToolBox.HasPoisonDebuff();
            bool    _hasDisease          = ToolBox.HasDiseaseDebuff();
            bool    _shouldBeInterrupted = false;

            // Remove Ghost Wolf
            if (Me.HaveBuff("Ghost Wolf") &&
                cast.OnSelf(GhostWolf))
            {
                return;
            }

            // Healing Wave + Lesser Healing Wave
            if (Me.HealthPercent < settings.HealThreshold &&
                (Target.HealthPercent > 15 || Me.HealthPercent < 25))
            {
                if (cast.OnSelf(LesserHealingWave) || cast.OnSelf(HealingWave))
                {
                    return;
                }
            }

            // Cure Poison
            if (settings.CurePoison &&
                _isPoisoned &&
                CurePoison.KnownSpell &&
                Me.ManaPercentage > _lowManaThreshold)
            {
                Thread.Sleep(Main.humanReflexTime);
                if (cast.OnSelf(CurePoison))
                {
                    return;
                }
            }

            // Cure Disease
            if (settings.CureDisease &&
                _hasDisease &&
                CureDisease.KnownSpell &&
                Me.ManaPercentage > _lowManaThreshold)
            {
                Thread.Sleep(Main.humanReflexTime);
                if (cast.OnSelf(CureDisease))
                {
                    return;
                }
            }

            // Bloodlust
            if (!Me.HaveBuff("Bloodlust") &&
                Target.HealthPercent > 80 &&
                cast.OnSelf(Bloodlust))
            {
                return;
            }

            // Water Shield
            if (!Me.HaveBuff("Water Shield") &&
                !Me.HaveBuff("Lightning Shield") &&
                (settings.UseWaterShield || !settings.UseLightningShield || Me.ManaPercentage <= _lowManaThreshold) &&
                cast.OnSelf(WaterShield))
            {
                return;
            }

            // Lightning Shield
            if (Me.ManaPercentage > _lowManaThreshold &&
                !Me.HaveBuff("Lightning Shield") &&
                !Me.HaveBuff("Water Shield") &&
                settings.UseLightningShield &&
                (!WaterShield.KnownSpell || !settings.UseWaterShield) &&
                cast.OnTarget(LightningShield))
            {
                return;
            }

            // Check if we need to interrupt
            int channelTimeLeft = Lua.LuaDoString <int>(@"local spell, _, _, _, endTimeMS = UnitChannelInfo('target')
                                    if spell then
                                     local finish = endTimeMS / 1000 - GetTime()
                                     return finish
                                    end");

            if (channelTimeLeft < 0 || Target.CastingTimeLeft > ToolBox.GetLatency())
            {
                _shouldBeInterrupted = true;
            }

            // Earth Shock Interupt
            if (_shouldBeInterrupted)
            {
                if (!_casterEnemies.Contains(Target.Name))
                {
                    _casterEnemies.Add(Target.Name);
                }
                _fightingACaster = true;
                Thread.Sleep(Main.humanReflexTime);
                if (cast.OnTarget(EarthShock))
                {
                    return;
                }
            }

            // Frost Shock
            if ((Target.CreatureTypeTarget == "Humanoid" || Target.Name.Contains("Plainstrider")) &&
                settings.ENFrostShockHumanoids &&
                Target.HealthPercent < 40 &&
                !Target.HaveBuff("Frost Shock") &&
                !Me.HaveBuff("Focused Casting") &&
                cast.OnTarget(FrostShock))
            {
                return;
            }

            // Totems
            if (Me.ManaPercentage > _lowManaThreshold &&
                Target.GetDistance < 20 &&
                _totemManager.CastTotems(specialization))
            {
                return;
            }

            // Chain Lightning
            if (settings.ELChainLightningOnMulti &&
                ObjectManager.GetNumberAttackPlayer() > 1 &&
                Me.ManaPercentage > 20 &&
                cast.OnTarget(ChainLightning))
            {
                return;
            }

            // Earth Shock DPS
            if (Target.GetDistance < 19f &&
                (!FlameShock.KnownSpell || !settings.UseFlameShock) &&
                !_fightingACaster &&
                Target.HealthPercent > 25 &&
                Me.ManaPercentage > settings.ELShockDPSMana &&
                !Me.HaveBuff("Focused Casting") &&
                cast.OnTarget(EarthShock))
            {
                return;
            }

            // Flame Shock DPS
            if (Target.GetDistance < 19f &&
                !Target.HaveBuff("Flame Shock") &&
                Target.HealthPercent > 20 &&
                !_fightingACaster &&
                settings.UseFlameShock &&
                Me.ManaPercentage > settings.ELShockDPSMana &&
                !Me.HaveBuff("Focused Casting") &&
                cast.OnTarget(FlameShock))
            {
                return;
            }

            // Lightning Bolt
            if (ObjectManager.Target.GetDistance <= _pullRange &&
                (Target.HealthPercent > settings.ELLBHealthThreshold || Me.HaveBuff("Clearcasting") || Me.HaveBuff("Focused Casting")) &&
                Me.ManaPercentage > 15 &&
                cast.OnTarget(LightningBolt))
            {
                return;
            }

            // Default melee
            if (!RangeManager.CurrentRangeIsMelee())
            {
                Logger.Log("Going in melee because nothing else to do");
                RangeManager.SetRangeToMelee();
            }
        }
Exemplo n.º 30
0
 private void FightStartHandler(WoWUnit unit, CancelEventArgs cancelable)
 {
     RangeManager.SetRange(_pullRange);
 }