示例#1
0
        public Unit GetTarget()
        {
            var target = TargetSelector.ClosestToMouse(Owner, 500);

            if (target != null && (Owner.IsValidOrbwalkingTarget(target) || UnitExtensions.HasModifier(Owner, "modifier_item_hurricane_pike_range")))
            {
                return(target);
            }
            return(null);
        }
 public bool HexSync()
 {
     if (Target != null && Target.IsValid && UnitExtensions.HasModifier(Target, "modifier_shadow_shaman_voodoo") &&
         (Target.FindModifier("modifier_shadow_shaman_voodoo").RemainingTime * 1000) - 100 <= 600 ||
         !Ensage.SDK.Extensions.UnitExtensions.IsHexed(Target))
     {
         return(true);
     }
     return(false);
 }
示例#3
0
        public virtual async Task KillStealAsync()
        {
            float RemnantAutoDamage = this.Remnant.GetAbilityData("static_remnant_damage") + this.Overload.GetDamage(Overload.Level - 1);

            RemnantAutoDamage += (Owner.MinimumDamage + Owner.BonusDamage);
            RemnantAutoDamage *= GetSpellAmp();

            float AutoDamage = this.Overload.GetDamage(Overload.Level - 1);

            AutoDamage += (Owner.MinimumDamage + Owner.BonusDamage);
            AutoDamage *= GetSpellAmp();

            var RemnantAutokillableTar =
                ObjectManager.GetEntitiesFast <Hero>()
                .FirstOrDefault(
                    x =>
                    x.IsAlive && x.Team != this.Owner.Team && !x.IsIllusion &&
                    this.Remnant.CanBeCasted() && this.Remnant.CanHit(x) &&
                    x.Health < (RemnantAutoDamage * (1 - x.MagicDamageResist)) &&
                    !UnitExtensions.IsMagicImmune(x) &&
                    x.Distance2D(this.Owner) <= 235);

            var AutokillableTar =
                ObjectManager.GetEntitiesFast <Hero>()
                .FirstOrDefault(
                    x =>
                    x.IsAlive && x.Team != this.Owner.Team && !x.IsIllusion &&
                    x.Health < AutoDamage * (1 - x.MagicDamageResist) &&
                    !UnitExtensions.IsMagicImmune(x) &&
                    x.Distance2D(this.Owner) <= 480);



            if (UnitExtensions.HasModifier(Owner, "modifier_storm_spirit_overload") && AutokillableTar != null)
            {
                Owner.Attack(AutokillableTar);
                await Await.Delay(500);
            }
            if (!UnitExtensions.IsSilenced(Owner))
            {
                if (RemnantAutokillableTar != null && AutokillableTar == null || AutokillableTar != null && !UnitExtensions.HasModifier(Owner, "modifier_storm_spirit_overload"))
                {
                    Remnant.UseAbility();
                    await Await.Delay((int)Game.Ping + 50);

                    Owner.Attack(RemnantAutokillableTar);
                    await Await.Delay(500);
                }
            }
        }
示例#4
0
 public Hero GetTarget(bool otherChecks = true)
 {
     if (_globalTarget != null && _globalTarget.IsAlive)
     {
         if (otherChecks)
         {
             if (!Owner.IsValidOrbwalkingTarget(_globalTarget) &&
                 !UnitExtensions.HasModifier(Owner, "modifier_item_hurricane_pike_range"))
             {
                 return(null);
             }
         }
         return(_globalTarget);
     }
     _globalTarget = TargetSelector.ClosestToMouse(Owner);
     if (_globalTarget != null &&
         (!otherChecks || Owner.IsValidOrbwalkingTarget(_globalTarget) ||
          UnitExtensions.HasModifier(Owner, "modifier_item_hurricane_pike_range")))
     {
         return(_globalTarget);
     }
     return(null);
 }
示例#5
0
        private void OnOnIngameUpdate(EventArgs args)
        {
            Mode = OrbwalkingMode.Idle;
            if (Game.IsPaused || Game.IsChatOpen)
            {
                return;
            }
            if (Members.Menu.Item("Combo.key").GetValue <KeyBind>().Active)
            {
                Mode = OrbwalkingMode.Combo;
            }
            else if (Mode == OrbwalkingMode.Idle)
            {
                _globalTarget = null;
                EffectManager.Remove("attackTarget" + Owner.Handle);
                return;
            }
            if (TurnEndTime > Game.RawGameTime)
            {
                return;
            }
            var target = GetTarget();

            if (!UnitExtensions.HasModifier(Owner, "modifier_templar_assassin_meld"))
            {
                var tempTarget = GetTarget(false);
                if (tempTarget != null)
                {
                    var blink   = Owner.GetItemById(AbilityId.item_blink);
                    var tempPos = new Vector3();
                    if (blink != null && blink.CanBeCasted() && blink.CanHit(tempTarget, ref tempPos) &&
                        !_sleeper.Sleeping(blink))
                    {
                        blink.UseAbility(tempPos);
                        _sleeper.Sleep(300, blink);
                    }
                    if (!UnitExtensions.HasModifier(tempTarget, "modifier_templar_assassin_trap_slow"))
                    {
                        var trap = UnitExtensions.GetAbilityById(ObjectManager.LocalHero,
                                                                 AbilityId.templar_assassin_psionic_trap);
                        var trapNearTarget =
                            EntityManager <Unit> .Entities.FirstOrDefault(
                                x =>
                                x.IsValid && x.Name == "npc_dota_templar_assassin_psionic_trap" &&
                                Ensage.SDK.Extensions.EntityExtensions.Distance2D(tempTarget, x.Position) <= 400);

                        if (trapNearTarget != null)
                        {
                            if (!_sleeper.Sleeping(trap + "activate"))
                            {
                                var activator = trapNearTarget.Spellbook.Spell1;
                                if (activator.CanBeCasted())
                                {
                                    activator.UseAbility();
                                }
                                _sleeper.Sleep(300, trap + "activate");
                            }
                        }
                        else if (trap.CanBeCasted())
                        {
                            if (!_sleeper.Sleeping(trap + "place"))
                            {
                                trap.UseAbility(tempTarget.Position);
                                _sleeper.Sleep(300, trap + "place");
                            }
                        }
                    }
                }
            }
            if ((target == null || !CanAttack(target)) && CanMove())
            {
                if (Move(Game.MousePosition))
                {
                    return;
                }
            }

            if (target != null && CanAttack(target))
            {
                LastTarget = target;
                var refraction = UnitExtensions.GetAbilityById(ObjectManager.LocalHero, AbilityId.templar_assassin_refraction);
                if (refraction.CanBeCasted() && !_sleeper.Sleeping(refraction))
                {
                    refraction.UseAbility();
                    _sleeper.Sleep(300, refraction);
                }
                var meld = UnitExtensions.GetAbilityById(ObjectManager.LocalHero, AbilityId.templar_assassin_meld);
                if (meld.CanBeCasted() && !_sleeper.Sleeping(meld))
                {
                    meld.UseAbility();
                    _sleeper.Sleep(300, meld);
                }
                Attack(target);
            }
            if (LastTarget != null && LastTarget.IsValid && LastTarget.IsAlive)
            {
                EffectManager.DrawRange(LastTarget, "attackTarget" + Owner.Handle, 60, Color.Red);
            }
            else
            {
                EffectManager.Remove("attackTarget" + Owner.Handle);
            }
        }
示例#6
0
        public override void Execute()
        {
            if (Core.TempestHero != null && Core.TempestHero.Hero.IsAlive)
            {
                if (UnitExtensions.HasModifier(Core.TempestHero.Hero, "modifier_teleporting"))
                {
                    return;
                }
                if (UnitExtensions.IsChanneling(Core.TempestHero.Hero))
                {
                    return;
                }
                if (_sleeper.Sleeping)
                {
                    return;
                }
                _sleeper.Sleep(150);
                var currentLane = GetLane(Core.TempestHero.Hero);
                CurrentLane = currentLane;
                var target = Core.TempestHero.Orbwalker.GetTarget();
                if (target == null || target.Position.IsZero || !target.IsAlive)
                {
                    var path      = FindOrGetNeededPath(Core.TempestHero.Hero);
                    var lastPoint = path[path.Count - 1];
                    var closest   = path.Where(
                        x =>
                        x.Distance2D(lastPoint) < Core.TempestHero.Hero.Position.Distance2D(lastPoint) - 300)
                                    .OrderBy(pos => CheckForDist(pos, Core.TempestHero.Hero))
                                    .FirstOrDefault();
                    Core.TempestHero.Hero.Move(closest);
                    Status = "Moving";
                    if (MenuManager.UseTravels)
                    {
                        var travels = Core.TempestHero.Hero.GetItemById(AbilityId.item_travel_boots) ??
                                      Core.TempestHero.Hero.GetItemById(AbilityId.item_travel_boots_2);
                        if (travels != null && travels.CanBeCasted())
                        {
                            Status = "Moving [?TP]";
                            var temp = path.ToList();
                            temp.Reverse();
                            if (MenuManager.CheckForCreeps)
                            {
                                var enemyCreeps =
                                    EntityManager <Creep> .Entities.Where(
                                        x =>
                                        x.IsValid && x.IsVisible && x.IsAlive &&
                                        x.Team != ObjectManager.LocalHero.Team &&
                                        Map.GetLane(x) == currentLane);

                                Creep creepForTravels = null;

                                var allyCreeps =
                                    EntityManager <Creep> .Entities.Where(
                                        allyCreep => allyCreep.IsValid && allyCreep.IsAlive &&
                                        allyCreep.Team == ObjectManager.LocalHero.Team &&
                                        Map.GetLane(allyCreep) == currentLane &&
                                        allyCreep.HealthPercent() > 0.75).ToList();

                                foreach (var point in temp)
                                {
                                    creepForTravels = allyCreeps.FirstOrDefault(
                                        allyCreep =>
                                        point.IsInRange(allyCreep.Position, 1500) &&
                                        enemyCreeps.Any(z => z.IsInRange(allyCreep, 1500)));
                                    if (creepForTravels != null)
                                    {
                                        break;
                                    }
                                }

                                if (creepForTravels != null && creepForTravels.Distance2D(Core.TempestHero.Hero) > 1500)
                                {
                                    var point     = path[path.Count - 1];
                                    var distance1 = point.Distance2D(creepForTravels);
                                    var distance2 = point.Distance2D(Core.TempestHero.Hero);

                                    if (distance1 < distance2 || Map.GetLane(Core.TempestHero.Hero) != currentLane)
                                    {
                                        travels.UseAbility(creepForTravels);
                                        Status = "Doing Tp";
                                        _sleeper.Sleep(1000);
                                        return;
                                    }
                                }
                            }
                            else
                            {
                                var finalPos = temp.First();
                                var ally     =
                                    EntityManager <Creep> .Entities.Where(
                                        allyCreep => allyCreep.IsValid && allyCreep.IsAlive &&
                                        allyCreep.Team == ObjectManager.LocalHero.Team &&
                                        Map.GetLane(allyCreep) == currentLane &&
                                        allyCreep.HealthPercent() > 0.75)
                                    .OrderBy(y => EntityExtensions.Distance2D(y, finalPos))
                                    .FirstOrDefault();

                                var allyTwr =
                                    EntityManager <Tower> .Entities.Where(
                                        allyCreep => allyCreep.IsValid && allyCreep.IsAlive &&
                                        allyCreep.Team == ObjectManager.LocalHero.Team &&
                                        Map.GetLane(allyCreep) == currentLane &&
                                        allyCreep.HealthPercent() > 0.1)
                                    .OrderBy(y => EntityExtensions.Distance2D(y, finalPos))
                                    .FirstOrDefault();

                                Unit tpTarget = null;
                                if (ally != null && allyTwr != null)
                                {
                                    var dist1 = finalPos.Distance2D(ally);
                                    var dist2 = finalPos.Distance2D(allyTwr);

                                    if (dist1 > dist2)
                                    {
                                        tpTarget = allyTwr;
                                    }
                                    else
                                    {
                                        tpTarget = ally;
                                    }
                                }

                                if (tpTarget != null && tpTarget.Distance2D(Core.TempestHero.Hero) > 1500)
                                {
                                    var point     = path[path.Count - 1];
                                    var distance1 = point.Distance2D(tpTarget);
                                    var distance2 = point.Distance2D(Core.TempestHero.Hero);

                                    if (distance1 < distance2 || Map.GetLane(Core.TempestHero.Hero) != currentLane)
                                    {
                                        travels.UseAbility(tpTarget.Position);
                                        _sleeper.Sleep(1000);
                                        Status = "Doing Tp";
                                        return;
                                    }
                                }
                            }
                        }
                    }

                    try
                    {
                        foreach (var illusion in IllusionManager.GetIllusions)
                        {
                            illusion.Hero.Move(closest);
                        }
                        foreach (var necro in NecronomiconManager.GetNecronomicons)
                        {
                            necro.Necr.Move(closest);
                        }
                    }
                    catch (Exception e)
                    {
                        Printer.Both("kek " + e.Message);
                    }
                }
                else
                {
                    Status = $"Pushing{(target is Tower ? " Tower" : "")}";
                    if (Core.TempestHero.Spark.CanBeCasted())
                    {
                        Printer.Log(
                            $"[AutoPushing][Spark][{target.Name} ({target.NetworkName})]->{target.Position.PrintVector()}",
                            true);
                        if (!target.Position.IsZero)
                        {
                            Core.TempestHero.Spark.UseAbility(target.Position);
                            Status = "Casting spark";
                            _sleeper.Sleep(500);
                            return;
                        }
                    }

                    var itemForPushing = Core.TempestHero.Hero.GetItemById(ItemId.item_mjollnir);
                    if (itemForPushing != null && itemForPushing.CanBeCasted())
                    {
                        var allyCreep =
                            EntityManager <Creep> .Entities
                            .FirstOrDefault(
                                x =>
                                x.IsAlive && x.Team == ObjectManager.LocalHero.Team &&
                                x.IsInRange(Core.TempestHero.Hero, 500) && x.HealthPercent() <= 0.92 &&
                                x.IsMelee);

                        if (allyCreep != null)
                        {
                            itemForPushing.UseAbility(allyCreep);
                            _sleeper.Sleep(500);
                        }
                    }

                    itemForPushing = Core.TempestHero.Hero.GetItemById(ItemId.item_manta);

                    if (itemForPushing != null && itemForPushing.CanBeCasted())
                    {
                        itemForPushing.UseAbility();
                        _sleeper.Sleep(500);
                    }

                    itemForPushing = Core.TempestHero.Hero.GetItemById(ItemId.item_necronomicon) ??
                                     Core.TempestHero.Hero.GetItemById(ItemId.item_necronomicon_2) ??
                                     Core.TempestHero.Hero.GetItemById(ItemId.item_necronomicon_3);
                    if (itemForPushing != null && itemForPushing.CanBeCasted())
                    {
                        itemForPushing.UseAbility();
                        _sleeper.Sleep(500);
                    }

                    if (Core.TempestHero.Orbwalker.GetTarget() is Tower)
                    {
                        var field = Core.TempestHero.MagneticField;
                        if (field.CanBeCasted())
                        {
                            var pos =
                                (Core.TempestHero.Orbwalker.GetTarget().NetworkPosition -
                                 Core.TempestHero.Hero.NetworkPosition).Normalized();
                            pos *= 280 + 150;
                            pos  = Core.TempestHero.Orbwalker.GetTarget().NetworkPosition - pos;
                            field.UseAbility(pos);
                            _sleeper.Sleep(1000);
                        }
                    }
                }

                if (MenuManager.AutoPushingTargetting)
                {
                    var enemyHero =
                        Heroes.GetByTeam(ObjectManager.LocalHero.GetEnemyTeam())
                        .FirstOrDefault(
                            x => x.IsVisible && x.IsAlive && x.IsInRange(Core.TempestHero.Hero,
                                                                         MenuManager
                                                                         .AutoPushingTargettingRange) /*Core.TempestHero.Hero.IsValidOrbwalkingTarget(x)*/);
                    if (enemyHero != null)
                    {
                        //OrderManager.ChangeOrder(OrderManager.Orders.SparkSpamTempest);
                        Core.Target = enemyHero;
                        MenuManager.TempestCombo.SetValue(new KeyBind(MenuManager.TempestCombo.GetValue <KeyBind>().Key,
                                                                      KeyBindType.Toggle, true));
                        Core.Target = enemyHero;
                        ParticleManager?.Remove("targetting_range");
                    }
                    else
                    {
                        if (MenuManager.DrawTargettingRange)
                        {
                            ParticleManager.DrawRange(Core.TempestHero.Hero, "targetting_range",
                                                      MenuManager.AutoPushingTargettingRange, Color.White);
                        }
                    }
                }
            }
            else
            {
                Status = "Tempest is dead";
                var illusions = IllusionManager.GetIllusions.Where(x => x.Orbwalker.GetTarget() == null).ToList();
                var necros    = NecronomiconManager.GetNecronomicons.Where(x => x.Orbwalker.GetTarget() == null).ToList();
                var any       = illusions.Any() || necros.Any();
                if (any)
                {
                    foreach (var illusion in illusions)
                    {
                        var path      = FindOrGetNeededPath(illusion.Hero);
                        var lastPoint = path[path.Count - 1];
                        var closest   = path.Where(
                            x =>
                            x.Distance2D(lastPoint) <
                            Core.TempestHero.Hero.Position.Distance2D(lastPoint) - 300)
                                        .OrderBy(pos => CheckForDist(pos, Core.TempestHero.Hero))
                                        .FirstOrDefault();
                        illusion.Hero.Move(closest);
                    }

                    foreach (var necro in necros)
                    {
                        var path      = FindOrGetNeededPath(necro.Necr);
                        var lastPoint = path[path.Count - 1];
                        var closest   = path.Where(
                            x =>
                            x.Distance2D(lastPoint) <
                            Core.TempestHero.Hero.Position.Distance2D(lastPoint) - 300)
                                        .OrderBy(pos => CheckForDist(pos, Core.TempestHero.Hero))
                                        .FirstOrDefault();
                        necro.Necr.Move(closest);
                    }

                    _sleeper.Sleep(500);
                }
            }
        }
示例#7
0
        } // GetDamageTaken::END

        public double CalculateMana(Hero victim)
        {
            double manacost = 0;

            try
            {
                var distance = me.Distance2D(victim);

                var startManaCost = R.GetAbilityData("ball_lightning_initial_mana_base") +
                                    me.MaximumMana / 100 * R.GetAbilityData("ball_lightning_initial_mana_percentage");
                var costPerUnit = (12 + me.MaximumMana * 0.007) / 100.0;

                var rManacost = startManaCost + costPerUnit * Math.Floor(distance / 100) * 100;

                var qReady = Q != null && Config.AbilityToggler.Value.IsEnabled(Q?.Name) &&
                             Q.Cooldown <= 0;
                var wReady = W != null && Config.AbilityToggler.Value.IsEnabled(W?.Name) &&
                             W.Cooldown <= 0;
                var rReady = R != null && Config.AbilityToggler.Value.IsEnabled(R?.Name) &&
                             R.Cooldown <= 0;
                if (arcane != null && arcane.Item.Cooldown <= 0 &&
                    Config.ItemToggler.Value.IsEnabled(arcane.Item.Name))
                {
                    manacost -= 125;
                }
                if (soul != null && soul.Item.Cooldown <= 0 &&
                    Config.ItemToggler.Value.IsEnabled(soul.Item.Name))
                {
                    manacost -= 150;
                }
                if (rReady)
                {
                    manacost += rManacost;
                }
                if (qReady)
                {
                    manacost += Q.ManaCost;
                }
                if (vail != null && vail.Item.Cooldown <= 0 &&
                    Config.ItemToggler.Value.IsEnabled(vail.Item.Name) &&
                    !ExUnit.HasModifier(victim, "modifier_item_veil_of_discord_debuff"))
                {
                    manacost += vail.Item.ManaCost;
                }
                if (wReady)
                {
                    manacost += W.ManaCost;
                }
                if (orchid != null &&
                    orchid.Item.IsValid && orchid.Item.Cooldown <= 0 && Config.ItemToggler.Value.IsEnabled("item_bloodthorn"))
                {
                    manacost += orchid.Item.ManaCost;
                }
                if (bloodthorn != null &&
                    bloodthorn.Item.IsValid && bloodthorn.Item.Cooldown <= 0 && Config.ItemToggler.Value.IsEnabled("item_bloodthorn"))
                {
                    manacost += bloodthorn.Item.ManaCost;
                }
                if (lotus != null &&
                    lotus.Item.IsValid && lotus.Item.Cooldown <= 0 && Config.ItemToggler.Value.IsEnabled(lotus.Item.Name))
                {
                    manacost += lotus.Item.ManaCost;
                }
                if (sheep != null &&
                    sheep.Item.IsValid && sheep.Item.Cooldown <= 0 && Config.ItemToggler.Value.IsEnabled(sheep.Item.Name))
                {
                    manacost += sheep.Item.ManaCost;
                }

                var dagon = me.GetDagon();
                if (dagon != null &&
                    dagon.IsValid && dagon.Cooldown <= 0 && Config.ItemToggler.Value.IsEnabled("item_dagon_5"))
                {
                    manacost += dagon.ManaCost;
                }
                if (shiva != null &&
                    shiva.Item.IsValid && shiva.Item.Cooldown <= 0 && Config.ItemToggler.Value.IsEnabled(shiva.Item.Name))
                {
                    manacost += shiva.Item.ManaCost;
                }
                if (ethereal != null &&
                    ethereal.Item.IsValid && ethereal.Item.Cooldown <= 0)
                {
                    manacost += ethereal.Item.ManaCost;
                }
            }
            catch (Exception)
            {
            }

            return(manacost);
        } // GetDamageTaken::END
示例#8
0
        public double CalculateDamage(Hero victim)
        {
            double dmgResult = 0;

            bool   vailOn        = false;
            bool   orchidOn      = false;
            double manacost      = 0;
            var    rLevel        = R.Level;
            var    distance      = me.Distance2D(victim);
            var    dagon         = me.Inventory.Items.FirstOrDefault(item => item.Name.Contains("item_dagon"));
            var    travelSpeed   = R.GetAbilityData("ball_lightning_move_speed", rLevel);
            var    travelTime    = distance / travelSpeed;
            var    startManaCost = R.GetAbilityData("ball_lightning_initial_mana_base") +
                                   me.MaximumMana / 100 * R.GetAbilityData("ball_lightning_initial_mana_percentage");
            //Console.WriteLine("startManaCost " + startManaCost);

            var costPerUnit = (12 + me.MaximumMana * 0.007) / 100.0;

            var rManacost = startManaCost + costPerUnit * Math.Floor(distance / 100) * 100;

            var e = TargetSelector.Active.GetTargets()
                    .FirstOrDefault(x => !x.IsInvulnerable() && x.IsAlive);
            var damageR = R.GetAbilityData("#AbilityDamage", rLevel);    // / 100f;

            rDmg = (distance - 1) * (float)0.01 * damageR;
            Q    = me.Spellbook.SpellQ;
            W    = me.Spellbook.SpellW;
            E    = me.Spellbook.SpellE;
            R    = me.Spellbook.SpellR;
            qDmg = Q.GetAbilityData("static_remnant_damage");

            wDmg     = (me.AttacksPerSecond * W.GetAbilityData("duration") - 1) * me.GetAttackDamage(victim);
            sheepDmg = (me.AttacksPerSecond * (float)3.5 - 1) * me.GetAttackDamage(victim);
            eDmg     = E.GetAbilityData("#AbilityDamage", E.Level);

            var qReady = Q != null && Config.AbilityToggler.Value.IsEnabled(Q.Name) &&
                         Q.CanBeCasted();
            var wReady = W != null && Config.AbilityToggler.Value.IsEnabled(W.Name) &&
                         W.CanBeCasted();
            var rReady = R != null && Config.AbilityToggler.Value.IsEnabled(R.Name) &&
                         R.CanBeCasted();
            var eReady = E != null && Config.AbilityToggler.Value.IsEnabled(E.Name) &&
                         E.Level > 0;

            if (arcane != null &&
                arcane.Item.IsValid && arcane.Item.CanBeCasted() &&
                Config.ItemToggler.Value.IsEnabled(arcane.Item.Name))
            {
                manacost -= 125;
            }
            if (soul != null &&
                soul.Item.IsValid && soul.Item.CanBeCasted() &&
                Config.ItemToggler.Value.IsEnabled(soul.Item.Name))
            {
                manacost -= 150;
            }
            if (rReady)
            {
                if (manacost + rManacost < me.Mana)
                {
                    manacost  += rManacost;
                    dmgResult += rDmg * (1 - victim.MagicDamageResist);
                    if (eReady)
                    {
                        dmgResult += eDmg * (1 - victim.MagicDamageResist);
                    }
                }
                else
                {
                    goto gotoDamage;
                }
            }
            if (orchid != null &&
                orchid.Item.IsValid && orchid.Item.CanBeCasted() && Config.ItemToggler.Value.IsEnabled("item_bloodthorn") &&
                !ExUnit.HasModifier(victim, "modifier_bloodthorn_debuff") &&
                !ExUnit.HasModifier(victim, "modifier_orchid_malevolence_debuff"))
            {
                if (manacost + orchid.Item.ManaCost < me.Mana)
                {
                    manacost += orchid.Item.ManaCost;
                    orchidOn  = true;
                }
                else
                {
                    goto gotoDamage;
                }
            }
            if (bloodthorn != null &&
                bloodthorn.Item.IsValid && bloodthorn.Item.CanBeCasted() && Config.ItemToggler.Value.IsEnabled("item_bloodthorn") &&
                !ExUnit.HasModifier(victim, "modifier_bloodthorn_debuff") &&
                !ExUnit.HasModifier(victim, "modifier_orchid_malevolence_debuff"))
            {
                if (manacost + bloodthorn.Item.ManaCost < me.Mana)
                {
                    manacost += bloodthorn.Item.ManaCost;
                    orchidOn  = true;
                }
                else
                {
                    goto gotoDamage;
                }
            }
            if (vail != null &&
                vail.Item.IsValid && vail.Item.CanBeCasted() &&
                Config.ItemToggler.Value.IsEnabled(vail.Item.Name) &&
                !ExUnit.HasModifier(victim, "modifier_item_veil_of_discord_debuff"))
            {
                if (manacost + vail.Item.ManaCost < me.Mana)
                {
                    manacost += vail.Item.ManaCost;
                    vailOn    = true;
                }
                else
                {
                    goto gotoDamage;
                }
            }
            if (qReady)
            {
                if (manacost + Q.ManaCost < me.Mana)
                {
                    manacost  += Q.ManaCost;
                    dmgResult += qDmg * (1 - victim.MagicDamageResist);
                    if (eReady)
                    {
                        dmgResult += eDmg * (1 - victim.MagicDamageResist);
                    }
                }
                else
                {
                    goto gotoDamage;
                }
            }

            if (wReady && eReady)
            {
                if (manacost + W.ManaCost < me.Mana)
                {
                    dmgResult += eDmg * (1 - victim.MagicDamageResist);
                }
                else
                {
                    goto gotoDamage;
                }
            }
            var spellamplymult = 1 + me.TotalIntelligence / 16 / 100;

            dmgResult = dmgResult * spellamplymult;
            if (dagon != null && dagon.CanBeCasted() && victim.Handle == e?.Handle && Config.ItemToggler.Value.IsEnabled("item_dagon_5"))
            {
                if (manacost + dagon.ManaCost < me.Mana)
                {
                    manacost  += dagon.ManaCost;
                    dmgResult += dagonDmg[dagon.Level] * (1 - victim.MagicDamageResist);
                }
                else
                {
                    goto gotoDamage;
                }
            }
            if (shiva != null &&
                shiva.Item.IsValid && shiva.Item.CanBeCasted() && Config.ItemToggler.Value.IsEnabled(shiva.Item.Name))
            {
                if (manacost + shiva.Item.ManaCost < me.Mana)
                {
                    manacost  += shiva.Item.ManaCost;
                    dmgResult += 200 * (1 - victim.MagicDamageResist);
                }
                else
                {
                    goto gotoDamage;
                }
            }

            int etherealdamage = (int)((me.TotalIntelligence * 2) + 75);

            if (ethereal != null &&
                ethereal.Item.IsValid && ethereal.Item.CanBeCasted() && victim.Handle == e?.Handle && Config.ItemToggler.Value.IsEnabled(ethereal.Item.Name))
            {
                if (manacost + ethereal.Item.ManaCost < me.Mana)
                {
                    manacost  += ethereal.Item.ManaCost;
                    dmgResult += 1.4 + etherealdamage;
                }
                //else goto gotoDamage;
            }
gotoDamage:

            if (ExUnit.HasModifier(me, "modifier_special_bonus_spell_amplify"))
            {
                dmgResult *= 1.10;
            }
            if (ExUnit.HasModifier(victim, "modifier_item_veil_of_discord_debuff"))
            {
                dmgResult *= 1.25;
            }
            if (vail != null &&
                vail.Item.IsValid && vail.Item.CanBeCasted() &&
                Config.ItemToggler.Value.IsEnabled(vail.Item.Name) &&
                !ExUnit.HasModifier(victim, "modifier_item_veil_of_discord_debuff"))
            {
                if (vailOn)
                {
                    dmgResult *= 1.25;
                }
            }

            if (sheep != null &&
                sheep.Item.IsValid && sheep.Item.CanBeCasted() && Config.ItemToggler.Value.IsEnabled(sheep.Item.Name))
            {
                if (manacost + 100 < me.Mana)
                {
                    dmgResult += sheepDmg;
                }
            }
            if (bloodthorn != null &&
                bloodthorn.Item.IsValid && bloodthorn.Item.CanBeCasted() &&
                Config.ItemToggler.Value.IsEnabled("item_bloodthorn") && orchidOn || ExUnit.HasModifier(victim, "modifier_bloodthorn_debuff"))
            {
                if (qReady && eReady)
                {
                    dmgResult += me.GetAttackDamage(victim) * 1.4;
                }
                if (rReady && eReady)
                {
                    dmgResult += me.GetAttackDamage(victim) * 1.4;
                }
                if (wReady)
                {
                    if (manacost + W.ManaCost < me.Mana)
                    {
                        dmgResult += wDmg * 1.4;
                    }
                }
            }
            else
            {
                if (qReady && eReady)
                {
                    dmgResult += me.GetAttackDamage(victim);
                }
                if (rReady && eReady)
                {
                    dmgResult += me.GetAttackDamage(victim);
                }
                if (wReady)
                {
                    if (manacost + W.ManaCost < me.Mana)
                    {
                        dmgResult += wDmg;
                    }
                }
            }
            if (ExUnit.HasModifier(victim, "modifier_chen_penitence"))
            {
                var chen =
                    ObjectManager.GetEntities <Hero>()
                    .FirstOrDefault(x => x.Team == me.Team && x.ClassId == ClassId.CDOTA_Unit_Hero_Chen);
                if (chen != null)
                {
                    dmgResult *= penitence[chen.Spellbook.Spell1.Level];
                }
            }

            if (ExUnit.HasModifier(victim, "modifier_shadow_demon_soul_catcher"))
            {
                var demon = ObjectManager.GetEntities <Hero>()
                            .FirstOrDefault(x => x.Team == me.Team && x.ClassId == ClassId.CDOTA_Unit_Hero_Shadow_Demon);
                if (demon != null)
                {
                    dmgResult *= souls[demon.Spellbook.Spell2.Level];
                }
            }
            if (orchid != null &&
                orchid.Item.IsValid && orchid.Item.CanBeCasted() && Config.ItemToggler.Value.IsEnabled("item_bloodthorn") &&
                !ExUnit.HasModifier(victim, "modifier_bloodthorn_debuff") &&
                !ExUnit.HasModifier(victim, "modifier_orchid_malevolence_debuff"))
            {
                if (orchidOn)
                {
                    dmgResult *= 1.3;
                }
            }
            if (bloodthorn != null &&
                bloodthorn.Item.IsValid && bloodthorn.Item.CanBeCasted() && Config.ItemToggler.Value.IsEnabled("item_bloodthorn") &&
                !ExUnit.HasModifier(victim, "modifier_bloodthorn_debuff") &&
                !ExUnit.HasModifier(victim, "modifier_orchid_malevolence_debuff"))
            {
                if (orchidOn)
                {
                    dmgResult *= 1.3;
                }
            }
            if (ExUnit.HasModifier(victim, "modifier_item_mask_of_madness_berserk"))
            {
                dmgResult *= 1.3;
            }
            if (ExUnit.HasModifier(victim, "modifier_orchid_malevolence_debuff") || ExUnit.HasModifier(victim, "modifier_bloodthorn_debuff"))
            {
                dmgResult *= 1.3;
            }
            if (ExUnit.HasModifier(victim, "modifier_kunkka_ghost_ship_damage_absorb"))
            {
                dmgResult *= 0.5;
            }

            if (ExUnit.HasModifier(victim, "modifier_bloodseeker_bloodrage") || ExUnit.HasModifier(me, "modifier_bloodseeker_bloodrage"))
            {
                dmgResult *= 1.4;
            }
            if (victim.NetworkName == "CDOTA_Unit_Hero_SkeletonKing" && victim.Spellbook.SpellR.Cooldown <= 0 && victim.Mana > 140)
            {
                dmgResult = 0;
            }

            return(dmgResult);
        } // GetDamageTaken::END
示例#9
0
        public virtual async Task KillStealAsync()
        {
            var damageBlast = Blast.GetAbilityData("blast_damage");

            damageBlast *= GetSpellAmp();

            bool comboMana = Blast.GetManaCost(Blast.Level - 1) + Decrepify.GetManaCost(Decrepify.Level - 1) <
                             Owner.Mana;

            var decrepifyKillable =
                EntityManager <Hero> .Entities.FirstOrDefault(
                    x =>
                    x.IsAlive && x.Team != this.Owner.Team && !x.IsIllusion &&
                    x.Health < damageBlast *(1 - x.MagicDamageResist) &&
                    Blast != null && Blast.IsValid && x.Distance2D(this.Owner) <= 900 &&
                    Decrepify.CanBeCasted(x) && Blast.CanBeCasted() &&
                    !UnitExtensions.IsMagicImmune(x) && comboMana);

            var blastKillable =
                EntityManager <Hero> .Entities.FirstOrDefault(
                    x =>
                    x.IsAlive && x.Team != this.Owner.Team && !x.IsIllusion &&
                    x.Health < damageBlast *(1 - x.MagicDamageResist) &&
                    Blast.CanBeCasted() && !UnitExtensions.IsMagicImmune(x) && Blast.CanHit(x) &&
                    Ensage.SDK.Extensions.EntityExtensions.Distance2D(Owner, x.NetworkPosition) <= 800);

            if (!UnitExtensions.IsChanneling(this.Owner))
            {
                if (decrepifyKillable != null)
                {
                    Decrepify.UseAbility(decrepifyKillable);
                    await Await.Delay(GetAbilityDelay(decrepifyKillable, Decrepify));

                    if (Blast.CanHit(decrepifyKillable))
                    {
                        Blast.UseAbility(decrepifyKillable);
                        await Await.Delay(GetAbilityDelay(decrepifyKillable, Blast));
                    }
                }

                if (blastKillable != null)
                {
                    Blast.UseAbility(blastKillable.NetworkPosition);
                    await Await.Delay(GetAbilityDelay(blastKillable, Blast));
                }
            }
            else if (UnitExtensions.HasModifier(Target, "modifier_pugna_life_drain"))
            {
                if (decrepifyKillable != null)
                {
                    Decrepify.UseAbility(decrepifyKillable);
                    await Await.Delay(GetAbilityDelay(decrepifyKillable, Decrepify));

                    if (Blast.CanHit(decrepifyKillable))
                    {
                        Blast.UseAbility(decrepifyKillable);
                        await Await.Delay(GetAbilityDelay(decrepifyKillable, Blast));
                    }
                }

                if (blastKillable != null)
                {
                    Blast.UseAbility(blastKillable.NetworkPosition);
                    await Await.Delay(GetAbilityDelay(blastKillable, Blast));
                }
            }
        }
示例#10
0
        public override async Task ExecuteAsync(CancellationToken token)
        {
            try
            {
                var sliderValue = this.Config.UseBlinkPrediction.Item.GetValue <Slider>().Value;

                if (Config.TargetItem.Value.SelectedValue.Contains("Lock") && Context.TargetSelector.IsActive &&
                    (!CanExecute || EnemyHero == null || !EnemyHero.IsValid || !EnemyHero.IsAlive))
                {
                    EnemyHero = Context.TargetSelector.Active.GetTargets().FirstOrDefault() as Hero;
                }
                else if (Config.TargetItem.Value.SelectedValue.Contains("Default") && Context.TargetSelector.IsActive)
                {
                    EnemyHero = Context.TargetSelector.Active.GetTargets().FirstOrDefault() as Hero;
                }

                var Silenced = UnitExtensions.IsSilenced(base.Owner);

                if (EnemyHero != null)
                {
                    if (this.BlinkDagger != null &&
                        (this.BlinkDagger.CanBeCasted &&
                         base.Owner.Distance2D(EnemyHero) <= 1200 + sliderValue &&
                         !(base.Owner.Distance2D(EnemyHero) <= 400) &&
                         this.Config.ItemToggler.Value.IsEnabled(this.BlinkDagger.Item.Name)))
                    {
                        var l        = (this.Owner.Distance2D(EnemyHero) - sliderValue) / sliderValue;
                        var posA     = this.Owner.Position;
                        var posB     = EnemyHero.Position;
                        var x        = (posA.X + (l * posB.X)) / (1 + l);
                        var y        = (posA.Y + (l * posB.Y)) / (1 + l);
                        var position = new Vector3((int)x, (int)y, posA.Z);

                        this.BlinkDagger.UseAbility(position);
                        await Await.Delay(BlinkDagger.GetCastDelay(position), token);
                    }

                    if (!Silenced)
                    {
                        if (this.Config.AbilityToggler.Value.IsEnabled(this.Blast.Name) && this.Blast.CanBeCasted() && this.Blast.CanHit(EnemyHero))
                        {
                            this.Blast.UseAbility(EnemyHero);
                            await Await.Delay(this.GetAbilityDelay(base.Owner, Blast), token);
                        }
                    }

                    if (this.Basher != null &&
                        base.Owner.IsAttacking() &&
                        this.Basher.CanBeCasted &&
                        this.Basher.CanHit(EnemyHero) &&
                        this.Config.ItemToggler.Value.IsEnabled(Basher.ToString()))
                    {
                        this.Basher.UseAbility(EnemyHero);
                        await Await.Delay(Basher.GetCastDelay(EnemyHero), token);
                    }

                    if (this.Mjollnir != null &&
                        base.Owner.IsAttacking() &&
                        this.Mjollnir.CanBeCasted &&
                        this.Config.ItemToggler.Value.IsEnabled(Mjollnir.ToString()))
                    {
                        this.Mjollnir.UseAbility(base.Owner);
                        await Await.Delay(Mjollnir.GetCastDelay(Owner), token);
                    }

                    if (!UnitExtensions.IsMagicImmune(EnemyHero) &&
                        !EnemyHero.IsInvulnerable() &&
                        !UnitExtensions.HasModifier(EnemyHero, "modifier_winter_wyvern_winters_curse"))
                    {
                        if (this.BloodThorn != null &&
                            this.BloodThorn.CanBeCasted &&
                            this.BloodThorn.CanHit(EnemyHero) &&
                            this.Config.ItemToggler.Value.IsEnabled(this.BloodThorn.ToString()))
                        {
                            this.BloodThorn.UseAbility(EnemyHero);
                            await Await.Delay(BloodThorn.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Medalion1 != null &&
                            this.Medalion1.CanBeCasted &&
                            this.Medalion1.CanHit(EnemyHero) &&
                            this.Config.ItemToggler.Value.IsEnabled(this.Medalion1.ToString()))
                        {
                            this.Medalion1.UseAbility(EnemyHero);
                            await Await.Delay(Medalion1.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Medallion2 != null &&
                            this.Medallion2.CanBeCasted &&
                            this.Medallion2.CanHit(EnemyHero) &&
                            this.Config.ItemToggler.Value.IsEnabled(this.Medallion2.ToString()))
                        {
                            this.Medallion2.UseAbility(EnemyHero);
                            await Await.Delay(Medallion2.GetCastDelay(EnemyHero), token);
                        }



                        if (this.DiffBlade != null &&
                            this.DiffBlade.CanBeCasted &&
                            this.DiffBlade.CanHit(EnemyHero) &&
                            this.Config.ItemToggler.Value.IsEnabled("item_diffusal_blade_2"))
                        {
                            this.DiffBlade.UseAbility(EnemyHero);
                            await Await.Delay(DiffBlade.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Orchid != null &&
                            this.Orchid.CanBeCasted &&
                            this.Orchid.CanHit(EnemyHero) &&
                            this.Config.ItemToggler.Value.IsEnabled(Orchid.ToString()))
                        {
                            this.Orchid.UseAbility(EnemyHero);
                            await Await.Delay(Orchid.GetCastDelay(EnemyHero), token);
                        }

                        if (this.Heaven != null &&
                            base.Owner.IsAttacking() &&
                            this.Heaven.CanBeCasted &&
                            this.Heaven.CanHit(EnemyHero) &&
                            this.Config.ItemToggler.Value.IsEnabled(Heaven.ToString()))
                        {
                            this.Heaven.UseAbility(EnemyHero);
                            await Await.Delay(Heaven.GetCastDelay(EnemyHero), token);
                        }
                    }

                    if (EnemyHero != null && (EnemyHero.IsInvulnerable() || UnitExtensions.IsAttackImmune(EnemyHero)))
                    {
                        Orbwalker.Move(Game.MousePosition);
                    }
                    else if (EnemyHero != null)
                    {
                        Orbwalker.OrbwalkTo(EnemyHero);
                    }
                }
                else
                {
                    Orbwalker.Move(Game.MousePosition);
                }
            }
            catch (TaskCanceledException)
            {
                // canceled
            }
            catch (Exception e)
            {
                Log.Error(e);
            }
        }
示例#11
0
        public override async Task ExecuteAsync(CancellationToken token)
        {
            var e = TargetSelector.Active.GetTargets()
                    .FirstOrDefault(x => !x.IsInvulnerable() && x.IsAlive);

            if (e == null)
            {
                return;
            }
            var debuff = e.FindModifier("modifier_storm_spirit_electric_vortex_pull") ?? e.FindModifier("modifier_sheepstick_debuff") ?? e.FindModifier("modifier_rod_of_atos_debuff");


            var buff = e.HasModifiers(new[]
            {
                "modifier_storm_spirit_electric_vortex_pull",
                "modifier_sheepstick_debuff",
                "modifier_rod_of_atos_debuff"
            }, false) || ExUnit.IsStunned(e) || ExUnit.IsHexed(e) || ExUnit.IsRooted(e);
            var checkTimeModif = debuff?.RemainingTime <= 0.3;

            var inUltBall = ExUnit.HasModifier(me, "modifier_storm_spirit_ball_lightning") ||
                            R.IsInAbilityPhase;
            var inOverload = ExUnit.HasModifier(me, "modifier_storm_spirit_overload");
            var lotusBuff  = ExUnit.HasModifier(e, "modifier_item_lotus_orb_active");
            var inVortex   = ExUnit.HasModifier(e, "modifier_storm_spirit_electric_vortex_pull");

            var travelSpeed   = R.GetAbilityData("ball_lightning_move_speed", R.Level);
            var distance      = me.Distance2D(e);
            var travelTime    = distance / travelSpeed;
            var startManaCost = R.GetAbilityData("ball_lightning_initial_mana_base") +
                                me.MaximumMana / 100 * R.GetAbilityData("ball_lightning_initial_mana_percentage");
            var costPerUnit = (12 + me.MaximumMana * 0.007) / 100.0;
            var rManacost   = startManaCost + costPerUnit * Math.Floor(distance / 100) * 100;
            var dagon       = me.GetDagon();
            var enemies     = EntityManager <Hero> .Entities.Count(
                x => x.IsValid && x.IsAlive && !x.IsIllusion && x.Team != me.Team && x.Distance2D(me) <= 700) >= Config.Heel.Item.GetValue <Slider>().Value;

            if (!lotusBuff)
            {
                if (
                    // cheese
                    cheese != null &&
                    cheese.Item.IsValid &&
                    cheese.Item.CanBeCasted() &&
                    (me.Health <= me.MaximumHealth * 0.3 ||
                     me.Mana <= me.MaximumMana * 0.2) &&
                    distance <= 700 &&
                    Config.ItemToggler.Value.IsEnabled(cheese.Item.Name)
                    )
                {
                    cheese.UseAbility();
                    await Await.Delay(GetItemDelay(e), token);
                }
                if ( // SoulRing Item
                    soul != null &&
                    soul.Item.IsValid &&
                    soul.Item.CanBeCasted() &&
                    Config.ItemToggler.Value.IsEnabled(soul.Item.Name) &&
                    me.CanCast() &&
                    me.Health >= me.MaximumHealth * 0.4 &&
                    me.Mana <= me.MaximumMana * 0.4
                    )
                {
                    soul.UseAbility();
                    await Await.Delay(GetItemDelay(e), token);
                }
                if ( // Arcane Boots Item
                    arcane != null &&
                    arcane.Item.IsValid &&
                    arcane.Item.CanBeCasted() &&
                    Config.ItemToggler.Value.IsEnabled(arcane.Item.Name) &&
                    me.CanCast() &&
                    me.Mana <= me.MaximumMana * 0.4
                    )
                {
                    arcane.UseAbility();
                    await Await.Delay(GetItemDelay(e), token);
                }

                uint elsecount = 0;
                elsecount += 1;
                if (elsecount == 1 &&
                    R != null &&
                    R.CanBeCasted() &&
                    !me.IsAttacking() &&
                    !R.IsChanneling &&
                    !R.IsInAbilityPhase &&
                    me.Mana >= rManacost &&
                    !inUltBall &&
                    distance >= me.GetAttackRange() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.AbilityToggler.Value.IsEnabled(R.Name)
                    )
                {
                    if (e.NetworkActivity == NetworkActivity.Move)
                    {
                        R.CastSkillShot(e);
                    }
                    else
                    {
                        R.UseAbility(e.Position);
                    }
                    await Await.Delay(GetAbilityDelay(me, R) + (int)Math.Floor(travelTime * 1000), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (vail != null &&
                    vail.Item.IsValid &&
                    vail.Item.CanBeCasted() &&
                    Config.ItemToggler.Value.IsEnabled(vail.Item.Name) &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e)
                    )
                {
                    vail.UseAbility(e.Position);
                    await Await.Delay(GetItemDelay(e), token);
                }
                if (orchid != null &&
                    orchid.Item.IsValid &&
                    orchid.Item.CanBeCasted() &&
                    (Config.silenceToHex.Value || !ExUnit.IsHexed(e)) &&
                    (Config.silenceToVortex.Value || !inVortex)

                    && me.CanCast() &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled("item_bloodthorn")
                    )
                {
                    orchid.UseAbility(e);
                    await Await.Delay(GetItemDelay(e), token);
                }
                if (nullifier != null &&
                    nullifier.Item.IsValid &&
                    nullifier.Item.CanBeCasted() &&
                    me.CanCast() &&
                    !ExUnit.IsHexed(e) &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled(nullifier.Item.Name)
                    )
                {
                    nullifier.UseAbility(e);
                    await Await.Delay(GetItemDelay(e), token);
                }

                if (bloodthorn != null &&
                    bloodthorn.Item.IsValid &&
                    bloodthorn.Item.CanBeCasted() &&
                    (Config.silenceToVortex.Value || !inVortex) &&
                    (Config.silenceToHex.Value || !ExUnit.IsHexed(e)) &&
                    me.CanCast() &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled("item_bloodthorn")
                    )
                {
                    bloodthorn.UseAbility(e);
                    await Await.Delay(GetItemDelay(e), token);
                }
                if (elsecount == 2 &&
                    sheep != null &&
                    sheep.Item.IsValid &&
                    sheep.Item.CanBeCasted() &&
                    me.CanCast() &&
                    (checkTimeModif || !buff) &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e) &&
                    (Config.hexToSilence.Value || !ExUnit.IsSilenced(e)) &&
                    e.ClassId != ClassId.CDOTA_Unit_Hero_Tidehunter &&
                    Config.ItemToggler.Value.IsEnabled(sheep.Item.Name)
                    )
                {
                    sheep.UseAbility(e);
                    await Await.Delay(GetItemDelay(e), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 3 &&
                    Q != null &&
                    Q.CanBeCasted() &&
                    Config.AbilityToggler.Value.IsEnabled(Q.Name) &&
                    !ExUnit.IsMagicImmune(e) &&
                    me.CanCast() &&
                    !R.IsInAbilityPhase &&
                    (W == null || !W.CanBeCasted() || !Config.AbilityToggler.Value.IsEnabled(W.Name) || ExUnit.IsSilenced(e) || ExUnit.IsHexed(e)) &&
                    (!inOverload || inOverload && ExUnit.IsAttackImmune(e)) &&
                    distance <= Q.GetAbilityData("static_remnant_radius") + me.HullRadius
                    )
                {
                    Q.UseAbility();
                    await Await.Delay(GetAbilityDelay(me, Q) + 100, token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 4 &&
                    W != null &&
                    W.CanBeCasted() &&
                    (Config.fastVortex.Value || !R.IsInAbilityPhase && !inOverload) &&
                    (checkTimeModif || !buff) &&
                    (Config.vortexToSilence.Value || !ExUnit.IsSilenced(e)) &&
                    !me.IsAttacking() &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.AbilityToggler.Value.IsEnabled(W.Name)
                    )
                {
                    W.UseAbility(e);
                    await Await.Delay(GetAbilityDelay(me, W) + 50, token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 5 &&
                    ExUnit.CanAttack(me) &&
                    !me.IsAttacking() &&
                    !ExUnit.HasModifier(e, "modifier_item_ethereal_blade_slow") &&
                    inOverload &&
                    !ExUnit.IsAttackImmune(e) &&
                    distance <= me.GetAttackRange() &&
                    !ExUnit.IsAttackImmune(e)
                    )
                {
                    me.Attack(e);
                    await Await.Delay(170, token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 6 &&
                    W != null &&
                    W.CanBeCasted() &&
                    (Config.fastVortex.Value || !inOverload) &&
                    me.AghanimState() &&
                    (checkTimeModif || !buff) &&
                    !me.IsAttacking() &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.AbilityToggler.Value.IsEnabled(W.Name)
                    )
                {
                    W.UseAbility();
                    await Await.Delay(GetAbilityDelay(me, W), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 7 &&
                    atos != null &&
                    atos.Item.IsValid &&
                    atos.Item.CanBeCasted() &&
                    me.CanCast() &&
                    (checkTimeModif || !buff || !ExUnit.IsHexed(e)) &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled(atos.Item.Name)
                    )
                {
                    atos.UseAbility(e);
                    await Await.Delay(GetItemDelay(e) + 100, token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 8 &&
                    ethereal != null &&
                    ethereal.Item.IsValid &&
                    ethereal.Item.CanBeCasted() &&
                    me.CanCast() &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled(ethereal.Item.Name)
                    )
                {
                    if (Config.debuff.Value)
                    {
                        var speed = ethereal.Item.GetAbilityData("projectile_speed");
                        var time  = e.Distance2D(me) / speed;
                        ethereal.UseAbility(e);
                        await Await.Delay((int)(time * 1000.0f + Game.Ping) + 30, token);
                    }
                    else
                    {
                        ethereal.UseAbility(e);
                        await Await.Delay(GetItemDelay(e), token);
                    }
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 9 &&
                    dagon != null &&
                    dagon.IsValid &&
                    dagon.CanBeCasted() &&
                    Config.ItemToggler.Value.IsEnabled("item_dagon_5") &&
                    me.CanCast() &&
                    (ethereal == null ||
                     ExUnit.HasModifier(e, "modifier_item_ethereal_blade_slow") ||
                     ethereal.Item.Cooldown < 17) &&
                    !ExUnit.IsLinkensProtected(e) &&
                    !ExUnit.IsMagicImmune(e)
                    )
                {
                    dagon.UseAbility(e);
                    await Await.Delay(GetItemDelay(e), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 10 &&
                    urn != null &&
                    urn.Item.IsValid && urn.Item.CanBeCasted() && urn.Item.CurrentCharges > 0 &&
                    distance <= urn.Item.GetCastRange() &&
                    Config.ItemToggler.Value.IsEnabled(urn.Item.Name)
                    )
                {
                    urn.UseAbility(e);
                    await Await.Delay(GetItemDelay(e), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 11 &&
                    bkb != null &&
                    bkb.Item.IsValid &&
                    bkb.Item.CanBeCasted() &&
                    enemies &&
                    Config.ItemToggler.Value.IsEnabled(bkb.Item.Name)
                    )
                {
                    bkb.UseAbility();
                    await Await.Delay(GetItemDelay(me), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 12 &&
                    lotus != null &&
                    lotus.Item.IsValid &&
                    lotus.Item.CanBeCasted() &&
                    enemies &&
                    Config.ItemToggler.Value.IsEnabled(lotus.Item.Name)
                    )
                {
                    lotus.UseAbility(me);
                    await Await.Delay(GetItemDelay(me), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 13 &&
                    shiva != null &&
                    shiva.Item.IsValid &&
                    shiva.Item.CanBeCasted() &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled(shiva.Item.Name) &&
                    distance <= 600
                    )
                {
                    shiva.UseAbility();
                    await Await.Delay(GetItemDelay(me), token);
                }
                else
                {
                    elsecount += 1;
                }
                if (elsecount == 14 &&
                    mjollnir != null &&
                    mjollnir.Item.IsValid &&
                    mjollnir.Item.CanBeCasted() &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled(mjollnir.Item.Name) &&
                    me.Distance2D(e) <= 600
                    )
                {
                    mjollnir.UseAbility(me);
                    await Await.Delay(GetItemDelay(me), token);
                }
            }
            else
            {
                if (Q != null &&
                    Q.CanBeCasted() &&
                    !inOverload &&
                    (W == null || !W.CanBeCasted() || !Config.AbilityToggler.Value.IsEnabled(W.Name)) &&
                    distance <= Q.GetAbilityData("static_remnant_radius") + me.HullRadius &&
                    Config.AbilityToggler.Value.IsEnabled(Q.Name) &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e)
                    )
                {
                    Q.UseAbility();
                    await Await.Delay(GetAbilityDelay(me, Q) + 200, token);
                }

                if (shiva != null &&
                    shiva.Item.IsValid &&
                    shiva.Item.CanBeCasted() &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.ItemToggler.Value.IsEnabled(shiva.Item.Name) &&
                    distance <= 600
                    )
                {
                    shiva.UseAbility();
                    await Await.Delay(GetItemDelay(me), token);
                }
                if (W != null &&
                    W.CanBeCasted() &&
                    !inOverload &&
                    me.AghanimState() &&
                    (checkTimeModif || !buff) &&
                    !me.IsAttacking() &&
                    me.CanCast() &&
                    !ExUnit.IsMagicImmune(e) &&
                    Config.AbilityToggler.Value.IsEnabled(W.Name)
                    )
                {
                    W.UseAbility();
                    await Await.Delay(GetAbilityDelay(me, W), token);
                }
            }
            Vector3 start = e.NetworkActivity == NetworkActivity.Move ? new Vector3((float)((R.GetCastDelay(me, me, true) + 0.3) * Math.Cos(e.RotationRad) * e.MovementSpeed + e.Position.X),
                                                                                    (float)((R.GetCastDelay(me, me, true) + 0.3) * Math.Sin(e.RotationRad) * e.MovementSpeed + e.NetworkPosition.Y), e.NetworkPosition.Z) : e.NetworkPosition;

            if (R != null &&
                R.CanBeCasted() &&
                !inUltBall &&
                Q.Cooldown <= 3 &&
                !R.IsInAbilityPhase &&
                !R.IsChanneling &&
                !me.IsAttacking() &&
                (W == null || !W.CanBeCasted() || !Config.AbilityToggler.Value.IsEnabled(W.Name)) &&
                !ExUnit.IsChanneling(me) &&
                (Config.AutoOverload.Value &&
                 buff ||
                 !buff) &&
                me.Position.Distance2D(start) <= me.GetAttackRange() &&
                !ExUnit.IsMagicImmune(e) &&
                (Config.savemanamode.Value &&
                 me.AttackBackswing() > 0.3 - me.TurnTime(e.NetworkPosition) &&
                 !cooldown ||
                 !Config.savemanamode.Value) &&
                Config.AbilityToggler.Value.IsEnabled(R.Name)
                )
            {
                float   angle = e.FindAngleBetween(me.Position, true);
                Vector3 pos   = new Vector3((float)(me.Position.X - 15 * Math.Cos(angle)),
                                            (float)(me.Position.Y - 15 * Math.Sin(angle)), me.Position.Z);
                if (!inOverload)
                {
                    R.UseAbility(pos);
                    await Await.Delay(GetAbilityDelay(me, R) + 100, token);
                }
            }
            if (!ExUnit.IsAttackImmune(e) && !ExUnit.IsDisarmed(me) && !ExUnit.HasModifier(e, "modifier_item_ethereal_blade_slow"))
            {
                float   angle = e.FindAngleBetween(me.Position, true);
                Vector3 pos   = new Vector3((float)(me.Position.X + 300 * Math.Cos(angle)),
                                            (float)(me.Position.Y + 300 * Math.Sin(angle)), me.Position.Z);
                if (me.Distance2D(e) <= 250 && e.GetTurnTime(me) * 1000 < 35 && cooldown && !me.IsAttacking())
                {
                    me.Move(pos);
                    await Await.Delay((int)(me.SecondsPerAttack * 100), token);
                }
                if (me.Distance2D(e) <= 250 && !cooldown && !me.IsAttacking() && ExUnit.CanAttack(me))
                {
                    me.Attack(e);
                    await Await.Delay((int)(me.SecondsPerAttack * 100), token);
                }
                if (me.Distance2D(e) >= 250 && !cooldown && ExUnit.CanAttack(me))
                {
                    if (Orbwalker.OrbwalkTo(e))
                    {
                        return;
                    }
                }
            }
            await Await.Delay(10, token);
        }
示例#12
0
        public override async Task ExecuteAsync(CancellationToken token)
        {
            var target = this.TargetSelector.Active.GetTargets()
                         .FirstOrDefault(x => !x.IsInvulnerable() && !UnitExtensions.IsMagicImmune(x) && x.IsAlive);

            var silenced = UnitExtensions.IsSilenced(this.Owner);

            var sliderValue = this.Config.UseBlinkPrediction.Item.GetValue <Slider>().Value;

            if (this.BlinkDagger != null &&
                this.BlinkDagger.Item.IsValid &&
                target != null && Owner.Distance2D(target) <= 1200 + sliderValue &&
                !(Owner.Distance2D(target) <= 400) &&
                this.BlinkDagger.Item.CanBeCasted(target) &&
                this.Config.ItemToggler.Value.IsEnabled(this.BlinkDagger.Item.Name))
            {
                var l        = (this.Owner.Distance2D(target) - sliderValue) / sliderValue;
                var posA     = this.Owner.Position;
                var posB     = target.Position;
                var x        = (posA.X + (l * posB.X)) / (1 + l);
                var y        = (posA.Y + (l * posB.Y)) / (1 + l);
                var position = new Vector3((int)x, (int)y, posA.Z);

                Log.Debug("Using BlinkDagger");
                this.BlinkDagger.UseAbility(position);
                await Await.Delay(this.GetItemDelay(target), token);
            }
            //Are we in an ult phase?
            var inUltimate = UnitExtensions.HasModifier(Owner, "modifier_storm_spirit_ball_lightning") ||
                             Lightning.IsInAbilityPhase;

            //Check if we're silenced, our target is alive, and we have a target.
            var UltDistance = Config.DistanceForUlt.Item.GetValue <Slider>().Value;

            //Check for distance to target and push against slider value
            if (target != null && target.IsAlive &&
                Owner.Distance2D(target) >= 400 && Owner.Distance2D(target) <= UltDistance &&
                Config.AbilityToggler.Value.IsEnabled(Lightning.Name) && !silenced)
            {
                //Based on whether they are moving or not, predict where they will be.
                if (target.IsMoving)
                {
                    var PredictedPosition = Ensage.Common.Extensions.UnitExtensions.InFront(target, 0);
                    //Check the mana consumed from our prediction.
                    double TempManaConsumed = (Lightning.GetAbilityData("ball_lightning_initial_mana_base") +
                                               ((Lightning.GetAbilityData("ball_lightning_initial_mana_percentage") /
                                                 100) * Owner.MaximumMana))
                                              + ((Ensage.SDK.Extensions.EntityExtensions.Distance2D(Owner,
                                                                                                    PredictedPosition) / 100) *
                                                 (((Lightning.GetAbilityData("ball_lightning_travel_cost_percent") /
                                                    100) * Owner.MaximumMana)));
                    if (TempManaConsumed <= Owner.Mana && !inUltimate)
                    {
                        Lightning.UseAbility(PredictedPosition);
                        await Await.Delay(
                            (int)(Lightning.FindCastPoint() + Owner.GetTurnTime(PredictedPosition) * 2250 + Game.Ping),
                            token);
                    }
                }

                else
                {
                    var    PredictedPosition = target.NetworkPosition;
                    double TempManaConsumed  = (Lightning.GetAbilityData("ball_lightning_initial_mana_base") +
                                                ((Lightning.GetAbilityData("ball_lightning_initial_mana_percentage") /
                                                  100) * Owner.MaximumMana))
                                               + ((Ensage.SDK.Extensions.EntityExtensions.Distance2D(Owner,
                                                                                                     PredictedPosition) / 100) *
                                                  (((Lightning.GetAbilityData("ball_lightning_travel_cost_percent") /
                                                     100) * Owner.MaximumMana)));
                    if (TempManaConsumed <= Owner.Mana && !inUltimate)
                    {
                        Lightning.UseAbility(PredictedPosition);
                        await Await.Delay(
                            (int)(Lightning.FindCastPoint() + Owner.GetTurnTime(PredictedPosition) * 2250 + Game.Ping),
                            token);
                    }
                }
            }

            //Vars we need before combo.
            bool  HasAghanims = Owner.HasItem(ItemId.item_ultimate_scepter);
            float VortexCost  = Vortex.GetManaCost(Vortex.Level - 1);
            float RemnantCost = Remnant.GetManaCost(Remnant.Level - 1);
            float CurrentMana = Owner.Mana;
            float TotalMana   = Owner.MaximumMana;

            //This is here to stop us from ulting after our target dies.


            float RemnantAutoDamage = this.Remnant.GetAbilityData("static_remnant_damage");

            if (this.Overload != null)
            {
                RemnantAutoDamage += this.Overload.GetDamage(Overload.Level - 1);
            }

            var RemnantAutokillableTar =
                ObjectManager.GetEntitiesFast <Hero>()
                .FirstOrDefault(
                    x =>
                    x.IsAlive && x.Team != this.Owner.Team && !x.IsIllusion &&
                    this.Remnant.CanBeCasted() && this.Remnant.CanHit(x) &&
                    x.Health < (RemnantAutoDamage * (1 - x.MagicDamageResist)) &&
                    !UnitExtensions.IsMagicImmune(x) &&
                    x.Distance2D(this.Owner) <= 235);

            var ActiveRemnant = Remnants.Any(unit => unit.Distance2D(RemnantAutokillableTar) < 240);


            if (!silenced && target != null)
            {
                //there is a reason behind this; the default delay on storm ult is larger than a minimum distance travelled.
                var TargetPosition = target.NetworkPosition;

                /*TargetPosition *= 100;
                 * TargetPosition = target.NetworkPosition + TargetPosition;*/
                double ManaConsumed = (Lightning.GetAbilityData("ball_lightning_initial_mana_base") + ((Lightning.GetAbilityData("ball_lightning_initial_mana_percentage") / 100) * CurrentMana))
                                      + ((Ensage.SDK.Extensions.EntityExtensions.Distance2D(Owner, TargetPosition) / 100) * (((Lightning.GetAbilityData("ball_lightning_travel_cost_percent") / 100) * CurrentMana)));

                //Always auto attack if we have an overload charge.
                if (UnitExtensions.HasModifier(Owner, "modifier_storm_spirit_overload") && target != null)
                {
                    Owner.Attack(target);
                    await Await.Delay(500);
                }

                //Vortex prioritization logic [do we have q/w enabled, do we have the mana to cast both, do they have lotus, do we have an overload modifier]
                if (!UnitExtensions.HasModifier(Owner, "modifier_storm_spirit_overload") &&
                    Config.AbilityToggler.Value.IsEnabled(Vortex.Name) && Vortex.CanBeCasted() &&
                    Config.AbilityToggler.Value.IsEnabled(Remnant.Name) && Remnant.CanBeCasted() &&
                    (VortexCost + RemnantCost) <= CurrentMana)
                {
                    //Use Vortex
                    if (!HasAghanims)
                    {
                        Vortex.UseAbility(target);
                        await Await.Delay(GetAbilityDelay(Owner, Vortex), token);
                    }

                    //Use Vortex differently for aghanims.
                    else
                    {
                        Vortex.UseAbility();
                        await Await.Delay(GetAbilityDelay(Owner, Vortex), token);
                    }
                }

                //Remnant logic [w is not available, cant ult, close enough for the detonation]
                if (!UnitExtensions.HasModifier(Owner, "modifier_storm_spirit_overload") && target.IsAlive &&
                    Config.AbilityToggler.Value.IsEnabled(Remnant.Name) && Remnant.CanBeCasted() &&
                    !Vortex.CanBeCasted() && (CurrentMana <= RemnantCost + ManaConsumed || Owner.Distance2D(target) <= Remnant.GetAbilityData("static_remnant_radius")))
                {
                    Remnant.UseAbility();
                    await Await.Delay(GetAbilityDelay(Owner, Remnant), token);
                }

                //Ult logic [nothing else is available or we are not in range for a q]
                if (!UnitExtensions.HasModifier(Owner, "modifier_storm_spirit_overload") && target.IsAlive &&
                    Config.AbilityToggler.Value.IsEnabled(Lightning.Name) && Lightning.CanBeCasted() &&
                    (!Remnant.CanBeCasted() || Owner.Distance2D(target) >= Remnant.GetAbilityData("static_remnant_radius")) &&
                    (!Vortex.CanBeCasted(target) || Owner.Distance2D(target) <= UltDistance)
                    //Don't cast ult if theres a remnant that can kill our target.
                    && !inUltimate && (RemnantAutokillableTar == null || ActiveRemnant == false))
                //todo: alternate check for aghanims
                {
                    Lightning.UseAbility(TargetPosition);
                    int delay = (int)((Lightning.FindCastPoint() + Owner.GetTurnTime(TargetPosition)) * 1250.0 + Game.Ping);
                    Log.Debug($"{delay}ms to wait.");
                    await Task.Delay(delay);
                }
            }

            if ((this.Nullifier != null &&
                 (this.Nullifier.Item.IsValid &&
                  target != null &&
                  this.Nullifier.Item.CanBeCasted(target) &&
                  this.Config.ItemToggler.Value.IsEnabled("item_nullifier"))))
            {
                Log.Debug("Using Nullifier");
                this.Nullifier.UseAbility(target);
                await Await.Delay(this.GetItemDelay(target) + (int)Game.Ping, token);
            }

            if ((this.BloodThorn != null &&
                 (this.BloodThorn.Item.IsValid &&
                  target != null &&
                  this.BloodThorn.Item.CanBeCasted(target) &&
                  this.Config.ItemToggler.Value.IsEnabled("item_bloodthorn"))))
            {
                Log.Debug("Using Bloodthorn");
                this.BloodThorn.UseAbility(target);
                await Await.Delay(this.GetItemDelay(target) + (int)Game.Ping, token);
            }

            if ((this.SheepStick != null &&
                 (this.SheepStick.Item.IsValid &&
                  target != null &&
                  this.SheepStick.Item.CanBeCasted(target) &&
                  this.Config.ItemToggler.Value.IsEnabled("item_sheepstick"))))
            {
                Log.Debug("Using Sheepstick");
                this.SheepStick.UseAbility(target);
                await Await.Delay(this.GetItemDelay(target) + (int)Game.Ping, token);
            }

            if ((this.Orchid != null) && this.Orchid.Item.IsValid && target != null &&
                (this.Orchid.Item.CanBeCasted(target) && this.Config.ItemToggler.Value.IsEnabled("item_orchid")))
            {
                Log.Debug("Using Orchid");
                this.Orchid.UseAbility(target);
                await Await.Delay(this.GetItemDelay(target) + (int)Game.Ping, token);
            }

            if ((this.RodofAtos != null &&
                 (this.RodofAtos.Item.IsValid &&
                  target != null &&
                  this.RodofAtos.Item.CanBeCasted(target) &&
                  this.Config.ItemToggler.Value.IsEnabled("item_rod_of_atos"))))
            {
                Log.Debug("Using RodofAtos");
                this.RodofAtos.UseAbility(target);
                await Await.Delay(this.GetItemDelay(target) + (int)Game.Ping, token);
            }

            if ((this.VeilofDiscord != null &&
                 (this.VeilofDiscord.Item.IsValid &&
                  target != null &&
                  this.VeilofDiscord.Item.CanBeCasted() &&
                  this.Config.ItemToggler.Value.IsEnabled("item_veil_of_discord"))))
            {
                Log.Debug("Using VeilofDiscord");
                this.VeilofDiscord.UseAbility(target.Position);
                await Await.Delay(this.GetItemDelay(target) + (int)Game.Ping, token);
            }

            if ((this.HurricanePike != null) && (double)(this.Owner.Health / this.Owner.MaximumHealth) * 100 <=
                (double)Config.HurricanePercentage.Item.GetValue <Slider>().Value&&
                this.HurricanePike.Item.IsValid &&
                target != null &&
                this.HurricanePike.Item.CanBeCasted() &&
                this.Config.ItemToggler.Value.IsEnabled("item_hurricane_pike"))
            {
                Log.Debug("Using HurricanePike");
                this.HurricanePike.UseAbility(target);
                await Await.Delay(this.GetItemDelay(target) + (int)Game.Ping, token);
            }

            if ((this.ShivasGuard != null &&
                 (this.ShivasGuard.Item.IsValid &&
                  target != null &&
                  this.ShivasGuard.Item.CanBeCasted() &&
                  Owner.Distance2D(target) <= 900 &&
                  this.Config.ItemToggler.Value.IsEnabled("item_shivas_guard"))))
            {
                Log.Debug("Using Shiva's Guard");
                this.ShivasGuard.UseAbility();
                await Await.Delay(this.GetItemDelay(target) + (int)Game.Ping, token);
            }

            if ((this.Mjollnir != null &&
                 (this.Mjollnir.Item.IsValid &&
                  target != null &&
                  this.Mjollnir.Item.CanBeCasted() &&
                  this.Config.ItemToggler.Value.IsEnabled("item_mjollnir"))))
            {
                Log.Debug("Using Mjollnir");
                this.Mjollnir.UseAbility(Owner);
                await Await.Delay(this.GetItemDelay(target) + (int)Game.Ping, token);
            }

            if (this.Orbwalker.OrbwalkTo(target))
            {
                return;
            }

            await Await.Delay(125, token);
        }