Beispiel #1
0
 internal void Passive(IHasPassiveDamageIncrease passive, bool added)
 {
     if (added)
     {
         this.passiveDamageAbilities.Add(passive);
     }
     else
     {
         this.passiveDamageAbilities.Remove(passive);
     }
 }
        // Token: 0x060003B6 RID: 950 RVA: 0x0001D02C File Offset: 0x0001B22C
        private void CheckModifier(uint senderHandle, Modifier modifier, bool added)
        {
            string name     = modifier.Name;
            Unit9  unitFast = EntityManager9.GetUnitFast(senderHandle);

            if (unitFast == null)
            {
                return;
            }
            Action <Unit9, bool> action;

            if (this.specialModifiers.TryGetValue(name, out action))
            {
                action(unitFast, added);
            }
            IHasRangeIncrease range = this.rangeFactory.GetRange(name);

            if (range != null)
            {
                unitFast.Range(range, added);
                return;
            }
            if (modifier.IsHidden)
            {
                return;
            }
            IAppliesImmobility disable = this.damageFactory.GetDisable(name);

            if (disable != null)
            {
                IDisable disable2;
                bool     invulnerability = (disable2 = (disable as IDisable)) != null && (disable2.AppliesUnitState & UnitState.Invulnerable) > (UnitState)0UL;
                unitFast.Disabler(modifier, added, invulnerability);
                return;
            }
            if (modifier.IsStunDebuff)
            {
                unitFast.Disabler(modifier, added, false);
                return;
            }
            IHasDamageAmplify amplifier = this.damageFactory.GetAmplifier(name);

            if (amplifier != null)
            {
                unitFast.Amplifier(amplifier, added);
                return;
            }
            IHasPassiveDamageIncrease passive = this.damageFactory.GetPassive(name);

            if (passive != null)
            {
                unitFast.Passive(passive, added);
                return;
            }
            IHasDamageBlock blocker = this.damageFactory.GetBlocker(name);

            if (blocker != null)
            {
                unitFast.Blocker(blocker, added);
                return;
            }
        }
        // Token: 0x0600048C RID: 1164 RVA: 0x0001F188 File Offset: 0x0001D388
        private void OnAbilityRemoved(Ability9 ability)
        {
            IHasDamageAmplify amplifier;

            if ((amplifier = (ability as IHasDamageAmplify)) != null)
            {
                if (amplifier.IsAmplifierPermanent)
                {
                    ability.Owner.Amplifier(amplifier, false);
                    return;
                }
                if (amplifier.IsAmplifierAddedToStats)
                {
                    return;
                }
                foreach (Unit9 unit in EntityManager9.Units)
                {
                    unit.Amplifier(amplifier, false);
                }
                IHasDamageAmplify hasDamageAmplify = EntityManager9.Abilities.OfType <IHasDamageAmplify>().FirstOrDefault((IHasDamageAmplify x) => x.AmplifierModifierName == amplifier.AmplifierModifierName);
                if (hasDamageAmplify != null)
                {
                    this.amplifiers[hasDamageAmplify.AmplifierModifierName] = hasDamageAmplify;
                    IEnumerable <Unit9> units = EntityManager9.Units;
                    Func <Unit9, bool> < > 9__1;
                    Func <Unit9, bool> predicate;
                    if ((predicate = < > 9__1) == null)
                    {
                        predicate = (< > 9__1 = ((Unit9 x) => x.HasModifier(amplifier.AmplifierModifierName)));
                    }
                    using (IEnumerator <Unit9> enumerator = units.Where(predicate).GetEnumerator())
                    {
                        while (enumerator.MoveNext())
                        {
                            Unit9 unit2 = enumerator.Current;
                            unit2.Amplifier(hasDamageAmplify, true);
                        }
                        goto IL_117;
                    }
                }
                this.amplifiers.Remove(amplifier.AmplifierModifierName);
            }
IL_117:
            IHasPassiveDamageIncrease passive;

            if ((passive = (ability as IHasPassiveDamageIncrease)) != null)
            {
                if (passive.IsPassiveDamagePermanent)
                {
                    ability.Owner.Passive(passive, false);
                    return;
                }
                foreach (Unit9 unit3 in EntityManager9.Units)
                {
                    unit3.Passive(passive, false);
                }
                IHasPassiveDamageIncrease hasPassiveDamageIncrease = EntityManager9.Abilities.OfType <IHasPassiveDamageIncrease>().FirstOrDefault((IHasPassiveDamageIncrease x) => x.PassiveDamageModifierName == passive.PassiveDamageModifierName);
                if (hasPassiveDamageIncrease != null)
                {
                    this.passives[hasPassiveDamageIncrease.PassiveDamageModifierName] = hasPassiveDamageIncrease;
                    IEnumerable <Unit9> units2 = EntityManager9.Units;
                    Func <Unit9, bool> < > 9__3;
                    Func <Unit9, bool> predicate2;
                    if ((predicate2 = < > 9__3) == null)
                    {
                        predicate2 = (< > 9__3 = ((Unit9 x) => x.HasModifier(passive.PassiveDamageModifierName)));
                    }
                    using (IEnumerator <Unit9> enumerator = units2.Where(predicate2).GetEnumerator())
                    {
                        while (enumerator.MoveNext())
                        {
                            Unit9 unit4 = enumerator.Current;
                            unit4.Passive(hasPassiveDamageIncrease, true);
                        }
                        goto IL_221;
                    }
                }
                this.passives.Remove(passive.PassiveDamageModifierName);
            }
IL_221:
            IHasDamageBlock block;

            if ((block = (ability as IHasDamageBlock)) != null)
            {
                if (block.IsDamageBlockPermanent)
                {
                    ability.Owner.Blocker(block, false);
                    return;
                }
                foreach (Unit9 unit5 in EntityManager9.Units)
                {
                    unit5.Blocker(block, false);
                }
                IHasDamageBlock hasDamageBlock = EntityManager9.Abilities.OfType <IHasDamageBlock>().FirstOrDefault((IHasDamageBlock x) => x.BlockModifierName == block.BlockModifierName);
                if (hasDamageBlock != null)
                {
                    this.blockers[hasDamageBlock.BlockModifierName] = hasDamageBlock;
                    IEnumerable <Unit9> units3 = EntityManager9.Units;
                    Func <Unit9, bool> < > 9__5;
                    Func <Unit9, bool> predicate3;
                    if ((predicate3 = < > 9__5) == null)
                    {
                        predicate3 = (< > 9__5 = ((Unit9 x) => x.HasModifier(block.BlockModifierName)));
                    }
                    using (IEnumerator <Unit9> enumerator = units3.Where(predicate3).GetEnumerator())
                    {
                        while (enumerator.MoveNext())
                        {
                            Unit9 unit6 = enumerator.Current;
                            unit6.Blocker(block, true);
                        }
                        goto IL_32F;
                    }
                }
                this.blockers.Remove(block.BlockModifierName);
            }
IL_32F:
            IAppliesImmobility disable;

            if ((disable = (ability as IAppliesImmobility)) != null)
            {
                IAppliesImmobility appliesImmobility = EntityManager9.Abilities.OfType <IAppliesImmobility>().FirstOrDefault((IAppliesImmobility x) => x.ImmobilityModifierName == disable.ImmobilityModifierName);
                if (appliesImmobility == null)
                {
                    this.disablers.Remove(disable.ImmobilityModifierName);
                    return;
                }
                this.disablers[disable.ImmobilityModifierName] = appliesImmobility;
            }
        }