Пример #1
0
        // Token: 0x060002DF RID: 735 RVA: 0x00011C48 File Offset: 0x0000FE48
        public override bool ShouldCast(TargetManager targetManager)
        {
            Unit9    target   = targetManager.Target;
            Modifier modifier = target.GetModifier(base.Debuff.DebuffModifierName);

            return((modifier == null || modifier.RemainingTime <= 2.5f) && !target.IsDarkPactProtected && !target.IsInvulnerable && !target.IsRooted && !target.IsStunned && !target.IsHexed && !targetManager.TargetSleeper.IsSleeping && (this.trap.IsFullyCharged || (base.Owner.Distance(target) > base.Ability.Radius * 0.6f && target.GetAngle(base.Owner.Position, false) > 2f)));
        }
Пример #2
0
        // Token: 0x06000831 RID: 2097 RVA: 0x000258F4 File Offset: 0x00023AF4
        public override bool UseAbility(TargetManager targetManager, Sleeper comboSleeper, bool aoe)
        {
            Unit9    target   = targetManager.Target;
            Modifier modifier = target.GetModifier("modifier_earth_spirit_magnetize");

            if (modifier == null || modifier.RemainingTime > 0.75f)
            {
                return(false);
            }
            List <Unit9> list = (from x in targetManager.EnemyHeroes
                                 where x.HasModifier("modifier_earth_spirit_magnetize")
                                 select x).ToList <Unit9>();
            PredictionInput9 predictionInput = base.Ability.GetPredictionInput(target, list);

            predictionInput.Radius        = 400f;
            predictionInput.AreaOfEffect  = true;
            predictionInput.SkillShotType = 4;
            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 + 0.1f);
            base.Sleeper.Sleep(1f);
            base.OrbwalkSleeper.Sleep(castDelay);
            return(true);
        }
        // Token: 0x0600071F RID: 1823 RVA: 0x00021D64 File Offset: 0x0001FF64
        protected virtual bool UseOrbAbility(Unit9 target, ComboModeMenu comboMenu)
        {
            if (!this.Owner.CanUseAbilities)
            {
                return(false);
            }
            OrbAbility orbAbility = this.Owner.Abilities.OfType <OrbAbility>().FirstOrDefault(delegate(OrbAbility x)
            {
                ComboModeMenu comboMenu2 = comboMenu;
                return(comboMenu2 != null && comboMenu2.IsAbilityEnabled(x) && !x.Enabled && x.CanBeCasted(true) && x.CanHit(target));
            });

            if (orbAbility != null)
            {
                if (string.IsNullOrEmpty(orbAbility.OrbModifier))
                {
                    return(orbAbility.UseAbility(target, false, false));
                }
                if ((double)Game.RawGameTime < (double)this.orbHitTime - 0.1)
                {
                    return(false);
                }
                Modifier modifier = target.GetModifier(orbAbility.OrbModifier);
                if (((modifier != null) ? modifier.RemainingTime : 0f) <= (this.Owner.GetAttackPoint(target) + this.Owner.Distance(target) / (float)this.Owner.ProjectileSpeed) * 2f + this.Owner.GetAttackBackswing(target))
                {
                    this.orbHitTime = Game.RawGameTime + orbAbility.GetHitTime(target);
                    return(orbAbility.UseAbility(target, false, false));
                }
            }
            return(false);
        }
        // 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);
        }
Пример #5
0
        // Token: 0x0600038E RID: 910 RVA: 0x00014510 File Offset: 0x00012710
        private bool UltCombo(TargetManager targetManager, AbilityHelper abilityHelper)
        {
            if (!abilityHelper.CanBeCasted(this.requiem, false, false, true, true))
            {
                return(false);
            }
            Unit9   target = targetManager.Target;
            Vector3 vector = target.Position;
            float   num    = base.Owner.Distance(vector);
            float   num2   = this.requiem.Ability.CastPoint + Game.Ping / 2000f;

            if (target.IsInvulnerable)
            {
                float invulnerabilityDuration = target.GetInvulnerabilityDuration();
                if (invulnerabilityDuration <= 0f)
                {
                    return(true);
                }
                Modifier modifier = target.GetModifier("modifier_eul_cyclone");
                if (modifier != null)
                {
                    ParticleEffect particleEffect = modifier.ParticleEffects.FirstOrDefault <ParticleEffect>();
                    if (particleEffect != null)
                    {
                        vector = particleEffect.GetControlPoint(0u);
                        num    = base.Owner.Distance(vector);
                    }
                }
                float num3 = invulnerabilityDuration - num2;
                if (num3 <= -0.3f)
                {
                    return(false);
                }
                if (num < 70f)
                {
                    if (abilityHelper.UseAbility(this.bkb, true))
                    {
                        return(true);
                    }
                    if (num3 <= 0f && abilityHelper.ForceUseAbility(this.requiem, false, true))
                    {
                        return(true);
                    }
                    if (!base.OrbwalkSleeper.IsSleeping)
                    {
                        base.OrbwalkSleeper.Sleep(0.1f);
                        base.Owner.BaseUnit.Move(vector);
                    }
                    return(true);
                }
                else if (num / base.Owner.Speed < num3 + 0.3f)
                {
                    if (abilityHelper.UseAbility(this.bkb, true))
                    {
                        return(true);
                    }
                    base.OrbwalkSleeper.Sleep(0.1f);
                    base.ComboSleeper.Sleep(0.1f);
                    return(base.Owner.BaseUnit.Move(vector));
                }
                else if (abilityHelper.CanBeCasted(this.blink, true, true, true, true) && this.blink.Ability.CastRange + base.Owner.Speed * num3 > num && abilityHelper.UseAbility(this.blink, vector))
                {
                    base.OrbwalkSleeper.Sleep(0.1f);
                    return(true);
                }
            }
            if (!abilityHelper.CanBeCasted(this.euls, false, false, true, true) || !this.euls.ShouldForceCast(targetManager) || target.IsMagicImmune)
            {
                return(false);
            }
            float num4 = this.euls.Ability.Duration - num2;

            if (abilityHelper.CanBeCasted(this.blink, true, true, true, true) && this.blink.Ability.CastRange + base.Owner.Speed * num4 > num && abilityHelper.UseAbility(this.blink, vector))
            {
                base.OrbwalkSleeper.Sleep(0.1f);
                base.ComboSleeper.ExtendSleep(0.1f);
                return(true);
            }
            if (num / base.Owner.Speed < num4)
            {
                if (abilityHelper.CanBeCasted(this.hex, true, true, true, true))
                {
                    bool flag = false;
                    foreach (ActiveAbility activeAbility in target.Abilities.OfType <ActiveAbility>())
                    {
                        if (activeAbility.IsValid && activeAbility.CastPoint <= 0f && activeAbility.CanBeCasted(false))
                        {
                            if (!base.Owner.IsMagicImmune || !abilityHelper.CanBeCasted(this.bkb, true, true, true, true))
                            {
                                if (activeAbility.Id == AbilityId.item_blade_mail)
                                {
                                    flag = true;
                                    break;
                                }
                                IDisable disable;
                                if ((disable = (activeAbility as IDisable)) != null && (disable.AppliesUnitState & (UnitState.Silenced | UnitState.Stunned | UnitState.Hexed)) != (UnitState)0UL)
                                {
                                    flag = true;
                                    break;
                                }
                            }
                            IShield shield;
                            if ((shield = (activeAbility as IShield)) != null && (shield.AppliesUnitState & (UnitState.Invulnerable | UnitState.MagicImmune)) != (UnitState)0UL)
                            {
                                flag = true;
                                break;
                            }
                            IBlink blink;
                            if ((blink = (activeAbility as IBlink)) != null && blink.Id != AbilityId.item_blink)
                            {
                                flag = true;
                                break;
                            }
                        }
                    }
                    if (flag && abilityHelper.ForceUseAbility(this.hex, false, true))
                    {
                        base.ComboSleeper.ExtendSleep(0.1f);
                        base.OrbwalkSleeper.ExtendSleep(0.1f);
                        return(true);
                    }
                }
                if (abilityHelper.UseAbility(this.veil, true))
                {
                    return(true);
                }
                if (abilityHelper.UseAbility(this.ethereal, true))
                {
                    base.OrbwalkSleeper.Sleep(0.5f);
                    return(true);
                }
                if (abilityHelper.ForceUseAbility(this.euls, false, true))
                {
                    return(true);
                }
            }
            return(false);
        }