Ejemplo n.º 1
0
 // Token: 0x060005F0 RID: 1520 RVA: 0x0001DC34 File Offset: 0x0001BE34
 private void OnModifierAdded(Unit sender, ModifierChangedEventArgs args)
 {
     try
     {
         Modifier modifier = args.Modifier;
         if (modifier.IsHidden && modifier.Team == base.Owner.Team)
         {
             Unit         owner = modifier.Owner;
             EntityHandle?entityHandle;
             if (owner == null)
             {
                 entityHandle = null;
             }
             else
             {
                 Entity owner2 = owner.Owner;
                 entityHandle = ((owner2 != null) ? new EntityHandle?(owner2.Handle) : null);
             }
             EntityHandle?entityHandle2 = entityHandle;
             if (!(((entityHandle2 != null) ? new uint?(entityHandle2.GetValueOrDefault()) : null) != base.Owner.Handle))
             {
                 if (modifier.Name == "modifier_kunkka_torrent_thinker")
                 {
                     this.torrent.Modifier = modifier;
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Logger.Error(ex, EntityManager9.Abilities.Count((Ability9 x) => base.Owner.Equals(x.Owner)).ToString());
     }
 }
Ejemplo n.º 2
0
        // Token: 0x060002C4 RID: 708 RVA: 0x00011870 File Offset: 0x0000FA70
        private bool MoveToProjectile(Unit9 target)
        {
            if (!this.CanMove())
            {
                return(false);
            }
            TrackingProjectile trackingProjectile = ObjectManager.TrackingProjectiles.FirstOrDefault(delegate(TrackingProjectile x)
            {
                if (x.IsValid)
                {
                    Entity source             = x.Source;
                    EntityHandle?entityHandle = (source != null) ? new EntityHandle?(source.Handle) : null;
                    if (((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == base.Owner.Handle)
                    {
                        Entity target3 = x.Target;
                        return(target3 != null && target3.IsValid);
                    }
                }
                return(false);
            });

            if (trackingProjectile == null)
            {
                return(false);
            }
            Entity  target2           = trackingProjectile.Target;
            Vector3 predictedPosition = target.GetPredictedPosition(trackingProjectile.Position.Distance2D(target2.Position, false) / (float)trackingProjectile.Speed + Game.Ping / 1000f);
            Vector3 position          = Vector3Extensions.Extend2D(target2.Position, predictedPosition, -base.Owner.Distance(target2.Position));

            base.Owner.BaseUnit.Move(position);
            return(true);
        }
Ejemplo n.º 3
0
        // Token: 0x060008DB RID: 2267 RVA: 0x000226F8 File Offset: 0x000208F8
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.zuus_static_field)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability != null)
            {
                this.staticField = (StaticField)EntityManager9.AddAbility(ability);
            }
            ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.zuus_lightning_bolt)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });
            if (ability != null)
            {
                this.lightningBolt = (LightningBolt)EntityManager9.AddAbility(ability);
            }
        }
Ejemplo n.º 4
0
 // Token: 0x06000434 RID: 1076 RVA: 0x00017138 File Offset: 0x00015338
 private void OnAddTrackingProjectile(TrackingProjectileEventArgs args)
 {
     try
     {
         TrackingProjectile projectile   = args.Projectile;
         Entity             target       = projectile.Target;
         EntityHandle?      entityHandle = (target != null) ? new EntityHandle?(target.Handle) : null;
         if (!(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) != base.Owner.HeroHandle))
         {
             Unit unit = projectile.Source as Unit;
             if (!(unit == null))
             {
                 Unit9 unit2 = EntityManager9.GetUnit(unit.Handle);
                 if (!(unit2 == null))
                 {
                     this.projectiles[projectile] = unit2.GetAttackDamage(base.Owner, 2, 0f);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Logger.Error(ex, null);
     }
 }
Ejemplo n.º 5
0
 // Token: 0x060005F1 RID: 1521 RVA: 0x0001DD44 File Offset: 0x0001BF44
 private void OnParticleEffectAdded(Entity sender, ParticleEffectAddedEventArgs args)
 {
     try
     {
         ParticleEffect particle     = args.ParticleEffect;
         Entity         owner        = particle.Owner;
         EntityHandle?  entityHandle = (owner != null) ? new EntityHandle?(owner.Handle) : null;
         if (!(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) != this.playerHandle))
         {
             string name = args.Name;
             if (!(name == "particles/units/heroes/hero_kunkka/kunkka_spell_x_spot.vpcf") && !(name == "particles/econ/items/kunkka/divine_anchor/hero_kunkka_dafx_skills/kunkka_spell_x_spot_fxset.vpcf"))
             {
                 if (name == "particles/units/heroes/hero_kunkka/kunkka_ghostship_marker.vpcf")
                 {
                     float time = Game.RawGameTime - Game.Ping / 2000f;
                     UpdateManager.BeginInvoke(delegate
                     {
                         this.ship.CalculateTimings(particle.GetControlPoint(0u), time);
                     }, 0);
                 }
             }
             else
             {
                 UpdateManager.BeginInvoke(delegate
                 {
                     this.xMark.Position = particle.GetControlPoint(0u);
                 }, 0);
             }
         }
     }
     catch (Exception ex)
     {
         Logger.Error(ex, null);
     }
 }
 // Token: 0x06000368 RID: 872 RVA: 0x0001B7FC File Offset: 0x000199FC
 private static void DelayedEntitiesOnUpdate()
 {
     try
     {
         for (int i = EntityManager9.delayedHeroes.Count - 1; i > -1; i--)
         {
             Hero hero = EntityManager9.delayedHeroes[i];
             if (!hero.IsValid)
             {
                 EntityManager9.delayedHeroes.RemoveAt(i);
             }
             else if (hero.HeroId != HeroId.npc_dota_hero_base && hero.Inventory != null)
             {
                 EntityManager9.delayedHeroes.RemoveAt(i);
                 EntityManager9.AddUnit(hero);
             }
         }
         for (int j = EntityManager9.delayedAbilities.Count - 1; j > -1; j--)
         {
             Ability ability = EntityManager9.delayedAbilities[j];
             if (!ability.IsValid)
             {
                 EntityManager9.delayedAbilities.RemoveAt(j);
             }
             else
             {
                 Entity       owner        = ability.Owner;
                 EntityHandle?entityHandle = (owner != null) ? new EntityHandle?(owner.Handle) : null;
                 if (!(EntityManager9.GetUnitFast((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == null))
                 {
                     EntityManager9.delayedAbilities.RemoveAt(j);
                     EntityManager9.AddAbility(ability);
                 }
             }
         }
         if (EntityManager9.delayedAbilities.Count == 0 && EntityManager9.delayedHeroes.Count == 0)
         {
             EntityManager9.delayedEntityHandler.IsEnabled = false;
         }
     }
     catch (Exception exception)
     {
         Logger.Error(exception, null);
     }
 }
Ejemplo n.º 7
0
        // Token: 0x06000B20 RID: 2848 RVA: 0x00024BAC File Offset: 0x00022DAC
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.ancient_apparition_ice_blast_release)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability == null)
            {
                throw new ArgumentNullException("iceBlastRelease");
            }
            this.iceBlastRelease = (IceBlastRelease)EntityManager9.AddAbility(ability);
        }
Ejemplo n.º 8
0
        // Token: 0x06000D21 RID: 3361 RVA: 0x00026400 File Offset: 0x00024600
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.phoenix_fire_spirits)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability == null)
            {
                throw new ArgumentNullException("fireSpirits");
            }
            this.fireSpirits = (FireSpirits)EntityManager9.AddAbility(ability);
        }
Ejemplo n.º 9
0
        // Token: 0x06000BB7 RID: 2999 RVA: 0x00025108 File Offset: 0x00023308
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.tusk_launch_snowball)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability == null)
            {
                throw new ArgumentNullException("launch");
            }
            this.launch = (LaunchSnowball)EntityManager9.AddAbility(ability);
        }
Ejemplo n.º 10
0
        // Token: 0x06000C0D RID: 3085 RVA: 0x00025454 File Offset: 0x00023654
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == ((this.Id == AbilityId.shredder_chakram) ? AbilityId.shredder_return_chakram : AbilityId.shredder_return_chakram_2))
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability == null)
            {
                throw new ArgumentNullException("ReturnChakram");
            }
            this.ReturnChakram = (ReturnChakram)EntityManager9.AddAbility(ability);
        }
Ejemplo n.º 11
0
        // Token: 0x06000DE4 RID: 3556 RVA: 0x00026FFC File Offset: 0x000251FC
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.monkey_king_untransform)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability == null)
            {
                throw new ArgumentNullException("revertForm");
            }
            this.revertForm = (RevertForm)EntityManager9.AddAbility(ability);
        }
Ejemplo n.º 12
0
        // Token: 0x06001055 RID: 4181 RVA: 0x00028C20 File Offset: 0x00026E20
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.alchemist_unstable_concoction)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability == null)
            {
                throw new ArgumentNullException("unstableConcoction");
            }
            this.unstableConcoction = (UnstableConcoction)EntityManager9.AddAbility(ability);
        }
        // Token: 0x060009E9 RID: 2537 RVA: 0x000237B8 File Offset: 0x000219B8
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.morphling_morph_agi)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability == null)
            {
                throw new ArgumentNullException("AttributeShiftAgilityGain");
            }
            this.AttributeShiftAgilityGain = (AttributeShiftAgilityGain)EntityManager9.AddAbility(ability);
        }
Ejemplo n.º 14
0
        // Token: 0x06000C96 RID: 3222 RVA: 0x00025A94 File Offset: 0x00023C94
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.sniper_headshot)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability == null)
            {
                return;
            }
            this.headshot = (Headshot)EntityManager9.AddAbility(ability);
        }
Ejemplo n.º 15
0
        // Token: 0x06000CEC RID: 3308 RVA: 0x00025F30 File Offset: 0x00024130
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.riki_permanent_invisibility)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability == null)
            {
                return;
            }
            this.cloakAndDagger = (CloakAndDagger)EntityManager9.AddAbility(ability);
        }
Ejemplo n.º 16
0
 // Token: 0x06000428 RID: 1064 RVA: 0x0001DDF4 File Offset: 0x0001BFF4
 public SpecialData(Entity talentOwner, AbilityId talentId)
 {
     try
     {
         this.talent = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
         {
             if (x.Id == talentId)
             {
                 Entity owner = x.Owner;
                 EntityHandle?entityHandle = (owner != null) ? new EntityHandle?(owner.Handle) : null;
                 EntityHandle handle       = talentOwner.Handle;
                 return(entityHandle != null && (entityHandle == null || entityHandle.GetValueOrDefault() == handle));
             }
             return(false);
         });
         if (this.talent != null)
         {
             this.talentValue = this.talent.AbilitySpecialData.First((AbilitySpecialData x) => x.Name == "value").Value;
             this.getDataFunc = new Func <uint, float>(this.GetTalentValue);
         }
         else
         {
             this.getDataFunc = ((uint _) => 1f);
         }
     }
     catch
     {
         this.getDataFunc = ((uint _) => 0f);
         BrokenAbilityException ex = new BrokenAbilityException(talentId.ToString());
         Ability ability           = this.talent;
         if (ability != null && ability.IsValid)
         {
             ex.Data["Ability"] = new
             {
                 Ability = this.talent.Name
             };
         }
         Logger.Error(ex, null);
     }
 }
Ejemplo n.º 17
0
        // Token: 0x06000D38 RID: 3384 RVA: 0x00026624 File Offset: 0x00024824
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.phoenix_sun_ray_stop)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability == null)
            {
                throw new ArgumentNullException("sunRayStop");
            }
            this.sunRayStop = (SunRayStop)EntityManager9.AddAbility(ability);
            ability         = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.phoenix_sun_ray_toggle_move)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });
            if (ability == null)
            {
                throw new ArgumentNullException("sunRayToggleMovement");
            }
            this.sunRayToggleMovement = (SunRayToggleMovement)EntityManager9.AddAbility(ability);
            if (owner.IsControllable)
            {
                Player.OnExecuteOrder += this.OnExecuteOrder;
            }
        }
        // Token: 0x0600098F RID: 2447 RVA: 0x000233E4 File Offset: 0x000215E4
        internal override void SetOwner(Unit9 owner)
        {
            base.SetOwner(owner);
            Ability ability = EntityManager9.BaseAbilities.FirstOrDefault(delegate(Ability x)
            {
                if (x.Id == AbilityId.shadow_demon_shadow_poison)
                {
                    Entity owner2             = x.Owner;
                    EntityHandle?entityHandle = (owner2 != null) ? new EntityHandle?(owner2.Handle) : null;
                    return(((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == owner.Handle);
                }
                return(false);
            });

            if (ability == null)
            {
                throw new ArgumentNullException("shadowPoison");
            }
            this.shadowPoison       = (ShadowPoison)EntityManager9.AddAbility(ability);
            this.DamageData         = new SpecialData(this.shadowPoison.BaseAbility, "stack_damage");
            this.maxStacksData      = new SpecialData(this.shadowPoison.BaseAbility, "max_multiply_stacks");
            this.overflowDamageData = new SpecialData(this.shadowPoison.BaseAbility, "bonus_stack_damage");
        }
Ejemplo n.º 19
0
        // Token: 0x060002E6 RID: 742 RVA: 0x00011E14 File Offset: 0x00010014
        public override bool Combo(TargetManager targetManager, ComboModeMenu comboModeMenu)
        {
            AbilityHelper abilityHelper = new AbilityHelper(targetManager, comboModeMenu, this);
            Unit9         target        = targetManager.Target;

            if (abilityHelper.UseAbility(this.hex, true))
            {
                return(true);
            }
            if (abilityHelper.CanBeCasted(this.vortex, true, true, true, true) && (target.CanBecomeMagicImmune || target.CanBecomeInvisible) && abilityHelper.UseAbility(this.vortex, true))
            {
                return(true);
            }
            if (abilityHelper.UseAbility(this.bloodthorn, true))
            {
                return(true);
            }
            if (abilityHelper.UseAbility(this.orchid, true))
            {
                return(true);
            }
            if (abilityHelper.UseAbility(this.nullifier, true))
            {
                return(true);
            }
            if (abilityHelper.UseAbility(this.dagon, true))
            {
                return(true);
            }
            if (abilityHelper.UseAbility(this.shiva, true))
            {
                return(true);
            }
            bool flag = base.Owner.CanAttack(target, 25f) && base.Owner.HasModifier("modifier_storm_spirit_overload");
            TrackingProjectile trackingProjectile = ObjectManager.TrackingProjectiles.FirstOrDefault(delegate(TrackingProjectile x)
            {
                Entity source             = x.Source;
                EntityHandle?entityHandle = (source != null) ? new EntityHandle?(source.Handle) : null;
                if (((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == this.Handle)
                {
                    Entity target = x.Target;
                    entityHandle  = ((target != null) ? new EntityHandle?(target.Handle) : null);
                    if (((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null) == target.Handle)
                    {
                        return(ProjectileExtensions.IsAutoAttackProjectile(x));
                    }
                }
                return(false);
            });

            if (flag)
            {
                if (trackingProjectile == null)
                {
                    return(false);
                }
                int num = (target.IsMoving && target.GetAngle(trackingProjectile.Position, false) > 1.5f) ? 250 : 450;
                if (trackingProjectile.Position.Distance2D(trackingProjectile.TargetPosition, false) > (float)num)
                {
                    return(false);
                }
            }
            else
            {
                if (trackingProjectile != null)
                {
                    Ability9 ability = base.Owner.Abilities.FirstOrDefault((Ability9 x) => x.Id == AbilityId.storm_spirit_overload);
                    if (ability != null)
                    {
                        int   attackDamage = base.Owner.GetAttackDamage(target, 0, 0f);
                        int   damage       = ability.GetDamage(target);
                        float health       = target.Health;
                        if ((float)attackDamage < health && (float)(attackDamage + damage) > health)
                        {
                            if (abilityHelper.CanBeCasted(this.remnant, false, false, true, true) && abilityHelper.ForceUseAbility(this.remnant, true, true))
                            {
                                return(true);
                            }
                            if (abilityHelper.CanBeCasted(this.ball, false, false, true, true) && trackingProjectile.Position.Distance2D(trackingProjectile.TargetPosition, false) / (float)trackingProjectile.Speed > this.ball.Ability.CastPoint && abilityHelper.ForceUseAbility(this.ball, true, true))
                            {
                                return(true);
                            }
                        }
                    }
                }
                if (abilityHelper.UseAbility(this.vortex, true))
                {
                    base.ComboSleeper.ExtendSleep(0.1f);
                    BallLightning ballLightning = this.ball;
                    if (ballLightning != null)
                    {
                        ballLightning.Sleeper.Sleep(1f);
                    }
                    return(true);
                }
                if (abilityHelper.UseAbility(this.remnant, true))
                {
                    base.ComboSleeper.ExtendSleep(0.1f);
                    BallLightning ballLightning2 = this.ball;
                    if (ballLightning2 != null)
                    {
                        ballLightning2.Sleeper.Sleep(1f);
                    }
                    return(true);
                }
            }
            return(abilityHelper.UseAbility(this.ball, true));
        }
Ejemplo n.º 20
0
        protected virtual void WriteInstruction(ITextOutput output, MetadataReader metadata, MethodDefinitionHandle methodDefinition, ref BlobReader blob)
        {
            int offset = blob.Offset;

            if (ShowSequencePoints && nextSequencePointIndex < sequencePoints?.Count)
            {
                var sp = sequencePoints[nextSequencePointIndex];
                if (sp.Offset <= offset)
                {
                    output.Write("// sequence point: ");
                    if (sp.Offset != offset)
                    {
                        output.Write("!! at " + DisassemblerHelpers.OffsetToString(sp.Offset) + " !!");
                    }
                    if (sp.IsHidden)
                    {
                        output.WriteLine("hidden");
                    }
                    else
                    {
                        output.WriteLine($"(line {sp.StartLine}, col {sp.StartColumn}) to (line {sp.EndLine}, col {sp.EndColumn}) in {sp.DocumentUrl}");
                    }
                    nextSequencePointIndex++;
                }
            }
            ILOpCode opCode = ILParser.DecodeOpCode(ref blob);

            output.WriteLocalReference(DisassemblerHelpers.OffsetToString(offset), offset, isDefinition: true);
            output.Write(": ");
            if (opCode.IsDefined())
            {
                output.WriteReference(new OpCodeInfo(opCode, opCode.GetDisplayName()));
                switch (opCode.GetOperandType())
                {
                case OperandType.BrTarget:
                case OperandType.ShortBrTarget:
                    output.Write(' ');
                    int targetOffset = ILParser.DecodeBranchTarget(ref blob, opCode);
                    output.WriteLocalReference($"IL_{targetOffset:x4}", targetOffset);
                    break;

                case OperandType.Field:
                case OperandType.Method:
                case OperandType.Sig:
                case OperandType.Type:
                    output.Write(' ');
                    int          metadataToken = blob.ReadInt32();
                    EntityHandle?handle        = MetadataTokenHelpers.TryAsEntityHandle(metadataToken);
                    try {
                        handle?.WriteTo(module, output, genericContext);
                    } catch (BadImageFormatException) {
                        handle = null;
                    }
                    WriteMetadataToken(handle, metadataToken, spaceBefore: true);
                    break;

                case OperandType.Tok:
                    output.Write(' ');
                    metadataToken = blob.ReadInt32();
                    handle        = MetadataTokenHelpers.TryAsEntityHandle(metadataToken);
                    switch (handle?.Kind)
                    {
                    case HandleKind.MemberReference:
                        switch (metadata.GetMemberReference((MemberReferenceHandle)handle).GetKind())
                        {
                        case MemberReferenceKind.Method:
                            output.Write("method ");
                            break;

                        case MemberReferenceKind.Field:
                            output.Write("field ");
                            break;
                        }
                        break;

                    case HandleKind.FieldDefinition:
                        output.Write("field ");
                        break;

                    case HandleKind.MethodDefinition:
                        output.Write("method ");
                        break;
                    }
                    try {
                        handle?.WriteTo(module, output, genericContext);
                    } catch (BadImageFormatException) {
                        handle = null;
                    }
                    WriteMetadataToken(handle, metadataToken, spaceBefore: true);
                    break;

                case OperandType.ShortI:
                    output.Write(' ');
                    DisassemblerHelpers.WriteOperand(output, blob.ReadSByte());
                    break;

                case OperandType.I:
                    output.Write(' ');
                    DisassemblerHelpers.WriteOperand(output, blob.ReadInt32());
                    break;

                case OperandType.I8:
                    output.Write(' ');
                    DisassemblerHelpers.WriteOperand(output, blob.ReadInt64());
                    break;

                case OperandType.ShortR:
                    output.Write(' ');
                    DisassemblerHelpers.WriteOperand(output, blob.ReadSingle());
                    break;

                case OperandType.R:
                    output.Write(' ');
                    DisassemblerHelpers.WriteOperand(output, blob.ReadDouble());
                    break;

                case OperandType.String:
                    metadataToken = blob.ReadInt32();
                    output.Write(' ');
                    UserStringHandle?userString;
                    string           text;
                    try {
                        userString = MetadataTokens.UserStringHandle(metadataToken);
                        text       = metadata.GetUserString(userString.Value);
                    } catch (BadImageFormatException) {
                        userString = null;
                        text       = null;
                    }
                    if (userString != null)
                    {
                        DisassemblerHelpers.WriteOperand(output, text);
                    }
                    WriteMetadataToken(userString, metadataToken, spaceBefore: true);
                    break;

                case OperandType.Switch:
                    int[] targets = ILParser.DecodeSwitchTargets(ref blob);
                    output.Write(" (");
                    for (int i = 0; i < targets.Length; i++)
                    {
                        if (i > 0)
                        {
                            output.Write(", ");
                        }
                        output.WriteLocalReference($"IL_{targets[i]:x4}", targets[i]);
                    }
                    output.Write(")");
                    break;

                case OperandType.Variable:
                    output.Write(' ');
                    int index = blob.ReadUInt16();
                    if (opCode == ILOpCode.Ldloc || opCode == ILOpCode.Ldloca || opCode == ILOpCode.Stloc)
                    {
                        DisassemblerHelpers.WriteVariableReference(output, metadata, methodDefinition, index);
                    }
                    else
                    {
                        DisassemblerHelpers.WriteParameterReference(output, metadata, methodDefinition, index);
                    }
                    break;

                case OperandType.ShortVariable:
                    output.Write(' ');
                    index = blob.ReadByte();
                    if (opCode == ILOpCode.Ldloc_s || opCode == ILOpCode.Ldloca_s || opCode == ILOpCode.Stloc_s)
                    {
                        DisassemblerHelpers.WriteVariableReference(output, metadata, methodDefinition, index);
                    }
                    else
                    {
                        DisassemblerHelpers.WriteParameterReference(output, metadata, methodDefinition, index);
                    }
                    break;
                }
            }
            else
            {
                ushort opCodeValue = (ushort)opCode;
                if (opCodeValue > 0xFF)
                {
                    // split 16-bit value into two emitbyte directives
                    output.WriteLine($".emitbyte 0x{(byte)(opCodeValue >> 8):x}");
                    // add label
                    output.WriteLocalReference(DisassemblerHelpers.OffsetToString(offset + 1), offset + 1, isDefinition: true);
                    output.Write(": ");
                    output.Write($".emitbyte 0x{(byte)(opCodeValue & 0xFF):x}");
                }
                else
                {
                    output.Write($".emitbyte 0x{(byte)opCodeValue:x}");
                }
            }
            output.WriteLine();
        }
        // Token: 0x0600035B RID: 859 RVA: 0x0001B068 File Offset: 0x00019268
        internal static Ability9 AddAbility(Ability ability)
        {
            Ability9 result;

            try
            {
                Type type;
                if (!EntityManager9.abilityTypes.TryGetValue(ability.Id, out type))
                {
                    result = null;
                }
                else
                {
                    Ability9 ability2 = EntityManager9.GetAbilityFast(ability.Handle);
                    if (ability2 != null)
                    {
                        result = ability2;
                    }
                    else
                    {
                        Entity       owner        = ability.Owner;
                        EntityHandle?entityHandle = (owner != null) ? new EntityHandle?(owner.Handle) : null;
                        Unit9        unitFast     = EntityManager9.GetUnitFast((entityHandle != null) ? new uint?(entityHandle.GetValueOrDefault()) : null);
                        if (unitFast == null)
                        {
                            EntityManager9.DelayedAdd(ability);
                            result = null;
                        }
                        else
                        {
                            Item item;
                            if ((item = (ability as Item)) != null)
                            {
                                if (item.PurchaseTime < 0f)
                                {
                                    return(null);
                                }
                            }
                            else if (ability.AbilitySlot < AbilitySlot.Slot_1 && !ability.IsHidden)
                            {
                                return(null);
                            }
                            ability2 = (Ability9)Activator.CreateInstance(type, new object[]
                            {
                                ability
                            });
                            ability2.SetPrediction(EntityManager9.predictionManager);
                            EntityManager9.AbilityMonitor.SetOwner(ability2, unitFast);
                            EntityManager9.abilities[ability2.Handle] = ability2;
                            EntityManager9.EventHandler <Ability9> eventHandler = EntityManager9.abilityAdded;
                            if (eventHandler != null)
                            {
                                eventHandler(ability2);
                            }
                            result = ability2;
                        }
                    }
                }
            }
            catch (Exception exception)
            {
                Logger.Error(exception, ability, null);
                result = null;
            }
            return(result);
        }