Ejemplo n.º 1
0
        protected override void OnActivate()
        {
            base.OnActivate();

            this.Decrepify = UnitExtensions.GetAbilityById(this.Owner, AbilityId.pugna_decrepify);
            this.Blast     = UnitExtensions.GetAbilityById(this.Owner, AbilityId.pugna_nether_blast);
            this.Ward      = UnitExtensions.GetAbilityById(this.Owner, AbilityId.pugna_nether_ward);
            this.Drain     = UnitExtensions.GetAbilityById(this.Owner, AbilityId.pugna_life_drain);


            var factory  = this.Config.Hero.Factory;
            var itemMenu = this.Config.Hero.ItemMenu;

            this.UseBlinkPrediction = factory.Item("Blink Prediction", new Slider(200, 0, 600));
            this.UseBlinkPrediction.Item.Tooltip = "Will blink to set distance. Set to 0 if you want to disable it.";
            this.DrainHP = factory.Item("Heal ally HP", new Slider(30, 0, 100));
            this.DrainHP.Item.Tooltip     = "Allies HP to begin healing";
            this.SelfHPDrain              = factory.Item("Min HP to Heal", new Slider(60, 0, 100));
            this.SelfHPDrain.Item.Tooltip = "HP threshold to start healing";
            this.PostDrainHP              = factory.Item("Post drain HP", new Slider(30, 0, 100));
            this.PostDrainHP.Item.Tooltip =
                "HP threshold to stop healing. (this value must be higher than post drain HP)";
            this.HealAllyTo = factory.Item("Post drain HP for ally", new Slider(100, 0, 100));
            this.HealAllyTo.Item.Tooltip  = "Heal ally to this hp (this value must be higher than heal ally HP)";
            this.WardTargets              = factory.Item("Targets for ward", new Slider(0, 1, 5));
            this.WardTargets.Item.Tooltip = "Targets in range of ward for usage";
            this.HealTargetHeroes         = factory.Item("Heal Targets", new HeroToggler(new Dictionary <string, bool>(), false, true, false));
        }
Ejemplo n.º 2
0
        protected override async Task KillStealAsync(CancellationToken token)
        {
            if (Game.IsPaused || !this.Owner.IsAlive || !AbilityExtensions.CanBeCasted(this.Blast))
            {
                await Task.Delay(125, token);

                return;
            }

            var damageBlast = Blast.GetAbilitySpecialData("blast_damage");

            damageBlast *= Ensage.SDK.Extensions.UnitExtensions.GetSpellAmplification(this.Owner);

            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 &&
                    Ensage.Common.Extensions.AbilityExtensions.CanBeCasted(Decrepify, x) && Ensage.Common.Extensions.AbilityExtensions.CanBeCasted(Blast, x) &&
                    !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) &&
                    Ensage.Common.Extensions.AbilityExtensions.CanBeCasted(Blast, x) && !UnitExtensions.IsMagicImmune(x) && Blast.CanHit(x) &&
                    Ensage.SDK.Extensions.EntityExtensions.Distance2D(Owner, x.NetworkPosition) <= 800);

            if (!UnitExtensions.IsChanneling(this.Owner))
            {
                if (decrepifyKillable != null)
                {
                    if (Decrepify.UseAbility(decrepifyKillable))
                    {
                        await this.AwaitKillstealDelay((int)AbilityExtensions.GetCastDelay(this.Decrepify, this.Owner, decrepifyKillable, true), token); // decrepify
                    }

                    if (Blast.CanHit(decrepifyKillable))
                    {
                        if (Blast.UseAbility(decrepifyKillable))
                        {
                            await this.AwaitKillstealDelay((int)AbilityExtensions.GetCastDelay(this.Blast, this.Owner, decrepifyKillable, true), token);
                        }
                    }
                }

                if (blastKillable != null)
                {
                    if (Blast.UseAbility(blastKillable.NetworkPosition))
                    {
                        await this.AwaitKillstealDelay((int)AbilityExtensions.GetCastDelay(this.Blast, this.Owner, blastKillable, true), token);
                    }
                }
            }
        }
Ejemplo n.º 3
0
 protected override void SemiR()
 {
     if (RootMenu["insec"].Enabled)
     {
         Player.IssueOrder(OrderType.MoveTo, Game.CursorPos);
         var target = Extensions.GetBestEnemyHeroTargetInRange(R.Range + 410);
         if (R.Ready)
         {
             if (Flash.Ready && Flash != null && target.IsValidTarget())
             {
                 if (target.IsValidTarget(380))
                 {
                     foreach (var ally in GameObjects.AllyHeroes)
                     {
                         if (ally != null && UnitExtensions.Distance(ally, Player) < 1500 && !ally.IsMe)
                         {
                             if (Flash.Cast(target.ServerPosition.Extend(ally.ServerPosition, -100)))
                             {
                                 R.Cast();
                             }
                         }
                     }
                     if (GameObjects.AllyHeroes.Where(x => UnitExtensions.Distance(x, Player) < E.Range)
                         .Count() == 1)
                     {
                         if (Flash.Cast(target.ServerPosition.Extend(Player.ServerPosition, -100)))
                         {
                             R.Cast();
                         }
                     }
                 }
             }
         }
     }
 }
Ejemplo n.º 4
0
 public static bool IsFullMagicResist(this Unit source)
 {
     return(UnitExtensions.IsMagicImmune(source) ||
            source.HasModifier("modifier_medusa_stone_gaze_stone") ||
            source.HasModifier("modifier_huskar_life_break_charge") ||
            source.HasModifier("modifier_oracle_fates_edict"));
 }
        private void Events_OnLoad(object sender, EventArgs e)
        {
            if (this.initialized)
            {
                return;
            }

            this.initialized          = true;
            GlobalVariables.LocalHero = ObjectManager.LocalHero;
            GlobalVariables.EnemyTeam = UnitExtensions.GetEnemyTeam(GlobalVariables.LocalHero);
            GlobalVariables.Team      = GlobalVariables.LocalHero.Team;

            // An aggregate catalog that combines multiple catalogs
            catalog = new AggregateCatalog();

            // Adds all the parts found in the Ability# assembly
            catalog.Catalogs.Add(new AssemblyCatalog(typeof(AbilityBootstrapper).Assembly));

            // foreach (var cacheAssembly in EnsageSharp.Sandbox.AssemblyResolver.AssemblyCache)
            // {
            // }
            // Environment.
            // catalog.Catalogs.Add(new AssemblyCatalog());
            container = new CompositionContainer(catalog);

            foreach (var c in catalog)
            {
                Console.WriteLine(c);
            }

            ComposeParts(this);

            var delay = Game.GameTime < 0 ? 3000 : 500;

            DelayAction.Add(
                delay,
                () =>
            {
                this.AbilityUnitManager.Value.OnLoad();
                foreach (var abilityService in this.AbilityServices)
                {
                    abilityService.Value.OnLoad();
                }

                this.MainMenuManager.Value.OnLoad();
            });

            DelayAction.Add(
                500,
                () =>
            {
                foreach (var abilityService in this.AbilityServices)
                {
                    Console.WriteLine("Service: " + abilityService.Value);
                }
            });
        }
Ejemplo n.º 6
0
 /// <summary>
 ///     The load.
 /// </summary>
 private static void Load()
 {
     AbilityDatabase.Init();
     AbilityDamage.Init();
     AbilityExtensions.Init();
     HeroExtensions.Init();
     UnitExtensions.Init();
     Names.Init();
     Abilities.Init();
 }
Ejemplo n.º 7
0
        private async Task OnUpdate(CancellationToken token)
        {
            //List<Hero> enemies = new List<Hero> ();
            //List<Unit> greenbombsnearby = new List<Unit> ();
            //greenbombsnearby.Clear ();
            //enemies.Clear ();

            if (config.EnableCheat)
            {
                greenbombsnearby = new List <Unit>();
                if (config.techiesRampage.RemoteMines != null)
                {
                    enemies = ObjectManager.GetEntities <Hero> ().Where(x => (x.Team != main.Team)).ToList();
                    if (enemies.Count > 0)
                    {
                        foreach (Hero enemy in enemies)
                        {
                            int   bombsneeded  = 0;
                            float damage       = 0.0f;
                            int   bombscounter = 0;
                            damage = AbilityDamage.CalculateDamage(config.techiesRampage.RemoteMines, context.Owner, enemy as Unit, 0, 0, enemy.MagicDamageResist, enemy.Health);
                            //damage = getDamage(enemy);
                            greenbombsnearby = ObjectManager.GetEntities <Unit> ().Where(x => x.IsInRange(enemy, 400) && x.IsAlive && x.Name == "npc_dota_techies_remote_mine" && x.Team == main.Team && x.IsControllableByPlayer(ObjectManager.LocalPlayer)).ToList();
                            bombsneeded      = 0;
                            float damageneeded = 0;
                            while (greenbombsnearby.Count > 0 && damageneeded < enemy.Health)
                            {
                                damageneeded += damage;
                                bombsneeded++;
                            }

                            if (greenbombsnearby.Count > 0 && greenbombsnearby.Count >= bombsneeded)
                            {
                                foreach (Unit bomb in greenbombsnearby)
                                {
                                    if (bombscounter < bombsneeded)
                                    {
                                        Ability selfdetonate = UnitExtensions.GetAbilityById(bomb, AbilityId.techies_remote_mines_self_detonate);
                                        if (selfdetonate != null)
                                        {
                                            selfdetonate.UseAbility();
                                            bombscounter++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }

            await Task.Delay(25, token);
        }
Ejemplo n.º 8
0
        protected override void OnActivate()
        {
            base.OnActivate();

            KillStealHandler = UpdateManager.Run(KillStealAsync, true, true);

            this.context.Inventory.Attach(this);

            this.Imprison = UnitExtensions.GetAbilityById(this.Owner, AbilityId.obsidian_destroyer_astral_imprisonment);
            this.Orb      = UnitExtensions.GetAbilityById(this.Owner, AbilityId.obsidian_destroyer_arcane_orb);
            this.Ulti     = UnitExtensions.GetAbilityById(this.Owner, AbilityId.obsidian_destroyer_sanity_eclipse);
        }
Ejemplo n.º 9
0
 /// <summary>
 ///     The load.
 /// </summary>
 private static void Init()
 {
     AbilityDatabase.Init();
     AbilityDamage.Init();
     AbilityExtensions.Init();
     HeroExtensions.Init();
     UnitExtensions.Init();
     Names.Init();
     Abilities.Init();
     Calculations.Init();
     EntityExtensions.Init();
     Utils.Sleeps = new Dictionary <string, double>();
     NotifiedSubscribers.Clear();
 }
Ejemplo n.º 10
0
 /// <summary>
 ///     The load.
 /// </summary>
 private static void Load()
 {
     AbilityDatabase.Init();
     AbilityDamage.Init();
     AbilityExtensions.Init();
     HeroExtensions.Init();
     UnitExtensions.Init();
     Names.Init();
     Abilities.Init();
     Calculations.Init();
     EntityExtensions.Init();
     Orbwalking.Events_OnLoad(null, null);
     Utils.Sleeps = new Dictionary <string, double>();
 }
Ejemplo n.º 11
0
        private void CreateUnit(NetworkMessage netMsg)
        {
            var msg     = netMsg.ReadMessage <CreateUnitMsg>();
            var newUnit = UnitExtensions.InstantiateUnitFromMsg(msg);

            newUnit.PlayerId    = _connectionPlayerMapping[netMsg.conn.connectionId];
            newUnit.CurrentTile = GameState.AllTiles[msg.TileId];
            newUnit.UnitId      = GameState.GenerateId();
            GameState.AllTiles[msg.TileId].OccupyUnit = newUnit;
            GameState.AllUnits.Add(newUnit.UnitId, newUnit);

            var msgToBroadcast = CreateUnitMsg.CopyMessage(msg, newUnit);

            NetworkServer.SendToAll(Messages.CreateUnit, msgToBroadcast);
        }
Ejemplo n.º 12
0
 internal override void OnPreAttack(object sender, PreAttackEventArgs e)
 {
     if (RootMenu["combo"]["support"].Enabled)
     {
         if (Orbwalker.Implementation.Mode.Equals(OrbwalkingMode.Lasthit) ||
             Orbwalker.Implementation.Mode.Equals(OrbwalkingMode.Laneclear) ||
             Orbwalker.Implementation.Mode.Equals(OrbwalkingMode.Mixed))
         {
             if (e.Target.IsMinion && GameObjects.AllyHeroes
                 .Where(x => UnitExtensions.Distance(x, Player) < 1000).Count() > 1)
             {
                 e.Cancel = true;
             }
         }
     }
 }
Ejemplo n.º 13
0
        private void OnPounce()
        {
            if (Pounce.Level <= 0)
            {
                return;
            }

            if (DrawPouncePosition == true)
            {
                var          pounceCastPos = UnitExtensions.InFront(Owner, PounceDistance + PounceRadius);
                var          red           = new Vector3(255, 0, 0);
                var          green         = new Vector3(0, 255, 0);
                const string file          = "materials/ensage_ui/particles/rectangle.vpcf";
                particle.AddOrUpdate(Owner, $"DrawLine_{1}", file, ParticleAttachment.AbsOrigin, RestartType.None, 1, this.Owner.InFront(0), 2, pounceCastPos,
                                     3, new Vector3(95, 100, 0), 4, red);

                var targets = EntityManager <Hero> .Entities.FirstOrDefault(
                    x => x.IsAlive && x.Team != this.Owner.Team &&
                    x.Distance2D(this.Owner) < 1500 && !x.IsIllusion);

                if (targets != null && AbilityExtensions.CanBeCasted(this.Pounce) && this.Pounce != null &&
                    !UnitExtensions.IsMagicImmune(targets) && !targets.IsInvulnerable())
                {
                    var vectorOfMovement = new Vector2((float)Math.Cos(targets.RotationRad) * targets.MovementSpeed, (float)Math.Sin(targets.RotationRad) * targets.MovementSpeed);
                    var hitPosition      = Intercepts(targets.Position, vectorOfMovement, this.Owner.Position, 933.33f);
                    var hitPosMod        = hitPosition + new Vector3(vectorOfMovement.X * (TimeToTurn(this.Owner, hitPosition)), vectorOfMovement.Y * (TimeToTurn(this.Owner, hitPosition)), 0);
                    var hitPosMod2       = hitPosition + new Vector3(vectorOfMovement.X * (TimeToTurn(this.Owner, hitPosMod)), vectorOfMovement.Y * (TimeToTurn(this.Owner, hitPosMod)), 0);

                    if (this.Owner.Distance2D(hitPosMod2) > ((PounceDistance + PounceRadius) + targets.HullRadius))
                    {
                        return;
                    }

                    if (IsFacing(this.Owner, targets))
                    {
                        particle.AddOrUpdate(Owner, $"DrawLine_{1}", file, ParticleAttachment.AbsOrigin, RestartType.None, 1, this.Owner.InFront(0), 2, pounceCastPos,
                                             3, new Vector3(95, 100, 0), 4, green);
                    }
                }
            }
            else
            {
                particle.Remove($"DrawLine_{1}");
            }
        }
Ejemplo n.º 14
0
        public virtual async Task KillStealAsync(CancellationToken args)
        {
            if (!Config.KillStealEnabled || Game.IsPaused || !Owner.IsAlive || UnitExtensions.IsChanneling(Owner))
            {
                return;
            }

            var enemies =
                EntityManager <Hero> .Entities.Where(
                    x =>
                    x.IsValid &&
                    x.UnitState != UnitState.MagicImmune &&
                    x.IsAlive &&
                    !x.IsIllusion &&
                    x.Team != this.Owner.Team &&
                    x.Distance2D(this.Owner) <= this.Imprison.CastRange &&
                    this.GetImprisonDamage(x) >= (int)x.Health)
                .ToList();

            if (!enemies.Any())
            {
                return;
            }

            foreach (var enemy in enemies)
            {
                if (enemy.IsValid && this.Config.AbilityToggler.Value.IsEnabled(this.Imprison.Name) && this.Imprison.CanBeCasted())
                {
                    Log.Debug($"Using Imprison because enemy can be ks'ed.");
                    this.Imprison.UseAbility(enemy);
                    await Await.Delay(this.GetAbilityDelay(enemy, this.Imprison));

                    return;
                }
            }

            await Await.Delay(250, args);

            return;
        }
Ejemplo n.º 15
0
        private void Events_OnLoad(object sender, EventArgs e)
        {
            if (this.initialized)
            {
                return;
            }

            GlobalVariables.LocalHero = ObjectManager.LocalHero;
            GlobalVariables.EnemyTeam = UnitExtensions.GetEnemyTeam(GlobalVariables.LocalHero);
            GlobalVariables.Team      = GlobalVariables.LocalHero.Team;

            // An aggregate catalog that combines multiple catalogs
            catalog = new AggregateCatalog();

            // Adds all the parts found in the Ability# assembly
            var count = 0f;

            //foreach (var cacheAssembly in EnsageSharp.Sandbox.Domain.PluginDomain.Assemblies)
            foreach (var cacheAssembly in AssemblyResolver.AssemblyCache)
            {
                if (cacheAssembly.IsLibrary || !cacheAssembly.IsLoaded || !cacheAssembly.Exists || !cacheAssembly.Name.StartsWith("Ability."))
                {
                    continue;
                }

                count++;
                //Console.WriteLine(cacheAssembly.AssemblyName + " " + cacheAssembly.Name);
                catalog.Catalogs.Add(new AssemblyCatalog(cacheAssembly.Assembly));
            }

            if (count == 0)
            {
                return;
            }

            catalog.Catalogs.Add(new AssemblyCatalog(typeof(AbilityBootstrapper).Assembly));
            // Environment.
            // catalog.Catalogs.Add(new AssemblyCatalog());
            container = new CompositionContainer(catalog);

            // foreach (var c in catalog)
            // {
            // Console.WriteLine(c);
            // //foreach (var cExportDefinition in c.ExportDefinitions)
            // //{
            // //    Console.WriteLine(cExportDefinition.ToString());
            // //    foreach (var o in cExportDefinition.Metadata)
            // //    {
            // //        Console.WriteLine(o.ToString());
            // //    }
            // //}
            // }
            var delay = Game.GameTime < 0 ? 1500 : 500;

            DelayAction.Add(
                delay,
                () =>
            {
                this.initialized = true;
                ComposeParts(this);
                if (!Game.IsInGame)
                {
                    return;
                }

                this.AbilityFactory.Value.OnLoad();

                this.AbilityUnitManager.Value.OnLoad();

                this.MainMenuManager.Value.OnLoad();

                if (this.AbilityServices != null && this.AbilityServices.Any())
                {
                    foreach (var abilityService in this.AbilityServices)
                    {
                        Console.WriteLine("Service: " + abilityService.Value);
                        abilityService.Value?.OnLoad();
                    }
                }

                this.AbilityModuleManager.Value.OnLoad();

                this.AbilityDataCollector.Value.OnLoad();
            });

            // DelayAction.Add(
            // 500,
            // () =>
            // {
            // foreach (var abilityService in this.AbilityServices)
            // {
            // Console.WriteLine("Service: " + abilityService.Value);
            // }
            // });
        }
Ejemplo n.º 16
0
        private async Task OnUpdate(CancellationToken token)
        {
            if (Game.IsPaused || !this.Config.General.ComboKey.Value.Active)
            {
                await Task.Delay(250, token);

                return;
            }

            if (!this.Config.General.Enabled)
            {
                return;
            }

            foreach (var unit in this.Updater.AllUnits)
            {
                if (unit.Unit != BodyBlockerUnit && this.Config.Hero.ControlUnits && unit.Unit.Name != "npc_dota_templar_assassin_psionic_trap")
                {
                    if (this.ComboMode.CurrentTarget == null || UnitExtensions.IsInvul(this.ComboMode.CurrentTarget) ||
                        this.ComboMode.CurrentTarget.IsAttackImmune())
                    {
                        Player.AttackEntity(unit.Unit, (Unit)null);
                        //unit.UnitMovementManager.Orbwalk(null);
                    }
                    else
                    {
                        Player.AttackEntity(unit.Unit, this.ComboMode.CurrentTarget);
                        //unit.UnitMovementManager.Orbwalk(this.ComboMode.CurrentTarget);
                    }
                }

                var ability1 = unit.Ability;
                var ability2 = unit.Ability2;
                var ability3 = unit.Ability3;
                var ability4 = unit.Ability4;

                if (this.ComboMode.CurrentTarget != null && this.Config.Hero.UseUnitAbilities &&
                    !UnitExtensions.IsInvul(this.ComboMode.CurrentTarget) && !this.ComboMode.CurrentTarget.IsAttackImmune() && !this.ComboMode.CurrentTarget.IsMagicImmune() &&
                    (ability1 != null && AbilityExtensions.CanBeCasted(ability1) ||
                     ability2 != null && AbilityExtensions.CanBeCasted(ability2) ||
                     ability3 != null && AbilityExtensions.CanBeCasted(ability3) ||
                     ability4 != null && AbilityExtensions.CanBeCasted(ability4)))
                {
                    if (ability1 != null &&
                        AbilityExtensions.CanBeCasted(ability1) &&
                        UnitCastingChecks(ability1.Name, unit.Unit, this.ComboMode.CurrentTarget, ability1) &&
                        (ability1.TargetTeamType == TargetTeamType.Enemy ||
                         ability1.TargetTeamType == TargetTeamType.None) &&
                        (unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityCastRange(unit.Unit, ability1) ||
                         unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityRadius(unit.Unit, ability1) - 70))
                    {
                        if (ability1.AbilityBehavior.HasFlag(AbilityBehavior.NoTarget))
                        {
                            if (ability1.UseAbility())
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability1.AbilityBehavior.HasFlag(AbilityBehavior.UnitTarget))
                        {
                            if (ability1.UseAbility(this.ComboMode.CurrentTarget))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability1.AbilityBehavior.HasFlag(AbilityBehavior.Point))
                        {
                            if (ability1.UseAbility(this.ComboMode.CurrentTarget.Position))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                    }
                    else if (ability1 != null &&
                             AbilityExtensions.CanBeCasted(ability1) &&
                             ability1.TargetTeamType == TargetTeamType.Allied &&
                             unit.Unit.Distance2D(this.Owner) <= Extensions.GetAbilityCastRange(unit.Unit, ability1))
                    {
                        if (ability1.UseAbility(this.Owner))
                        {
                            await Task.Delay(180, token);
                        }
                    }

                    if (ability2 != null &&
                        AbilityExtensions.CanBeCasted(ability2) &&
                        UnitCastingChecks(ability2.Name, unit.Unit, this.ComboMode.CurrentTarget, ability2) &&
                        AbilityExtensions.CanHit(ability2, this.ComboMode.CurrentTarget) &&
                        (ability2.TargetTeamType == TargetTeamType.Enemy ||
                         ability2.TargetTeamType == TargetTeamType.None) &&
                        (unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityCastRange(unit.Unit, ability2) ||
                         unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityRadius(unit.Unit, ability2) - 70))
                    {
                        if (ability2.AbilityBehavior.HasFlag(AbilityBehavior.NoTarget))
                        {
                            if (ability2.UseAbility())
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability2.AbilityBehavior.HasFlag(AbilityBehavior.UnitTarget))
                        {
                            if (ability2.UseAbility(this.ComboMode.CurrentTarget))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability2.AbilityBehavior.HasFlag(AbilityBehavior.Point))
                        {
                            if (ability2.UseAbility(this.ComboMode.CurrentTarget.Position))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                    }
                    else if (ability2 != null &&
                             AbilityExtensions.CanBeCasted(ability2) &&
                             ability2.TargetTeamType == TargetTeamType.Allied &&
                             unit.Unit.Distance2D(this.Owner) <= Extensions.GetAbilityCastRange(unit.Unit, ability2))
                    {
                        if (ability2.UseAbility(this.Owner))
                        {
                            await Task.Delay(180, token);
                        }
                    }

                    if (ability3 != null &&
                        AbilityExtensions.CanBeCasted(ability3) &&
                        UnitCastingChecks(ability3.Name, unit.Unit, this.ComboMode.CurrentTarget, ability3) &&
                        AbilityExtensions.CanHit(ability3, this.ComboMode.CurrentTarget) &&
                        (ability3.TargetTeamType == TargetTeamType.Enemy ||
                         ability3.TargetTeamType == TargetTeamType.None) &&
                        (unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityCastRange(unit.Unit, ability3) ||
                         unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityRadius(unit.Unit, ability3) - 70))
                    {
                        if (ability3.AbilityBehavior.HasFlag(AbilityBehavior.NoTarget))
                        {
                            if (ability3.UseAbility())
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability3.AbilityBehavior.HasFlag(AbilityBehavior.UnitTarget))
                        {
                            if (ability3.UseAbility(this.ComboMode.CurrentTarget))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability3.AbilityBehavior.HasFlag(AbilityBehavior.Point))
                        {
                            if (ability3.UseAbility(this.ComboMode.CurrentTarget.Position))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                    }
                    else if (ability3 != null &&
                             AbilityExtensions.CanBeCasted(ability3) &&
                             ability3.TargetTeamType == TargetTeamType.Allied &&
                             unit.Unit.Distance2D(this.Owner) <= Extensions.GetAbilityCastRange(unit.Unit, ability3))
                    {
                        if (ability3.UseAbility(this.Owner))
                        {
                            await Task.Delay(180, token);
                        }
                    }

                    if (ability4 != null &&
                        AbilityExtensions.CanBeCasted(ability4) &&
                        UnitCastingChecks(ability4.Name, unit.Unit, this.ComboMode.CurrentTarget, ability4) &&
                        AbilityExtensions.CanHit(ability4, this.ComboMode.CurrentTarget) &&
                        (ability4.TargetTeamType == TargetTeamType.Enemy ||
                         ability4.TargetTeamType == TargetTeamType.None) &&
                        (unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityCastRange(unit.Unit, ability4) ||
                         unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityRadius(unit.Unit, ability4) - 70))
                    {
                        if (ability4.AbilityBehavior.HasFlag(AbilityBehavior.NoTarget))
                        {
                            if (ability4.UseAbility())
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability4.AbilityBehavior.HasFlag(AbilityBehavior.UnitTarget))
                        {
                            if (ability4.UseAbility(this.ComboMode.CurrentTarget))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability4.AbilityBehavior.HasFlag(AbilityBehavior.Point))
                        {
                            if (ability4.UseAbility(this.ComboMode.CurrentTarget.Position))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                    }
                    else if (ability4 != null &&
                             AbilityExtensions.CanBeCasted(ability4) &&
                             ability4.TargetTeamType == TargetTeamType.Allied &&
                             unit.Unit.Distance2D(this.Owner) <= Extensions.GetAbilityCastRange(unit.Unit, ability4))
                    {
                        if (ability4.UseAbility(this.Owner))
                        {
                            await Task.Delay(180, token);
                        }
                    }
                }
            }

            await Task.Delay(100, token);
        }
Ejemplo n.º 17
0
        public override async Task ExecuteAsync(CancellationToken token)
        {
            target =
                this.TargetSelector.Active.GetTargets()
                .FirstOrDefault(x => !x.IsInvulnerable() && x.Distance2D(this.Owner) <= this.Owner.AttackRange * 2);

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

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

            var modifier = Ensage.SDK.Extensions.UnitExtensions.HasModifier(this.Owner,
                                                                            "modifier_item_hurricane_pike_range");

            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);
            }

            if (!silenced)
            {
                try
                {
                    var targets =
                        EntityManager <Hero> .Entities.Where(
                            x =>
                            x.IsValid && x.Team != this.Owner.Team && !x.IsIllusion &&
                            x.Distance2D(this.Owner) <= 700)
                        .ToList();

                    foreach (var ultiTarget in targets)
                    {
                        if (this.Config.AbilityToggler.Value.IsEnabled(this.Ulti.Ability.Name) &&
                            this.Ulti.Ability.CanBeCasted(ultiTarget))
                        {
                            var ultiDamage = Ulti.GetDamage(ultiTarget);


                            if (ultiTarget.Health > ultiDamage)
                            {
                                continue;
                            }

                            var delay  = this.GetAbilityDelay(ultiTarget, this.Ulti);
                            var radius = this.Ulti.Ability.GetAbilitySpecialData("radius");
                            var input  =
                                new PredictionInput(
                                    this.Owner,
                                    ultiTarget,
                                    delay,
                                    float.MaxValue,
                                    700,
                                    radius,
                                    PredictionSkillshotType.SkillshotCircle,
                                    true)
                            {
                                CollisionTypes = CollisionTypes.None
                            };

                            // Log.Debug($"Owner: {input.Owner.Name}");
                            // Log.Debug($"Delay: {input.Delay}");
                            // Log.Debug($"Range: {input.Range}");
                            // Log.Debug($"Speed: {input.Speed}");
                            // Log.Debug($"Radius: {input.Radius}");
                            // Log.Debug($"Type: {input.PredictionSkillshotType}");
                            var output = this.Prediction.GetPrediction(input);
                            var amount = output.AoeTargetsHit.Count;

                            // Log.Debug($"{output.HitChance}");

                            if (output.HitChance >= HitChance.Medium &&
                                this.Config.MinimumTargetToUlti.Value >= amount)
                            {
                                Log.Debug(
                                    $"Using Ulti!");
                                this.Ulti.UseAbility(output.CastPosition);
                                await Await.Delay(delay + (int)Game.Ping, token);
                            }
                        }
                    }
                }
                catch (TaskCanceledException)
                {
                    // ignore
                }
                catch (Exception e)
                {
                    Log.Debug($"{e}");
                }
            }

            if ((this.BloodThorn != null) &&
                this.BloodThorn.Item.IsValid &&
                target != null &&
                this.BloodThorn.Item.CanBeCasted(target) &&
                this.Config.ItemToggler.Value.IsEnabled(this.BloodThorn.Item.Name))
            {
                Log.Debug("Using Bloodthorn");
                this.BloodThorn.UseAbility(target);
                await Await.Delay(this.GetItemDelay(target), 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), 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), 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), 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), token);
            }

            try
            {
                if (this.HurricanePike != null)
                {
                    if (modifier && target != null && target.IsValid && target.IsAlive && this.Owner.CanAttack(target) &&
                        this.Orb.Ability.CanBeCasted(target))
                    {
                        await this.UseOrb(target, token);

                        return;
                    }
                    else if (modifier && target != null && target.IsValid && target.IsAlive && this.Owner.CanAttack(target) &&
                             !this.Orb.Ability.CanBeCasted(target))
                    {
                        this.Owner.Attack(target);
                        await Await.Delay(100, token);
                    }

                    if ((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), token);

                        return;
                    }
                }
            }
            catch (TaskCanceledException)
            {
                // ignore
            }
            catch (Exception e)
            {
                Log.Error($"{e}");
            }

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


            if (this.Orb != null && this.Orb.Ability.IsValid &&
                this.Config.AbilityToggler.Value.IsEnabled(this.Orb.Ability.Name) &&
                this.Orb.Ability.CanBeCasted(target))
            {
                await this.UseOrb(target, token);

                return;
            }

            if (this.target != null && target.IsValid &&
                this.Owner.Distance2D(this.target) <= this.Owner.AttackRange(this.target))
            {
                this.Context.Orbwalker.Active.OrbwalkTo(target);
            }
            else
            {
                this.Context.Orbwalker.Active.OrbwalkTo(null);
            }

            await Await.Delay(125, token);
        }
Ejemplo n.º 18
0
        private async Task HealingWardController(CancellationToken token)
        {
            if (UnitExtensions.HasAghanimsScepter(this.Owner))
            {
                this.SwiftSlash = this.Owner.Spellbook.Spells.FirstOrDefault <Ability>(x => x.Name == "juggernaut_swift_slash");
            }

            if (this.healingWardUnit == null)
            {
                return;
            }

            var team          = this.healingWardUnit.Team;
            var healingRadius = this.HealingWardAbility.Radius;

            while ((this.healingWardUnit != null) && this.healingWardUnit.IsValid && this.healingWardUnit.IsAlive)
            {
                if (Game.IsPaused)
                {
                    await Task.Delay(125, token);

                    continue;
                }

                var enemyHeroes =
                    EntityManager <Hero> .Entities.Where(
                        x =>
                        x.IsAlive && x.IsVisible && (x.Team != team) &&
                        (x.Distance2D(this.healingWardUnit) < 1000))
                    .ToList();

                var alliedHeroes = EntityManager <Hero>
                                   .Entities.Where(
                    x =>
                    x.IsAlive && x.IsVisible && (x.Team == team) && (x.HealthPercent() <= 0.9f) &&
                    (x.Distance2D(this.healingWardUnit) < 800))
                                   .OrderBy(x => x.HealthPercent())
                                   .ToList();

                if (!alliedHeroes.Any())
                {
                    if (!this.Owner.IsAlive)
                    {
                        await Task.Delay(125, token);

                        continue;
                    }

                    alliedHeroes.Add(this.Owner);
                }

                var avoidCircles = new List <Polygon.Circle>(enemyHeroes.Count);
                foreach (var enemyHero in enemyHeroes)
                {
                    var dangerRange = enemyHero.AttackRange(this.healingWardUnit);
                    dangerRange = enemyHero.IsMelee ? dangerRange * 2f : dangerRange * 1.2f;

                    var circle = new Polygon.Circle(enemyHero.Position, dangerRange);

                    avoidCircles.Add(circle);
                }

                var healCircles = new List <Polygon.Circle>(alliedHeroes.Count);
                foreach (var alliedHero in alliedHeroes)
                {
                    var circle = new Polygon.Circle(alliedHero.Position, healingRadius);
                    if (avoidCircles.Exists(x => x.Center.Distance(circle.Center) <= Math.Abs(x.Radius - circle.Radius)))
                    {
                        continue;
                    }

                    healCircles.Add(circle);
                }

                var hasMoved = false;
                if (healCircles.Any())
                {
                    while (healCircles.Count > 1)
                    {
                        var mecResult = MEC.GetMec(healCircles.Select((target) => target.Center).ToList());
                        if ((mecResult.Radius != 0f) && (mecResult.Radius < healingRadius))
                        {
                            var movePos = new Vector3(
                                healCircles.Count <= 2
                                    ? (healCircles[0].Center + healCircles[1].Center) / 2
                                    : mecResult.Center,
                                this.healingWardUnit.Position.Z);

                            if (avoidCircles.TrueForAll(x => !x.IsInside(movePos)))
                            {
                                this.healingWardUnit.Move(movePos);
                                hasMoved = true;
                                break;
                            }
                        }
                        var itemToRemove = healCircles.Where(x => x.Center != this.Owner.Position.ToVector2())
                                           .MaxOrDefault((target) => healCircles[0].Center.DistanceSquared(target.Center));
                        healCircles.Remove(itemToRemove);
                    }
                }

                if (!healCircles.Any() || !hasMoved)
                {
                    var isOwnerLow = this.Owner.HealthPercent() <= 0.5f;
                    var heroPos    = isOwnerLow ? this.Owner.Position : alliedHeroes.First().Position;
                    if (!avoidCircles.Any())
                    {
                        this.healingWardUnit.Move(heroPos);
                    }
                    else
                    {
                        var z = this.healingWardUnit.Position.Z;

                        var clusterPos = Vector3.Zero;
                        foreach (var avoidCircle in avoidCircles)
                        {
                            clusterPos += avoidCircle.Center.ToVector3(z);
                        }

                        clusterPos /= avoidCircles.Count;

                        var movePos = (clusterPos - heroPos).Normalized();
                        movePos = heroPos + (movePos * healingRadius * -1f);
                        this.healingWardUnit.Move(movePos);
                    }
                }

                await Task.Delay(125, token);
            }

            this.healingWardUnit = null;
        }
Ejemplo n.º 19
0
        private void Execute()
        {
            if (!Sleeper.Sleeping && Config.LasthitKey)
            {
                foreach (var familiar in Main.Updater.AllFamiliars)
                {
                    var enemyHero =
                        EntityManager <Hero> .Entities.FirstOrDefault(x =>
                                                                      x.IsAlive &&
                                                                      x.IsVisible &&
                                                                      x.IsEnemy(Owner) &&
                                                                      x.Distance2D(familiar.Unit) <= x.AttackRange + 400);

                    if (RunAwayBool && enemyHero != null)
                    {
                        familiar.Unit.Move(this.Owner.Position);
                        return;
                    }

                    var path            = Main.LaneHelper.GetPathCache(familiar.Unit);
                    var lastPoint       = path[path.Count - 1];
                    var closestPosition = path.Where(
                        x =>
                        x.Distance2D(lastPoint) < familiar.Unit.Position.Distance2D(lastPoint) - 300)
                                          .OrderBy(pos => pos.Distance2D(familiar.Unit.Position))
                                          .FirstOrDefault();
                    Sleeper.Sleep(250);
                    var closestTower = EntityManager <Tower> .Entities
                                       .Where(x => x.IsAlive && x.IsEnemy(familiar.Unit)).OrderBy(z => z.Distance2D(familiar.Unit))
                                       .FirstOrDefault();

                    var rnd = new Random();

                    if (closestTower != null && closestTower.IsInRange(familiar.Unit, 1000))
                    {
                        var myDist     = familiar.Unit.Distance2D(closestTower);
                        var allyCreeps = EntityManager <Creep> .Entities.Where(x =>
                                                                               x.IsAlly(familiar.Unit) && x.IsSpawned && x.IsAlive && !x.NetworkName.Contains("CDOTA_Unit_VisageFamiliar") &&
                                                                               x.IsInRange(closestTower, 700) && x.Distance2D(closestTower) <= myDist);

                        if (allyCreeps.Any())
                        {
                            if (closestTower.AttackTarget != null && closestTower.AttackTarget.Equals(familiar.Unit))
                            {
                                var creepForAggro = allyCreeps.FirstOrDefault();
                                if (creepForAggro != null && !Sleeper.Sleeping)
                                {
                                    CameraExtensions.PositionCamera(creepForAggro);
                                    familiar.Unit.Attack(creepForAggro);
                                    return;
                                }
                                else if (!Sleeper.Sleeping)
                                {
                                    CameraExtensions.PositionCamera(Fountain);
                                    familiar.Unit.Move(Fountain.Position);
                                    return;
                                }
                            }
                        }
                        else
                        {
                            var friendlyTower = EntityManager <Tower> .Entities
                                                .Where(x => x.IsAlive && x.IsAlly(familiar.Unit))
                                                .OrderBy(z => z.Distance2D(familiar.Unit))
                                                .FirstOrDefault();

                            if (friendlyTower != null && !Sleeper.Sleeping)
                            {
                                CameraExtensions.PositionCamera(friendlyTower);
                                familiar.Unit.Move(friendlyTower.Position);
                                Sleeper.Sleep(100);
                                return;
                            }
                            else if (!Sleeper.Sleeping)
                            {
                                CameraExtensions.PositionCamera(Fountain);
                                familiar.Unit.Move(this.Fountain.Position);
                                Sleeper.Sleep(100);
                                return;
                            }
                        }
                    }

                    var creep = GetTarget();
                    if (creep != null)
                    {
                        if (familiar.FamiliarMovementManager.Orbwalker.CanAttack(creep))
                        {
                            familiar.Unit.Attack(creep);

                            if (UseStoneForm && familiar.StoneForm.CanBeCasted)
                            {
                                var lowHpCreeps = EntityManager <Creep> .Entities.Count(x =>
                                                                                        x.IsSpawned && x.IsAlive && UnitExtensions.IsEnemy(x, Owner) &&
                                                                                        x.IsInRange(familiar.Unit, familiar.StoneForm.Radius) &&
                                                                                        familiar.StoneForm.GetDamage(x) >= x.Health);

                                if (lowHpCreeps >= 2)
                                {
                                    CameraExtensions.PositionCamera(familiar.Unit);
                                    familiar.StoneForm.UseAbility();
                                }
                            }
                        }
                    }
                    else if (!Ensage.Common.Extensions.UnitExtensions.IsAttacking(familiar.Unit))
                    {
                        CameraExtensions.PositionCamera(closestPosition.X, closestPosition.Y);
                        familiar.Unit.Attack(closestPosition);
                    }
                }
            }
        }