Example #1
0
        /// <summary>
        /// Razers Extensions
        /// </summary>
        /// <param name="ability"></param>
        /// <param name="target"></param>
        /// <param name="usePrediction"></param>
        /// <param name="checkForFace"></param>
        /// <returns></returns>
        public static bool CanHit(this Ability ability, Hero target, bool usePrediction = false, bool checkForFace = true)
        {
            var aId = ability.GetAbilityId();

            if (aId >= AbilityId.nevermore_shadowraze1 && aId <= AbilityId.nevermore_shadowraze3)
            {
                var radius = ability.GetRadius();
                var range  = ability.GetCastRange();
                if (checkForFace)
                {
                    var predFontPos = Prediction.InFront(Core.Me, range);
                    var pred        = ability.GetPrediction(target);
                    //var inRange = (usePrediction ? pred.Distance2D(predFontPos) : target.Distance2D(predFontPos)) <= radius + target.HullRadius;
                    var inRange = target.Distance2D(predFontPos) <= radius + target.HullRadius;

                    return(inRange);
                }
                else
                {
                    var dist    = target.Distance2D(Core.Me);
                    var inRange = dist <= range + target.HullRadius + radius &&
                                  dist >= range - target.HullRadius - radius;
                    return(inRange);
                }
            }
            return(AbilityExtensions.CanHit(ability, target));
        }
        // 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);
        }
Example #3
0
        /// <summary>
        /// with custom delay
        /// </summary>
        /// <param name="ability"></param>
        /// <param name="target"></param>
        /// <param name="customDelay"></param>
        /// <returns></returns>
        public static bool CanHit(this Ability ability, Hero target, float customDelay, bool checkForFace = true)
        {
            var aId = ability.GetAbilityId();

            if (aId >= AbilityId.nevermore_shadowraze1 && aId <= AbilityId.nevermore_shadowraze3)
            {
                if (checkForFace)
                {
                    var radius      = ability.GetRadius();
                    var range       = ability.GetCastRange();
                    var predFontPos = Prediction.InFront(Core.Me, range);
                    var pred        = Prediction.PredictedXYZ(target, customDelay);
                    //var inRange = (usePrediction ? pred.Distance2D(predFontPos) : Target.Distance2D(predFontPos)) <= radius + Target.HullRadius;
                    var inRange = pred.Distance2D(predFontPos) <= radius + target.HullRadius;

                    return(inRange);
                }
                else
                {
                    var radius  = ability.GetRadius();
                    var range   = ability.GetCastRange();
                    var pred    = Prediction.PredictedXYZ(target, customDelay);
                    var dist    = pred.Distance2D(Core.Me);
                    var inRange = dist <= (range + radius + target.HullRadius) && dist >= (range - radius - target.HullRadius);

                    return(inRange);
                }
            }
            return(AbilityExtensions.CanHit(ability, target));
        }
Example #4
0
 /// <summary>
 ///     The load.
 /// </summary>
 private static void Load()
 {
     AbilityDatabase.Init();
     AbilityDamage.Init();
     AbilityExtensions.Init();
     HeroExtensions.Init();
     UnitExtensions.Init();
     Names.Init();
     Abilities.Init();
 }
Example #5
0
 // Token: 0x060008F4 RID: 2292 RVA: 0x000283BC File Offset: 0x000265BC
 public bool UseInstantDisable(Unit9 target, ComboModeMenu menu)
 {
     foreach (OldDisableAbility oldDisableAbility in base.Abilities)
     {
         if (oldDisableAbility.Ability.IsValid && !AbilityExtensions.IsDisarm(oldDisableAbility.Disable, true) && oldDisableAbility.Ability.CastPoint <= 0.1f && oldDisableAbility.CanBeCasted(target, menu, true) && oldDisableAbility.Use(target))
         {
             return(true);
         }
     }
     return(false);
 }
Example #6
0
 /// <summary>
 ///     The load.
 /// </summary>
 private static void Init()
 {
     AbilityDatabase.Init();
     AbilityDamage.Init();
     AbilityExtensions.Init();
     HeroExtensions.Init();
     UnitExtensions.Init();
     Names.Init();
     Abilities.Init();
     Calculations.Init();
     EntityExtensions.Init();
     Utils.Sleeps = new Dictionary <string, double>();
     NotifiedSubscribers.Clear();
 }
Example #7
0
 /// <summary>
 ///     The load.
 /// </summary>
 private static void Load()
 {
     AbilityDatabase.Init();
     AbilityDamage.Init();
     AbilityExtensions.Init();
     HeroExtensions.Init();
     UnitExtensions.Init();
     Names.Init();
     Abilities.Init();
     Calculations.Init();
     EntityExtensions.Init();
     Orbwalking.Events_OnLoad(null, null);
     Utils.Sleeps = new Dictionary <string, double>();
 }
Example #8
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);
        }
Example #9
0
        /// <summary>
        /// with custom delay
        /// </summary>
        /// <param name="ability"></param>
        /// <param name="target"></param>
        /// <param name="customDelay"></param>
        /// <returns></returns>
        public static bool CanHit(this Ability ability, Hero target, float customDelay)
        {
            var aId = ability.GetAbilityId();

            if (aId >= AbilityId.nevermore_shadowraze1 && aId <= AbilityId.nevermore_shadowraze3)
            {
                var radius      = ability.GetRadius();
                var range       = ability.GetCastRange();
                var predFontPos = Prediction.InFront(Core.Me, range);
                var pred        = Prediction.PredictedXYZ(target, customDelay);
                //var inRange = (usePrediction ? pred.Distance2D(predFontPos) : target.Distance2D(predFontPos)) <= radius + target.HullRadius;
                var inRange = pred.Distance2D(predFontPos) <= radius + target.HullRadius;

                return(inRange);
            }
            return(AbilityExtensions.CanHit(ability, target));
        }
Example #10
0
    void Start()
    {
        this.gameData = GameObject.FindGameObjectWithTag("GameData").GetComponent <GameData>();
        int i = 0;

        foreach (KeyValuePair <Ability, float> entry in gameData.abilityTimers)
        {
            AbilityButton abilityButton = new AbilityButton();
            abilityButton.button = Instantiate(UIButtonPrefab, this.gameObject.transform);
            var abilityImage = abilityButton.button.GetComponent <Image>();
            abilityImage.color  = new Color(255, 255, 255, 0);
            abilityImage.sprite = (Sprite)AssetDatabase.LoadAssetAtPath(AbilityExtensions.GetImagePath(entry.Key), typeof(Sprite));
            abilityImage.transform.localScale = new Vector3(0f, 0f, 0f);
            abilityButton.button.GetComponent <RectTransform>().localPosition = new Vector3(0, TOP_OFFSET, 0);

            abilityButton.abilityState = AbilityState.EXITED;
            abilityButton.ability      = entry.Key;
            activeAbilities[i]         = abilityButton;
            i++;
        }
    }
 // 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);
 }
Example #12
0
        private async Task OnUpdate(CancellationToken token)
        {
            if (Game.IsPaused || !this.Config.General.ComboKey.Value.Active)
            {
                await Task.Delay(250, token);

                return;
            }

            if (!this.Config.General.Enabled)
            {
                return;
            }

            foreach (var unit in this.Updater.AllUnits)
            {
                if (unit.Unit != BodyBlockerUnit && this.Config.Hero.ControlUnits && unit.Unit.Name != "npc_dota_templar_assassin_psionic_trap")
                {
                    if (this.ComboMode.CurrentTarget == null || UnitExtensions.IsInvul(this.ComboMode.CurrentTarget) ||
                        this.ComboMode.CurrentTarget.IsAttackImmune())
                    {
                        Player.AttackEntity(unit.Unit, (Unit)null);
                        //unit.UnitMovementManager.Orbwalk(null);
                    }
                    else
                    {
                        Player.AttackEntity(unit.Unit, this.ComboMode.CurrentTarget);
                        //unit.UnitMovementManager.Orbwalk(this.ComboMode.CurrentTarget);
                    }
                }

                var ability1 = unit.Ability;
                var ability2 = unit.Ability2;
                var ability3 = unit.Ability3;
                var ability4 = unit.Ability4;

                if (this.ComboMode.CurrentTarget != null && this.Config.Hero.UseUnitAbilities &&
                    !UnitExtensions.IsInvul(this.ComboMode.CurrentTarget) && !this.ComboMode.CurrentTarget.IsAttackImmune() && !this.ComboMode.CurrentTarget.IsMagicImmune() &&
                    (ability1 != null && AbilityExtensions.CanBeCasted(ability1) ||
                     ability2 != null && AbilityExtensions.CanBeCasted(ability2) ||
                     ability3 != null && AbilityExtensions.CanBeCasted(ability3) ||
                     ability4 != null && AbilityExtensions.CanBeCasted(ability4)))
                {
                    if (ability1 != null &&
                        AbilityExtensions.CanBeCasted(ability1) &&
                        UnitCastingChecks(ability1.Name, unit.Unit, this.ComboMode.CurrentTarget, ability1) &&
                        (ability1.TargetTeamType == TargetTeamType.Enemy ||
                         ability1.TargetTeamType == TargetTeamType.None) &&
                        (unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityCastRange(unit.Unit, ability1) ||
                         unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityRadius(unit.Unit, ability1) - 70))
                    {
                        if (ability1.AbilityBehavior.HasFlag(AbilityBehavior.NoTarget))
                        {
                            if (ability1.UseAbility())
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability1.AbilityBehavior.HasFlag(AbilityBehavior.UnitTarget))
                        {
                            if (ability1.UseAbility(this.ComboMode.CurrentTarget))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability1.AbilityBehavior.HasFlag(AbilityBehavior.Point))
                        {
                            if (ability1.UseAbility(this.ComboMode.CurrentTarget.Position))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                    }
                    else if (ability1 != null &&
                             AbilityExtensions.CanBeCasted(ability1) &&
                             ability1.TargetTeamType == TargetTeamType.Allied &&
                             unit.Unit.Distance2D(this.Owner) <= Extensions.GetAbilityCastRange(unit.Unit, ability1))
                    {
                        if (ability1.UseAbility(this.Owner))
                        {
                            await Task.Delay(180, token);
                        }
                    }

                    if (ability2 != null &&
                        AbilityExtensions.CanBeCasted(ability2) &&
                        UnitCastingChecks(ability2.Name, unit.Unit, this.ComboMode.CurrentTarget, ability2) &&
                        AbilityExtensions.CanHit(ability2, this.ComboMode.CurrentTarget) &&
                        (ability2.TargetTeamType == TargetTeamType.Enemy ||
                         ability2.TargetTeamType == TargetTeamType.None) &&
                        (unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityCastRange(unit.Unit, ability2) ||
                         unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityRadius(unit.Unit, ability2) - 70))
                    {
                        if (ability2.AbilityBehavior.HasFlag(AbilityBehavior.NoTarget))
                        {
                            if (ability2.UseAbility())
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability2.AbilityBehavior.HasFlag(AbilityBehavior.UnitTarget))
                        {
                            if (ability2.UseAbility(this.ComboMode.CurrentTarget))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability2.AbilityBehavior.HasFlag(AbilityBehavior.Point))
                        {
                            if (ability2.UseAbility(this.ComboMode.CurrentTarget.Position))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                    }
                    else if (ability2 != null &&
                             AbilityExtensions.CanBeCasted(ability2) &&
                             ability2.TargetTeamType == TargetTeamType.Allied &&
                             unit.Unit.Distance2D(this.Owner) <= Extensions.GetAbilityCastRange(unit.Unit, ability2))
                    {
                        if (ability2.UseAbility(this.Owner))
                        {
                            await Task.Delay(180, token);
                        }
                    }

                    if (ability3 != null &&
                        AbilityExtensions.CanBeCasted(ability3) &&
                        UnitCastingChecks(ability3.Name, unit.Unit, this.ComboMode.CurrentTarget, ability3) &&
                        AbilityExtensions.CanHit(ability3, this.ComboMode.CurrentTarget) &&
                        (ability3.TargetTeamType == TargetTeamType.Enemy ||
                         ability3.TargetTeamType == TargetTeamType.None) &&
                        (unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityCastRange(unit.Unit, ability3) ||
                         unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityRadius(unit.Unit, ability3) - 70))
                    {
                        if (ability3.AbilityBehavior.HasFlag(AbilityBehavior.NoTarget))
                        {
                            if (ability3.UseAbility())
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability3.AbilityBehavior.HasFlag(AbilityBehavior.UnitTarget))
                        {
                            if (ability3.UseAbility(this.ComboMode.CurrentTarget))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability3.AbilityBehavior.HasFlag(AbilityBehavior.Point))
                        {
                            if (ability3.UseAbility(this.ComboMode.CurrentTarget.Position))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                    }
                    else if (ability3 != null &&
                             AbilityExtensions.CanBeCasted(ability3) &&
                             ability3.TargetTeamType == TargetTeamType.Allied &&
                             unit.Unit.Distance2D(this.Owner) <= Extensions.GetAbilityCastRange(unit.Unit, ability3))
                    {
                        if (ability3.UseAbility(this.Owner))
                        {
                            await Task.Delay(180, token);
                        }
                    }

                    if (ability4 != null &&
                        AbilityExtensions.CanBeCasted(ability4) &&
                        UnitCastingChecks(ability4.Name, unit.Unit, this.ComboMode.CurrentTarget, ability4) &&
                        AbilityExtensions.CanHit(ability4, this.ComboMode.CurrentTarget) &&
                        (ability4.TargetTeamType == TargetTeamType.Enemy ||
                         ability4.TargetTeamType == TargetTeamType.None) &&
                        (unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityCastRange(unit.Unit, ability4) ||
                         unit.Unit.Distance2D(this.ComboMode.CurrentTarget) <= Extensions.GetAbilityRadius(unit.Unit, ability4) - 70))
                    {
                        if (ability4.AbilityBehavior.HasFlag(AbilityBehavior.NoTarget))
                        {
                            if (ability4.UseAbility())
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability4.AbilityBehavior.HasFlag(AbilityBehavior.UnitTarget))
                        {
                            if (ability4.UseAbility(this.ComboMode.CurrentTarget))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                        else if (ability4.AbilityBehavior.HasFlag(AbilityBehavior.Point))
                        {
                            if (ability4.UseAbility(this.ComboMode.CurrentTarget.Position))
                            {
                                await Task.Delay(180, token);
                            }
                        }
                    }
                    else if (ability4 != null &&
                             AbilityExtensions.CanBeCasted(ability4) &&
                             ability4.TargetTeamType == TargetTeamType.Allied &&
                             unit.Unit.Distance2D(this.Owner) <= Extensions.GetAbilityCastRange(unit.Unit, ability4))
                    {
                        if (ability4.UseAbility(this.Owner))
                        {
                            await Task.Delay(180, token);
                        }
                    }
                }
            }

            await Task.Delay(100, token);
        }
Example #13
0
 // Token: 0x06000113 RID: 275 RVA: 0x0000BB14 File Offset: 0x00009D14
 private void OnAbilityAdded(Ability9 ability)
 {
     try
     {
         if (ability.IsControllable && ability.Owner.CanUseAbilities && ability.Owner.IsAlly(base.Owner))
         {
             ActiveAbility activeAbility;
             if (!this.ignoredAmplifiers.Contains(ability.Id) && (activeAbility = (ability as ActiveAbility)) != null)
             {
                 IHasDamageAmplify hasDamageAmplify;
                 if ((hasDamageAmplify = (ability as IHasDamageAmplify)) != null && ((AbilityExtensions.IsIncomingDamageAmplifier(hasDamageAmplify) && activeAbility.TargetsEnemy) || (AbilityExtensions.IsOutgoingDamageAmplifier(hasDamageAmplify) && activeAbility.TargetsAlly)))
                 {
                     this.AddAbility(activeAbility);
                     this.KillStealMenu.AddKillStealAbility(activeAbility);
                 }
                 else if (ability is INuke)
                 {
                     this.AddAbility(activeAbility);
                     this.KillStealMenu.AddKillStealAbility(activeAbility);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Logger.Error(ex, null);
     }
 }
Example #14
0
        // Token: 0x06000111 RID: 273 RVA: 0x0000B7C0 File Offset: 0x000099C0
        private void Kill(Unit9 target, IReadOnlyList <KillStealAbility> abilities)
        {
            if (this.KillStealSleeper.IsSleeping)
            {
                return;
            }
            Func <KillStealAbility, int> < > 9__0;
            Func <KillStealAbility, int> keySelector;

            if ((keySelector = < > 9__0) == null)
            {
                keySelector = (< > 9__0 = ((KillStealAbility x) => x.Ability.GetDamage(target)));
            }
            foreach (KillStealAbility killStealAbility in abilities.OrderBy(keySelector))
            {
                float hitTime = killStealAbility.Ability.GetHitTime(target);
                if (target.Health + target.HealthRegeneration * hitTime * 1.5f <= (float)killStealAbility.Ability.GetDamage(target) && killStealAbility.Ability.UseAbility(target, EntityManager9.EnemyHeroes, 2, 0, false, false))
                {
                    float castDelay = killStealAbility.Ability.GetCastDelay(target);
                    this.AbilitySleeper.Sleep(killStealAbility.Ability.Handle, hitTime);
                    this.orbwalkSleeper.Sleep(killStealAbility.Ability.Owner.Handle, castDelay);
                    this.KillStealSleeper.Sleep(hitTime - killStealAbility.Ability.ActivationDelay);
                    return;
                }
            }
            for (int i = 0; i < abilities.Count; i++)
            {
                KillStealAbility killStealAbility2 = abilities[i];
                if (this.orbwalkSleeper.IsSleeping(killStealAbility2.Ability.Owner.Handle))
                {
                    return;
                }
                if (killStealAbility2.Ability.CanBeCasted(true))
                {
                    IHasDamageAmplify hasDamageAmplify = killStealAbility2.Ability as IHasDamageAmplify;
                    bool flag = hasDamageAmplify != null && AbilityExtensions.IsIncomingDamageAmplifier(hasDamageAmplify) && target.HasModifier(hasDamageAmplify.AmplifierModifierName);
                    if (!flag || killStealAbility2.Ability is INuke)
                    {
                        if (!killStealAbility2.Ability.UseAbility(target, EntityManager9.EnemyHeroes, 2, 0, false, false))
                        {
                            return;
                        }
                        float num;
                        if (!flag)
                        {
                            KillStealAbility killStealAbility3 = (i < abilities.Count - 1) ? abilities[i + 1] : null;
                            if (killStealAbility3 != null)
                            {
                                float hitTime2 = killStealAbility3.Ability.GetHitTime(target);
                                num = killStealAbility2.Ability.GetHitTime(target) - hitTime2;
                            }
                            else
                            {
                                num = killStealAbility2.Ability.GetHitTime(target);
                            }
                        }
                        else
                        {
                            num = killStealAbility2.Ability.GetCastDelay(target);
                        }
                        this.AbilitySleeper.Sleep(killStealAbility2.Ability.Handle, killStealAbility2.Ability.GetHitTime(target));
                        this.orbwalkSleeper.Sleep(killStealAbility2.Ability.Owner.Handle, killStealAbility2.Ability.GetCastDelay(target));
                        this.KillStealSleeper.Sleep(num - killStealAbility2.Ability.ActivationDelay);
                        return;
                    }
                }
            }
        }
Example #15
0
        // Token: 0x06000110 RID: 272 RVA: 0x0000B0E0 File Offset: 0x000092E0
        private Dictionary <KillStealAbility, int> GetDamage(Unit9 target)
        {
            List <KillStealAbility>             list            = new List <KillStealAbility>();
            DamageAmplifier                     damageAmplifier = new DamageAmplifier();
            Dictionary <IHasDamageBlock, float> dictionary      = target.GetDamageBlockers().ToDictionary((IHasDamageBlock x) => x, (IHasDamageBlock x) => x.BlockValue(target));
            IEnumerable <KillStealAbility>      source          = this.activeAbilities;

            Func <KillStealAbility, bool> < > 9__2;
            Func <KillStealAbility, bool> predicate;

            if ((predicate = < > 9__2) == null)
            {
                predicate = (< > 9__2 = ((KillStealAbility x) => this.KillStealMenu.IsAbilityEnabled(x.Ability.Name)));
            }
            foreach (KillStealAbility killStealAbility in source.Where(predicate))
            {
                if (killStealAbility.Ability.IsValid && (this.AbilitySleeper.IsSleeping(killStealAbility.Ability.Handle) || killStealAbility.Ability.CanBeCasted(false)))
                {
                    IHasDamageAmplify hasDamageAmplify;
                    if ((hasDamageAmplify = (killStealAbility.Ability as IHasDamageAmplify)) != null && ((AbilityExtensions.IsIncomingDamageAmplifier(hasDamageAmplify) && !target.HasModifier(hasDamageAmplify.AmplifierModifierName)) || (AbilityExtensions.IsOutgoingDamageAmplifier(hasDamageAmplify) && !killStealAbility.Ability.Owner.HasModifier(hasDamageAmplify.AmplifierModifierName))))
                    {
                        if (AbilityExtensions.IsPhysicalDamageAmplifier(hasDamageAmplify))
                        {
                            DamageAmplifier damageAmplifier2 = damageAmplifier;
                            damageAmplifier2[DamageType.Physical] = damageAmplifier2[DamageType.Physical] * (1f + hasDamageAmplify.AmplifierValue(killStealAbility.Ability.Owner, target));
                        }
                        if (AbilityExtensions.IsMagicalDamageAmplifier(hasDamageAmplify))
                        {
                            DamageAmplifier damageAmplifier2 = damageAmplifier;
                            damageAmplifier2[DamageType.Magical] = damageAmplifier2[DamageType.Magical] * (1f + hasDamageAmplify.AmplifierValue(killStealAbility.Ability.Owner, target));
                        }
                        if (AbilityExtensions.IsPureDamageAmplifier(hasDamageAmplify))
                        {
                            DamageAmplifier damageAmplifier2 = damageAmplifier;
                            damageAmplifier2[DamageType.Pure] = damageAmplifier2[DamageType.Pure] * (1f + hasDamageAmplify.AmplifierValue(killStealAbility.Ability.Owner, target));
                        }
                    }
                    list.Add(killStealAbility);
                }
            }
            float num = target.Health;
            Dictionary <KillStealAbility, int> dictionary2 = new Dictionary <KillStealAbility, int>();
            Dictionary <Unit9, float>          dictionary3 = new Dictionary <Unit9, float>();

            using (List <KillStealAbility> .Enumerator enumerator2 = list.GetEnumerator())
            {
                while (enumerator2.MoveNext())
                {
                    KillStealAbility ability = enumerator2.Current;
                    float            num2;
                    if (!dictionary3.TryGetValue(ability.Ability.Owner, out num2))
                    {
                        num2 = (dictionary3[ability.Ability.Owner] = ability.Ability.Owner.Mana);
                    }
                    if (num2 >= ability.Ability.ManaCost)
                    {
                        Predicate <KillStealAbility> < > 9__3;
                        foreach (KeyValuePair <DamageType, float> keyValuePair in ability.Ability.GetRawDamage(target, new float?(num)))
                        {
                            DamageType key  = keyValuePair.Key;
                            float      num3 = keyValuePair.Value;
                            if (key == DamageType.None)
                            {
                                if (num3 > 0f)
                                {
                                    Logger.Error(new BrokenAbilityException("DamageType"), ability.Ability.Name);
                                    List <KillStealAbility>      list2 = this.activeAbilities;
                                    Predicate <KillStealAbility> match;
                                    if ((match = < > 9__3) == null)
                                    {
                                        match = (< > 9__3 = ((KillStealAbility x) => x.Ability.Handle == ability.Ability.Handle));
                                    }
                                    list2.RemoveAll(match);
                                }
                                dictionary2.Add(ability, 0);
                            }
                            else if (key == DamageType.HealthRemoval)
                            {
                                int num4;
                                dictionary2.TryGetValue(ability, out num4);
                                dictionary2[ability] = num4 + (int)num3;
                                num -= num3;
                            }
                            else
                            {
                                float damageAmplification = target.GetDamageAmplification(ability.Ability.Owner, key, ability.Ability.IntelligenceAmplify);
                                if (damageAmplification > 0f)
                                {
                                    foreach (KeyValuePair <IHasDamageBlock, float> keyValuePair2 in dictionary.ToList <KeyValuePair <IHasDamageBlock, float> >())
                                    {
                                        IHasDamageBlock key2 = keyValuePair2.Key;
                                        if (AbilityExtensions.CanBlock(key2, key))
                                        {
                                            float num5 = Math.Min(num3, keyValuePair2.Value);
                                            Dictionary <IHasDamageBlock, float> dictionary4 = dictionary;
                                            IHasDamageBlock key3 = key2;
                                            dictionary4[key3] -= num5;
                                            if (key2.BlocksDamageAfterReduction)
                                            {
                                                num3 -= Math.Min(num3, num5 * (1f / (damageAmplification * damageAmplifier[key])));
                                            }
                                            else
                                            {
                                                num3 -= num5;
                                            }
                                        }
                                    }
                                    int num6 = (int)(num3 * damageAmplification * damageAmplifier[key]);
                                    if (num6 > 6000 || num6 < 0)
                                    {
                                        BrokenAbilityException ex = new BrokenAbilityException("Amplified");
                                        ex.Data["Ability"] = new
                                        {
                                            Ability         = ability.Ability.Name,
                                            Target          = target.Name,
                                            Damage          = num3.ToString(),
                                            AmplifiedDamage = num6.ToString(),
                                            Type            = key.ToString(),
                                            Amp             = damageAmplification.ToString(),
                                            Amp2            = damageAmplifier[key].ToString(),
                                            TargetAmps      = (from x in target.amplifiers
                                                               where x.IsValid && AbilityExtensions.IsIncomingDamageAmplifier(x)
                                                               select x.AmplifierModifierName).ToArray <string>(),
                                            OwnerAmps = (from x in ability.Ability.Owner.amplifiers
                                                         where x.IsValid && AbilityExtensions.IsOutgoingDamageAmplifier(x)
                                                         select x.AmplifierModifierName).ToArray <string>()
                                        };
                                        Logger.Error(ex, null);
                                    }
                                    else
                                    {
                                        Dictionary <Unit9, float> dictionary5 = dictionary3;
                                        Unit9 owner = ability.Ability.Owner;
                                        dictionary5[owner] -= ability.Ability.ManaCost;
                                        int num7;
                                        dictionary2.TryGetValue(ability, out num7);
                                        dictionary2[ability] = num7 + num6;
                                        num -= (float)num6;
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return(dictionary2);
        }
Example #16
0
        // Token: 0x06000885 RID: 2181 RVA: 0x00026A28 File Offset: 0x00024C28
        protected override bool IsIgnored(Ability9 ability)
        {
            IDisable disable;

            return(base.IsIgnored(ability) || ((disable = (ability as IDisable)) != null && AbilityExtensions.IsInvulnerability(disable)));
        }