Пример #1
0
        public override bool Orbwalk(Unit9 target, bool attack, bool move, ComboModeMenu comboMenu = null)
        {
            if (this.razeOrbwalk && this.abilityHelper != null && target != null && this.Owner.Speed >= 305 &&
                (target.IsRanged || target.GetImmobilityDuration() > 1))
            {
                var distance = this.Owner.Distance(target);

                foreach (var raze in this.razes.OrderBy(x => Math.Abs(x.Ability.CastRange - distance)))
                {
                    if (!this.abilityHelper.CanBeCasted(raze, false))
                    {
                        continue;
                    }

                    var position  = target.Position.Extend2D(this.Owner.Position, raze.Ability.CastRange - (raze.Ability.Radius - 100));
                    var distance2 = this.Owner.Distance(position);

                    if (target.GetAttackRange(this.Owner) >= distance2 || target.GetImmobilityDuration() > 1)
                    {
                        if (distance2 > 50)
                        {
                            return(this.Move(position));
                        }
                    }
                }
            }

            return(base.Orbwalk(target, attack, move, comboMenu));
        }
Пример #2
0
 // Token: 0x060008D7 RID: 2263 RVA: 0x00027C68 File Offset: 0x00025E68
 public override bool ShouldCast(Unit9 target)
 {
     if (base.Ability.UnitTargetCast && !target.IsVisible)
     {
         return(false);
     }
     if (target.HasModifier(this.Debuff.DebuffModifierName) && !(this.Debuff is INuke))
     {
         return(false);
     }
     if (base.Ability.BreaksLinkens && target.IsBlockingAbilities)
     {
         return(false);
     }
     if (target.IsDarkPactProtected)
     {
         return(false);
     }
     if (target.IsInvulnerable)
     {
         if (this.Debuff.UnitTargetCast)
         {
             return(false);
         }
         float immobilityDuration = target.GetImmobilityDuration();
         if (immobilityDuration <= 0f || immobilityDuration + 0.05f > this.Debuff.GetHitTime(target))
         {
             return(false);
         }
     }
     return(!target.IsRooted || base.Ability.UnitTargetCast || target.GetImmobilityDuration() > 0f);
 }
Пример #3
0
        public override bool ShouldCast(Unit9 target)
        {
            if (this.Ability.UnitTargetCast && !target.IsVisible)
            {
                return(false);
            }

            if (this.Ability.BreaksLinkens && target.IsBlockingAbilities)
            {
                return(false);
            }

            if (target.IsDarkPactProtected)
            {
                return(false);
            }

            if (target.IsInvulnerable)
            {
                if (this.Disable.UnitTargetCast)
                {
                    return(false);
                }

                var immobile = target.GetImmobilityDuration();
                if (immobile <= 0 || immobile + 0.05f > this.Disable.GetHitTime(target))
                {
                    return(false);
                }
            }

            if (target.IsStunned)
            {
                return(this.ChainStun(target));
            }

            if (target.IsHexed)
            {
                return((this.isAmplifier && !this.Disable.IsHex()) || this.ChainStun(target));
            }

            if (target.IsSilenced)
            {
                return(!this.Disable.IsSilence(false) || this.isAmplifier || this.ChainStun(target));
            }

            if (target.IsRooted && !this.Ability.UnitTargetCast && target.GetImmobilityDuration() <= 0)
            {
                return(false);
            }

            return(true);
        }
Пример #4
0
        public override bool ShouldCast(Unit9 target)
        {
            if (this.Ability.UnitTargetCast && !target.IsVisible)
            {
                return(false);
            }

            if (target.IsReflectingDamage)
            {
                return(false);
            }

            if (this.Ability.BreaksLinkens && target.IsBlockingAbilities)
            {
                return(false);
            }

            var damage = this.Nuke.GetDamage(target);

            if (damage <= 0)
            {
                return(false);
            }

            if ((target.IsStunned || target.IsHexed) && this.Ability is IDisable && damage < target.Health)
            {
                return(false);
            }

            if (target.IsInvulnerable)
            {
                if (this.Nuke.UnitTargetCast)
                {
                    return(false);
                }

                var immobile = target.GetImmobilityDuration();
                if (immobile <= 0 || immobile + 0.05f > this.Nuke.GetHitTime(target))
                {
                    return(false);
                }
            }

            if (target.IsRooted && !this.Ability.UnitTargetCast && target.GetImmobilityDuration() <= 0)
            {
                return(false);
            }

            return(true);
        }
Пример #5
0
        // Token: 0x06000445 RID: 1093 RVA: 0x00017400 File Offset: 0x00015600
        public override bool CanHit(TargetManager targetManager, IComboModeMenu comboMenu)
        {
            Unit9            target          = targetManager.Target;
            PredictionInput9 predictionInput = base.Ability.GetPredictionInput(target, null);

            if (base.Ability.GetPredictionOutput(predictionInput).HitChance <= 0)
            {
                return(false);
            }
            if (target.Distance(base.Owner) < 300f || target.GetImmobilityDuration() > 0f)
            {
                return(true);
            }
            if (!target.Equals(this.lastTarget))
            {
                this.lastTarget   = target;
                this.rotationTime = Game.RawGameTime;
                this.rotation     = target.BaseUnit.NetworkRotationRad;
                return(false);
            }
            if ((double)Math.Abs(this.rotation - target.BaseUnit.NetworkRotationRad) > 0.1)
            {
                this.rotationTime = Game.RawGameTime;
                this.rotation     = target.BaseUnit.NetworkRotationRad;
                return(false);
            }
            MeatHookMenu abilitySettingsMenu = comboMenu.GetAbilitySettingsMenu <MeatHookMenu>(this);

            return(this.rotationTime + abilitySettingsMenu.Delay / 1000f <= Game.RawGameTime);
        }
Пример #6
0
        // Token: 0x06000A40 RID: 2624 RVA: 0x0002C89C File Offset: 0x0002AA9C
        public override bool ShouldCast(TargetManager targetManager)
        {
            Unit9 target = targetManager.Target;

            if (base.Ability.UnitTargetCast && !target.IsVisible)
            {
                return(false);
            }
            if (target.IsReflectingDamage)
            {
                return(false);
            }
            if (base.Ability.BreaksLinkens && target.IsBlockingAbilities)
            {
                return(false);
            }
            if (base.Ability.GetDamage(target) <= 0 && !target.HasModifier(this.breakShields))
            {
                return(false);
            }
            if (target.IsInvulnerable)
            {
                if (base.Ability.UnitTargetCast)
                {
                    return(false);
                }
                if (!this.ChainStun(target, true))
                {
                    return(false);
                }
            }
            return(!target.IsRooted || base.Ability.UnitTargetCast || target.GetImmobilityDuration() > 0f);
        }
Пример #7
0
        public override bool ShouldCast(Unit9 target)
        {
            if (this.isOrb)
            {
                return(false);
            }

            if (target.IsInvulnerable)
            {
                return(false);
            }

            if (target.IsRooted && !this.Ability.UnitTargetCast && target.GetImmobilityDuration() <= 0)
            {
                return(false);
            }

            if (this.Ability.BreaksLinkens && target.IsBlockingAbilities)
            {
                return(false);
            }

            if (this.Harass is ToggleAbility toggle && toggle.Enabled)
            {
                return(false);
            }

            return(true);
        }
Пример #8
0
        // Token: 0x06000A23 RID: 2595 RVA: 0x0002C088 File Offset: 0x0002A288
        public override bool ShouldCast(TargetManager targetManager)
        {
            Unit9 target = targetManager.Target;

            if (base.Ability.UnitTargetCast && !target.IsVisible)
            {
                return(false);
            }
            if (target.IsMagicImmune && !base.Ability.PiercesMagicImmunity(target))
            {
                return(false);
            }
            if (target.IsInvulnerable)
            {
                if (base.Ability.UnitTargetCast)
                {
                    return(false);
                }
                if (!this.ChainStun(target, true))
                {
                    return(false);
                }
            }
            return(!target.IsRooted || base.Ability.UnitTargetCast || target.GetImmobilityDuration() > 0f);
        }
 // Token: 0x060003CC RID: 972 RVA: 0x0001554C File Offset: 0x0001374C
 public override bool CanBeCasted(TargetManager targetManager, bool channelingCheck, IComboModeMenu comboMenu)
 {
     if (!base.CanBeCasted(targetManager, channelingCheck, comboMenu))
     {
         return(false);
     }
     if (comboMenu.GetAbilitySettingsMenu <TricksOfTheTradeMenu>(this).SmartUsage)
     {
         Unit9 target = targetManager.Target;
         if (base.Owner.HealthPercentage < 25f)
         {
             return(true);
         }
         if (target.GetImmobilityDuration() > 1.5f)
         {
             return(true);
         }
         if (!target.IsRanged && target.Distance(base.Owner) < 200f && target.HealthPercentage < 40f)
         {
             return(true);
         }
         int damage = base.Ability.GetDamage(target);
         if (Math.Floor((double)(base.Ability.Radius / target.Speed / this.tricks.AttackRate)) * (double)damage * 0.89999997615814209 < (double)target.Health)
         {
             return(false);
         }
     }
     return(true);
 }
Пример #10
0
        // Token: 0x06000173 RID: 371 RVA: 0x0000D3A8 File Offset: 0x0000B5A8
        public override bool ShouldCast(TargetManager targetManager)
        {
            Unit9 target = targetManager.Target;

            if (base.Ability.UnitTargetCast && !target.IsVisible)
            {
                return(false);
            }
            if (target.IsDarkPactProtected)
            {
                return(false);
            }
            if (target.IsInvulnerable)
            {
                return(false);
            }
            if (target.IsStunned)
            {
                return(this.ChainStun(target, false));
            }
            if (target.IsHexed)
            {
                return(this.ChainStun(target, false));
            }
            if (target.IsSilenced)
            {
                return(!AbilityExtensions.IsSilence(base.Disable, false) || this.ChainStun(target, false));
            }
            if (target.IsRooted)
            {
                return(!AbilityExtensions.IsRoot(base.Disable) || this.ChainStun(target, false));
            }
            return(!target.IsRooted || base.Ability.UnitTargetCast || target.GetImmobilityDuration() > 0f);
        }
        // Token: 0x06000305 RID: 773 RVA: 0x0001246C File Offset: 0x0001066C
        public override bool UseAbility(TargetManager targetManager, Sleeper comboSleeper, bool aoe)
        {
            Unit9   target    = targetManager.Target;
            Vector3 position  = target.Position;
            Vector3 position2 = base.Owner.Position;
            float   num       = base.Owner.Distance(target);

            if (num > this.menuMaxCastRange)
            {
                return(false);
            }
            Ability9         ability         = base.Owner.Abilities.FirstOrDefault((Ability9 x) => x.Id == AbilityId.storm_spirit_static_remnant);
            Ability9         ability2        = base.Owner.Abilities.FirstOrDefault((Ability9 x) => x.Id == AbilityId.storm_spirit_electric_vortex);
            float            attackRange     = base.Owner.GetAttackRange(target, 0f);
            bool             flag            = num < attackRange;
            float            maxCastRange    = this.ball.MaxCastRange;
            PredictionInput9 predictionInput = base.Ability.GetPredictionInput(targetManager.Target, null);

            predictionInput.CastRange = maxCastRange;
            predictionInput.Range     = maxCastRange;
            predictionInput.Radius    = 1f;
            predictionInput.Delay    += 0.3f;
            Vector3 castPosition = base.Ability.GetPredictionOutput(predictionInput).CastPosition;

            if (ability != null && ability.CanBeCasted(true) && num > 200f)
            {
                if (((target.GetImmobilityDuration() > 0.5f && !target.HasModifier("modifier_storm_spirit_electric_vortex_pull")) || !base.Owner.IsVisibleToEnemies) && (float)this.ball.GetRemainingMana(castPosition) > ability.ManaCost)
                {
                    return(this.UseAbility(targetManager, comboSleeper, castPosition));
                }
                if (ability2 != null && ability2.CanBeCasted(true) && (float)this.ball.GetRemainingMana(castPosition) > ability.ManaCost + ability2.ManaCost && target.GetAngle(position2, false) > 1.5f)
                {
                    return(this.UseAbility(targetManager, comboSleeper, castPosition));
                }
            }
            if (!flag)
            {
                Vector3 toPosition = Vector3Extensions.Extend2D(castPosition, position2, attackRange - 100f);
                return(this.UseAbility(targetManager, comboSleeper, toPosition));
            }
            if (!this.maxDamage || !base.Owner.CanAttack(target, 0f))
            {
                return(false);
            }
            if (target.IsRanged || target.GetAngle(base.Owner, false) > 1f)
            {
                Vector3 vector      = Vector3Extensions.Extend2D(castPosition, position2, attackRange - 50f);
                Vector3 vector2     = Vector3Extensions.Extend2D(position2, castPosition, 100f);
                Vector3 toPosition2 = (castPosition.Distance2D(vector, false) < castPosition.Distance2D(vector2, false)) ? vector : vector2;
                return(this.UseAbility(targetManager, comboSleeper, toPosition2));
            }
            if (!target.IsStunned && !target.IsDisarmed)
            {
                Vector3 vector3     = Vector3Extensions.Extend2D(position, position2, attackRange - 100f);
                Vector3 vector4     = Vector3Extensions.Extend2D(position, position2, 300f);
                Vector3 toPosition3 = (position2.Distance2D(vector3, false) < position2.Distance2D(vector4, false)) ? vector3 : vector4;
                return(this.UseAbility(targetManager, comboSleeper, toPosition3));
            }
            return(false);
        }
Пример #12
0
        public override bool ShouldCast(Unit9 target)
        {
            if (this.Ability.UnitTargetCast && !target.IsVisible)
            {
                return(false);
            }

            if (target.HasModifier(this.Debuff.DebuffModifierName) && !(this.Debuff is INuke))
            {
                return(false);
            }

            if (this.Ability.BreaksLinkens && target.IsBlockingAbilities)
            {
                return(false);
            }

            if (target.IsDarkPactProtected)
            {
                return(false);
            }

            if (target.IsInvulnerable)
            {
                if (this.Debuff.UnitTargetCast)
                {
                    return(false);
                }

                var immobile = target.GetImmobilityDuration();
                if (immobile <= 0 || immobile + 0.05f > this.Debuff.GetHitTime(target))
                {
                    return(false);
                }
            }

            if (target.IsRooted && !this.Ability.UnitTargetCast && target.GetImmobilityDuration() <= 0)
            {
                return(false);
            }

            return(true);
        }
Пример #13
0
        // Token: 0x060003E6 RID: 998 RVA: 0x00015B70 File Offset: 0x00013D70
        public override bool ShouldCast(TargetManager targetManager)
        {
            if (!base.ShouldCast(targetManager))
            {
                return(false);
            }
            Unit9 target = targetManager.Target;

            return(target.Distance(base.Owner) <= 400f || target.GetImmobilityDuration() >= 2f);
        }
        // Token: 0x06000A33 RID: 2611 RVA: 0x0002C550 File Offset: 0x0002A750
        public override bool ShouldCast(TargetManager targetManager)
        {
            Unit9 target    = targetManager.Target;
            bool  isVisible = target.IsVisible;

            if (base.Ability.UnitTargetCast && !isVisible)
            {
                return(false);
            }
            if (isVisible)
            {
                if (this.visibleSleeper.IsSleeping(target.Handle))
                {
                    return(false);
                }
                Modifier modifier = target.GetModifier(this.Debuff.DebuffModifierName);
                if (modifier != null)
                {
                    float num = modifier.RemainingTime - base.Ability.GetHitTime(target);
                    if (num > 0f)
                    {
                        this.debuffSleeper.Sleep(target.Handle, num);
                        return(false);
                    }
                }
            }
            else
            {
                this.visibleSleeper.Sleep(target.Handle, 0.1f);
                if (this.debuffSleeper.IsSleeping(target.Handle))
                {
                    return(false);
                }
            }
            if (base.Ability.BreaksLinkens && target.IsBlockingAbilities)
            {
                return(false);
            }
            if (target.IsDarkPactProtected)
            {
                return(false);
            }
            if (target.IsInvulnerable)
            {
                if (this.Debuff.UnitTargetCast)
                {
                    return(false);
                }
                if (!this.ChainStun(target, true))
                {
                    return(false);
                }
            }
            return(!target.IsRooted || base.Ability.UnitTargetCast || target.GetImmobilityDuration() > 0f);
        }
 // Token: 0x06000899 RID: 2201 RVA: 0x00026E64 File Offset: 0x00025064
 public override bool ShouldCast(Unit9 target)
 {
     if (!base.ShouldCast(target))
     {
         return(false);
     }
     if (target.IsStunned || target.IsRooted || target.IsHexed)
     {
         return(target.GetImmobilityDuration() > 0f);
     }
     return(target.HasModifier("modifier_skywrath_mage_concussive_shot_slow") || target.Speed < 250f);
 }
        // Token: 0x060008EB RID: 2283 RVA: 0x00028110 File Offset: 0x00026310
        protected virtual bool ChainStun(Unit9 target)
        {
            INuke nuke;

            if ((nuke = (this.Disable as INuke)) != null && (float)nuke.GetDamage(target) > target.Health)
            {
                return(true);
            }
            float immobilityDuration = target.GetImmobilityDuration();

            return(immobilityDuration > 0f && this.Disable.GetHitTime(target) + 0.05f > immobilityDuration);
        }
Пример #17
0
        private bool CheckEnemy(Unit9 enemy)
        {
            if (!this.settings.IsHeroEnabled(enemy.Name))
            {
                return(false);
            }

            if (enemy.IsReflectingDamage)
            {
                return(false);
            }

            if (this.settings.OnImmobileOnly)
            {
                var immobileDuration = enemy.GetImmobilityDuration();
                if (immobileDuration <= 0)
                {
                    return(false);
                }

                var time = this.Ability.GetHitTime(enemy.Position);
                if (time * 0.8f > immobileDuration)
                {
                    return(false);
                }

                if (enemy.IsInvulnerable && immobileDuration > time * 0.9f)
                {
                    return(false);
                }
            }
            else if (enemy.IsInvulnerable)
            {
                return(false);
            }

            if (!this.Ability.CanHit(enemy))
            {
                return(false);
            }

            if (enemy.Health > this.Nuke.GetDamage(enemy))
            {
                return(false);
            }

            if (this.Ability.UnitTargetCast && enemy.IsBlockingAbilities)
            {
                return(false);
            }

            return(true);
        }
 // Token: 0x060008E9 RID: 2281 RVA: 0x00028008 File Offset: 0x00026208
 public override bool ShouldCast(Unit9 target)
 {
     if (base.Ability.UnitTargetCast && !target.IsVisible)
     {
         return(false);
     }
     if (base.Ability.BreaksLinkens && target.IsBlockingAbilities)
     {
         return(false);
     }
     if (target.IsDarkPactProtected)
     {
         return(false);
     }
     if (target.IsInvulnerable)
     {
         if (this.Disable.UnitTargetCast)
         {
             return(false);
         }
         float immobilityDuration = target.GetImmobilityDuration();
         if (immobilityDuration <= 0f || immobilityDuration + 0.05f > this.Disable.GetHitTime(target))
         {
             return(false);
         }
     }
     if (target.IsStunned)
     {
         return(this.ChainStun(target));
     }
     if (target.IsHexed)
     {
         return((this.isAmplifier && !AbilityExtensions.IsHex(this.Disable)) || this.ChainStun(target));
     }
     if (target.IsSilenced)
     {
         return(!AbilityExtensions.IsSilence(this.Disable, false) || this.isAmplifier || this.ChainStun(target));
     }
     return(!target.IsRooted || base.Ability.UnitTargetCast || target.GetImmobilityDuration() > 0f);
 }
Пример #19
0
        // Token: 0x06000888 RID: 2184 RVA: 0x00026A54 File Offset: 0x00024C54
        public override bool ShouldCast(Unit9 target)
        {
            if (base.Ability.UnitTargetCast && !target.IsVisible)
            {
                return(false);
            }
            if (target.IsReflectingDamage)
            {
                return(false);
            }
            if (base.Ability.BreaksLinkens && target.IsBlockingAbilities)
            {
                return(false);
            }
            int damage = this.Nuke.GetDamage(target);

            if (damage <= 0)
            {
                return(false);
            }
            if ((target.IsStunned || target.IsHexed) && base.Ability is IDisable && (float)damage < target.Health)
            {
                return(false);
            }
            if (target.IsInvulnerable)
            {
                if (this.Nuke.UnitTargetCast)
                {
                    return(false);
                }
                float immobilityDuration = target.GetImmobilityDuration();
                if (immobilityDuration <= 0f || immobilityDuration + 0.05f > this.Nuke.GetHitTime(target))
                {
                    return(false);
                }
            }
            return(!target.IsRooted || base.Ability.UnitTargetCast || target.GetImmobilityDuration() > 0f);
        }
Пример #20
0
        public override bool ShouldCast(Unit9 target)
        {
            if (!base.ShouldCast(target))
            {
                return(false);
            }

            if (target.GetImmobilityDuration() < 1f)
            {
                return(false);
            }

            return(true);
        }
Пример #21
0
        // Token: 0x06000A2E RID: 2606 RVA: 0x0002C30C File Offset: 0x0002A50C
        public override bool ShouldCast(TargetManager targetManager)
        {
            Unit9 target = targetManager.Target;

            if (base.Ability.UnitTargetCast && !target.IsVisible)
            {
                return(false);
            }
            if (base.Ability.BreaksLinkens && target.IsBlockingAbilities)
            {
                return(false);
            }
            if (target.IsDarkPactProtected)
            {
                return(false);
            }
            if (target.IsInvulnerable)
            {
                if (this.Disable.UnitTargetCast)
                {
                    return(false);
                }
                if (!this.ChainStun(target, true))
                {
                    return(false);
                }
            }
            if ((float)base.Ability.GetDamage(target) < target.Health)
            {
                if (target.IsStunned)
                {
                    return(this.ChainStun(target, false));
                }
                if (target.IsHexed)
                {
                    return(this.ChainStun(target, false));
                }
                if (target.IsSilenced)
                {
                    return(!AbilityExtensions.IsSilence(this.Disable, false) || this.ChainStun(target, false));
                }
                if (target.IsRooted)
                {
                    return(!AbilityExtensions.IsRoot(this.Disable) || this.ChainStun(target, false));
                }
            }
            return(!target.IsRooted || base.Ability.UnitTargetCast || target.GetImmobilityDuration() > 0f);
        }
Пример #22
0
        protected virtual bool ChainStun(Unit9 target)
        {
            if (this.Disable is INuke nuke && nuke.GetDamage(target) > target.Health)
            {
                return(true);
            }

            var immobile = target.GetImmobilityDuration();

            if (immobile <= 0)
            {
                return(false);
            }

            return(this.Disable.GetHitTime(target) + 0.05f > immobile);
        }
Пример #23
0
        // Token: 0x060009DB RID: 2523 RVA: 0x0002ADA4 File Offset: 0x00028FA4
        protected override bool ChainStun(Unit9 target, bool invulnerability)
        {
            float num = invulnerability ? target.GetInvulnerabilityDuration() : target.GetImmobilityDuration();

            if (num <= 0f)
            {
                return(false);
            }
            float num2 = base.Ability.GetHitTime(target) + this.iceBlast.GetReleaseFlyTime(target.Position);

            if (target.IsInvulnerable)
            {
                num2 -= 0.1f;
            }
            return(num2 > num);
        }
Пример #24
0
        // Token: 0x06000A60 RID: 2656 RVA: 0x0002CB78 File Offset: 0x0002AD78
        protected virtual bool ChainStun(Unit9 target, bool invulnerability)
        {
            float num = invulnerability ? target.GetInvulnerabilityDuration() : target.GetImmobilityDuration();

            if (num <= 0f)
            {
                return(false);
            }
            float num2 = this.Ability.GetHitTime(target);

            if (target.IsInvulnerable)
            {
                num2 -= 0.1f;
            }
            return(num2 > num);
        }
Пример #25
0
        protected override bool ChainStun(Unit9 target, bool invulnerability)
        {
            var immobile = invulnerability ? target.GetInvulnerabilityDuration() : target.GetImmobilityDuration();

            if (immobile <= 0)
            {
                return(false);
            }

            var hitTime = this.Ability.GetHitTime(target) + 0.5f;

            if (target.IsInvulnerable)
            {
                hitTime -= 0.1f;
            }

            return(hitTime > immobile);
        }
Пример #26
0
        public bool CanHit(Unit9 target, IComboModeMenu comboMenu)
        {
            if (comboMenu?.IsAbilityEnabled(this.Ability) != false)
            {
                return(false);
            }

            if (!this.Ability.CanBeCasted())
            {
                return(false);
            }

            if (!this.Ability.CanHit(target))
            {
                return(false);
            }

            if (target.IsReflectingDamage)
            {
                return(false);
            }

            var damage = this.Ability.GetDamage(target);

            if (damage <= 0)
            {
                return(false);
            }

            if (target.IsInvulnerable)
            {
                if (!this.ChainStun(target, true))
                {
                    return(false);
                }
            }

            if (target.IsRooted && !this.Ability.UnitTargetCast && target.GetImmobilityDuration() <= 0)
            {
                return(false);
            }

            return(true);
        }
Пример #27
0
        // Token: 0x060005BE RID: 1470 RVA: 0x0001CC0C File Offset: 0x0001AE0C
        public override bool ShouldConditionCast(TargetManager targetManager, IComboModeMenu menu, List <UsableAbility> usableAbilities)
        {
            Unit9 target             = targetManager.Target;
            float immobilityDuration = target.GetImmobilityDuration();

            if (immobilityDuration > 0f)
            {
                UsableAbility usableAbility = usableAbilities.Find((UsableAbility x) => x.Ability.Id == AbilityId.leshrac_split_earth);
                if (usableAbility == null)
                {
                    return(true);
                }
                if (immobilityDuration < usableAbility.Ability.GetHitTime(target) + base.Ability.GetHitTime(target))
                {
                    return(false);
                }
            }
            return(true);
        }
Пример #28
0
        // Token: 0x06000656 RID: 1622 RVA: 0x0001ED0C File Offset: 0x0001CF0C
        public override bool Combo(TargetManager targetManager, ComboModeMenu comboModeMenu)
        {
            AbilityHelper abilityHelper = new AbilityHelper(targetManager, comboModeMenu, this);

            if (abilityHelper.UseAbility(this.force, 550f, 400f))
            {
                return(true);
            }
            if (abilityHelper.UseAbilityIfAny(this.euls, new UsableAbility[]
            {
                this.stomp,
                this.hammer
            }))
            {
                return(true);
            }
            if (abilityHelper.UseAbility(this.atos, true))
            {
                return(true);
            }
            if (abilityHelper.UseAbility(this.spirit, true))
            {
                return(true);
            }
            if (abilityHelper.UseAbilityIfNone(this.stomp, new UsableAbility[]
            {
                this.euls
            }))
            {
                return(true);
            }
            if (abilityHelper.CanBeCasted(this.hammer, false, false, true, true))
            {
                Unit9 target = targetManager.Target;
                if (target.GetImmobilityDuration() > this.hammer.Ability.GetHitTime(target) - 0.5f && abilityHelper.UseAbility(this.hammer, true))
                {
                    return(true);
                }
            }
            return(!abilityHelper.CanBeCasted(this.euls, true, true, true, true) && !abilityHelper.CanBeCasted(this.stomp, false, false, true, true) && abilityHelper.UseAbilityIfNone(this.splitter, new UsableAbility[0]));
        }
Пример #29
0
        // Token: 0x06000377 RID: 887 RVA: 0x00013C48 File Offset: 0x00011E48
        public override bool ShouldCast(TargetManager targetManager)
        {
            if (!base.ShouldCast(targetManager))
            {
                return(false);
            }
            Unit9 target = targetManager.Target;

            if (target.Speed <= 200f)
            {
                return(true);
            }
            if (target.GetImmobilityDuration() < 0.3f)
            {
                float num = base.Ability.Radius / target.Speed + 0.3f;
                if ((float)base.Ability.GetDamage(target) * num < target.Health)
                {
                    return(false);
                }
            }
            return(true);
        }
Пример #30
0
        // Token: 0x06000378 RID: 888 RVA: 0x00013CB8 File Offset: 0x00011EB8
        public override bool UseAbility(TargetManager targetManager, Sleeper comboSleeper, bool aoe)
        {
            Unit9 target = targetManager.Target;

            if (base.Owner.HasAghanimsScepter && (target.GetImmobilityDuration() > 0f || !target.IsMoving) && !targetManager.EnemyHeroes.Any((Unit9 x) => !x.Equals(target) && x.Distance(target) < 900f))
            {
                Vector3 vector = target.InFront(base.Ability.Radius + (float)(target.IsMoving ? 30 : 10), 0f, true);
                if (base.Owner.Distance(vector) > base.Ability.CastRange)
                {
                    return(false);
                }
                if (!base.Ability.UseAbility(vector, false, false))
                {
                    return(false);
                }
            }
            else
            {
                PredictionInput9 predictionInput = base.Ability.GetPredictionInput(target, null);
                predictionInput.Delay += 0.3f;
                PredictionOutput9 predictionOutput = base.Ability.GetPredictionOutput(predictionInput);
                if (predictionOutput.HitChance < 1)
                {
                    return(false);
                }
                if (!base.Ability.UseAbility(predictionOutput.CastPosition, false, false))
                {
                    return(false);
                }
            }
            float castDelay = base.Ability.GetCastDelay(targetManager.Target);

            comboSleeper.Sleep(castDelay);
            base.Sleeper.Sleep(castDelay + 0.5f);
            base.OrbwalkSleeper.Sleep(castDelay);
            return(true);
        }