Esempio n. 1
0
        public override bool CanBeCasted(EvadableAbility ability, Unit unit)
        {
            if (Sleeper.Sleeping || !Hero.CanUseItems())
            {
                return(false);
            }

            if (armletEnabled && AffectedByDot())
            {
                return(false);
            }

            var damageSource = ability.AbilityOwner;
            var health       = (int)unit.Health;

            if (armletEnabled)
            {
                health = Math.Max(health - ArmletHpGain, 1);
            }

            //if (ability.IsDisable)
            //{
            //    var totalDamage = (damageSource.MinimumDamage + damageSource.BonusDamage)
            //                      * damageSource.AttacksPerSecond * 2;
            //    var totalMana = damageSource.Mana;

            //    foreach (var spell in damageSource.Spellbook.Spells.Where(x => x.Level > 0 && x.Cooldown <= 0))
            //    {
            //        if (totalMana >= spell.ManaCost)
            //        {
            //            totalDamage += (int)Math.Round(AbilityDamage.CalculateDamage(spell, damageSource, unit));
            //            totalMana -= spell.ManaCost;
            //        }
            //    }

            //    return health <= totalDamage;
            //}

            var damage = 150d;

            try
            {
                damage = Math.Round(AbilityDamage.CalculateDamage(ability.Ability, damageSource, unit));
            }
            catch
            {
                Console.WriteLine("[Evader] Failed to calculate damage for: " + ability.Name);
            }

            if (HpRestored(ability.GetRemainingTime(Hero)) + health < damage)
            {
                return(false);
            }

            return(health <= damage);
        }
Esempio n. 2
0
 public override float GetRequiredTime(EvadableAbility ability, Unit unit)
 {
     return(Math.Max(ability.GetRemainingTime(Hero) - 0.1f, 0));
 }
Esempio n. 3
0
 public override float GetRequiredTime(EvadableAbility ability, Unit unit, float remainingTime)
 {
     return(Math.Max(Math.Min(ability.GetRemainingTime(Hero) - 0.15f, ArmletFullEnableTime), 0));
 }
Esempio n. 4
0
        public override bool CanBeCasted(EvadableAbility ability, Unit unit)
        {
            if (Sleeper.Sleeping)
            {
                return false;
            }

            var nearEnemies =
                ObjectManager.GetEntitiesParallel<Unit>()
                    .Where(
                        x =>
                            x.IsValid && x.IsAlive && x.IsSpawned && x.AttackCapability != AttackCapability.None
                            && x.Team != HeroTeam && x.Distance2D(Hero) < x.GetAttackRange() + 300);

            var armletEnabled = Hero.Modifiers.Any(x => x.Name == ArmletModifierName);
            if (armletEnabled && DotModifiers(nearEnemies))
            {
                return false;
            }

            var damageSource = ability.AbilityOwner;

            if (ability.IsDisable)
            {
                var totalDamage = (damageSource.MinimumDamage + damageSource.BonusDamage)
                                  * damageSource.AttacksPerSecond * 2;
                var totalMana = damageSource.Mana;

                foreach (var spell in damageSource.Spellbook.Spells.Where(x => x.Level > 0 && x.Cooldown <= 0))
                {
                    if (totalMana >= spell.ManaCost)
                    {
                        totalDamage += (int)Math.Round(AbilityDamage.CalculateDamage(spell, damageSource, unit));
                        totalMana -= spell.ManaCost;
                    }
                }

                return unit.Health <= totalDamage;
            }

            var damage = (int)Math.Round(AbilityDamage.CalculateDamage(ability.Ability, damageSource, unit));

            if (HpRestored(ability.GetRemainingTime(Hero)) < damage)
            {
                return false;
            }

            return unit.Health <= damage;
        }
Esempio n. 5
0
 public override float GetRequiredTime(EvadableAbility ability, Unit unit, float remainingTime)
 {
     return Math.Max(ability.GetRemainingTime(Hero) - 0.1f, 0);
 }