예제 #1
0
파일: MyHero.cs 프로젝트: senzdota/Ensage
        public Dictionary <DamageType, float> GetAutoAttackDamage(KillableUnit unit)
        {
            var damages          = new Dictionary <DamageType, float>();
            var passiveAbilities = abilities.OfType <IPassiveAbility>().Where(x => x.IsValid(Hero, unit)).ToList();

            foreach (var ability in passiveAbilities)
            {
                var damage = ability.GetBonusDamage(Hero, unit, passiveAbilities);

                if (damages.ContainsKey(ability.DamageType))
                {
                    damages[ability.DamageType] += damage;
                }
                else
                {
                    damages.Add(ability.DamageType, damage);
                }
            }

            if (damages.ContainsKey(DamageType.Physical))
            {
                damages[DamageType.Physical] += AutoAttackDamage;
            }
            else
            {
                damages.Add(DamageType.Physical, AutoAttackDamage);
            }

            return(damages);
        }
예제 #2
0
        public Vector2 GetHealthBarPosition(KillableUnit unit)
        {
            var position = unit.HpBarPosition;

            if (position.IsZero)
            {
                return(Vector2.Zero);
            }

            switch (unit.UnitType)
            {
            case UnitType.Creep:
            case UnitType.Courier:
            {
                return(position + new Vector2(creepX, creepY));
            }

            case UnitType.Tower:
            {
                return(position + new Vector2(towerX, towerY));
            }

            default:
            {
                return(position);
            }
            }
        }
예제 #3
0
        public override float GetBonusDamage(Hero hero, KillableUnit unit, IEnumerable <IPassiveAbility> abilities)
        {
            if (!CanDoDamage(hero, unit, abilities))
            {
                return(0);
            }

            return(Math.Min(Damage[Ability.Level - 1], unit.Mana) * multiplier);
        }
예제 #4
0
        public override float GetBonusDamage(Hero hero, KillableUnit unit, IEnumerable <IPassiveAbility> abilities)
        {
            if (!CanDoDamage(hero, unit, abilities))
            {
                return(0);
            }

            return(Damage[Level - 1]);
        }
예제 #5
0
        public override float GetBonusDamage(Hero hero, KillableUnit unit, IEnumerable <IPassiveAbility> abilities)
        {
            if (!CanDoDamage(hero, unit, abilities))
            {
                return(0);
            }

            return((float)(Damage[Level - 1] * Math.Pow(2, Math.Floor((1 - unit.HealthPercentage) / 0.2)) * reduction));
        }
예제 #6
0
        public override float GetBonusDamage(Hero hero, KillableUnit unit, IEnumerable <IPassiveAbility> abilities)
        {
            if (!CanDoDamage(hero, unit, abilities))
            {
                return(0);
            }

            return(hero.IsMelee ? meleeBonus : rangedBonus);
        }
예제 #7
0
        public override float GetBonusDamage(Hero hero, KillableUnit unit, IEnumerable <IPassiveAbility> abilities)
        {
            if (!CanDoDamage(hero, unit, abilities))
            {
                return(0);
            }

            return((unit.Modifiers.FirstOrDefault(x => x.Name == FurySwipesModifier)?.StackCount ?? 0) * Damage[Level - 1]);
        }
예제 #8
0
        public override float GetBonusDamage(Hero hero, KillableUnit unit, IEnumerable <IPassiveAbility> abilities)
        {
            if (!CanDoDamage(hero, unit, abilities))
            {
                return(0);
            }

            var minimumDamage = hero.MinimumDamage;

            return((hero.IsMelee ? minimumDamage * meleeBonus : minimumDamage *rangedBonus) - minimumDamage);
        }
예제 #9
0
        protected virtual bool CanDoDamage(Hero hero, KillableUnit unit, IEnumerable <IPassiveAbility> abilities)
        {
            if (!DealsDamageToAllies && unit.Team == hero.Team)
            {
                return(false);
            }

            if (!DealsDamageToTowers && unit.UnitType == UnitType.Tower)
            {
                return(false);
            }

            return(true);
        }
예제 #10
0
        protected virtual bool CanDoDamage(Hero hero, KillableUnit unit, IEnumerable <IPassiveAbility> abilities)
        {
            if (!DealsDamageToAllies && unit.Team == hero.Team)
            {
                return(false);
            }

            if (!DealsDamageToTowers && unit.UnitType == UnitType.Tower)
            {
                return(false);
            }

            return(!abilities.Any(x => DoesNotStackWith.Contains(x.AbilityId)));
        }
예제 #11
0
        public Vector2 GetHealthBarSize(KillableUnit unit)
        {
            switch (unit.UnitType)
            {
            case UnitType.Creep:
            {
                return(unit.HpBarSize + new Vector2(CreepSizeX, CreepSizeY));
            }

            case UnitType.Tower:
            {
                return(unit.HpBarSize + new Vector2(TowerSizeX, TowerSizeY));
            }

            default:
            {
                return(unit.HpBarSize);
            }
            }
        }
예제 #12
0
        public Vector2 GetHealthBarPosition(KillableUnit unit)
        {
            switch (unit.UnitType)
            {
            case UnitType.Creep:
            {
                return(unit.HpBarPosition + new Vector2(CreepX, CreepY));
            }

            case UnitType.Tower:
            {
                return(unit.HpBarPosition + new Vector2(TowerX, TowerY));
            }

            default:
            {
                return(unit.HpBarPosition);
            }
            }
        }
예제 #13
0
 public override bool IsValid(Hero hero, KillableUnit unit)
 {
     return(base.IsValid(hero, unit) && hero.Modifiers.Any(x => x.Name == ShadowWalkModifier));
 }
예제 #14
0
 public override bool IsValid(Hero hero, KillableUnit unit)
 {
     return(base.IsValid(hero, unit) && (DealsDamageToTowers || unit.UnitType != UnitType.Tower));
 }
예제 #15
0
파일: Jinada.cs 프로젝트: XXXHake/Ensage-1
 public override bool IsValid(Hero hero, KillableUnit unit)
 {
     return(base.IsValid(hero, unit) && Ability.CanBeCasted());
 }
예제 #16
0
 public float CalculateAverageDamageOn(KillableUnit unit)
 {
     return(unit.Unit.DamageTaken(Unit.DamageAverage, DamageType.Physical, Unit)
            * Damage.Multiplier(AttackDamageType.Siege, unit.ArmorType));
 }
예제 #17
0
 public virtual bool IsValid(Hero hero, KillableUnit unit)
 {
     return(Ability != null && Ability.IsValid && Ability.Level > 0 &&
            (!IsItem || hero.Inventory.Items.Any(x => x.Handle == Ability.Handle)));
 }
예제 #18
0
파일: MyHero.cs 프로젝트: senzdota/Ensage
 public IEnumerable <IActiveAbility> GetValidAbilities(KillableUnit unit)
 {
     return(abilities.OfType <IActiveAbility>().Where(x => x.IsValid(Hero, unit)));
 }
예제 #19
0
 public override float GetBonusDamage(Hero hero, KillableUnit unit, IEnumerable <IPassiveAbility> abilities)
 {
     // fix for quell damage stacking
     return(0);
 }
예제 #20
0
 public override bool IsValid(Hero hero, KillableUnit unit)
 {
     return(base.IsValid(hero, unit) && hero.HasModifier(JinguMasteryModifier));
 }
예제 #21
0
 public abstract float GetBonusDamage(Hero hero, KillableUnit unit, IEnumerable <IPassiveAbility> abilities);