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); }
public override float GetRequiredTime(EvadableAbility ability, Unit unit) { return(Math.Max(ability.GetRemainingTime(Hero) - 0.1f, 0)); }
public override float GetRequiredTime(EvadableAbility ability, Unit unit, float remainingTime) { return(Math.Max(Math.Min(ability.GetRemainingTime(Hero) - 0.15f, ArmletFullEnableTime), 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; }
public override float GetRequiredTime(EvadableAbility ability, Unit unit, float remainingTime) { return Math.Max(ability.GetRemainingTime(Hero) - 0.1f, 0); }