Example #1
0
 public override void Pickup(PlayerController player)
 {
     base.Pickup(player);
     for (int i = 0; i < 2; i++)
     {
         GameObject obj  = SpawnManager.SpawnProjectile(Toolbox.GetGunById(38).DefaultModule.projectiles[0].gameObject, this.m_owner.sprite.WorldCenter, Quaternion.identity);
         Projectile proj = obj.GetComponent <Projectile>();
         if (proj != null)
         {
             proj.sprite.renderer.enabled          = false;
             proj.specRigidbody.CollideWithOthers  = false;
             proj.specRigidbody.CollideWithTileMap = false;
             proj.baseData.damage = 0;
             proj.baseData.range  = float.MaxValue;
             proj.baseData.speed  = 0;
             proj.Owner           = this.m_owner;
             proj.Shooter         = this.m_owner.specRigidbody;
             if (zapperMainProjectile != null)
             {
                 proj.gameObject.AddComponent <ZapperSecondaryProjectileBehaviour>().manuallyAssignedEnemy  = null;
                 proj.gameObject.GetComponent <ZapperSecondaryProjectileBehaviour>().manuallyAssignedPlayer = this.m_owner;
             }
             else
             {
                 proj.gameObject.AddComponent <TeslaCoil.ZapperMainProjectileBehaviour>().manuallyAssignedPlayer = this.m_owner;
             }
             ComplexProjectileModifier projModifier   = PickupObjectDatabase.GetById(298) as ComplexProjectileModifier;
             ChainLightningModifier    orAddComponent = obj.gameObject.GetOrAddComponent <ChainLightningModifier>();
             orAddComponent.LinkVFXPrefab       = Toolbox.GetGunById(682).DefaultModule.projectiles[0].GetComponent <ChainLightningModifier>().LinkVFXPrefab;
             orAddComponent.damageTypes         = projModifier.ChainLightningDamageTypes;
             orAddComponent.maximumLinkDistance = projModifier.ChainLightningMaxLinkDistance;
             orAddComponent.damagePerHit        = projModifier.ChainLightningDamagePerHit;
             orAddComponent.damageCooldown      = projModifier.ChainLightningDamageCooldown / 5;
             if (projModifier.ChainLightningDispersalParticles != null)
             {
                 orAddComponent.UsesDispersalParticles        = true;
                 orAddComponent.DispersalParticleSystemPrefab = projModifier.ChainLightningDispersalParticles;
                 orAddComponent.DispersalDensity      = projModifier.ChainLightningDispersalDensity;
                 orAddComponent.DispersalMinCoherency = projModifier.ChainLightningDispersalMinCoherence;
                 orAddComponent.DispersalMaxCoherency = projModifier.ChainLightningDispersalMaxCoherence;
             }
             else
             {
                 orAddComponent.UsesDispersalParticles = false;
             }
         }
         if (zapperMainProjectile != null)
         {
             this.zapperSecondaryProjectile = proj;
         }
         else
         {
             this.zapperMainProjectile = proj;
         }
     }
     player.OnReceivedDamage += this.OnPlayerReceivedDamage;
 }
Example #2
0
        private void OnHitEnemy(Projectile projectile, SpeculativeRigidbody enemy, bool fatal)
        {
            ComplexProjectileModifier complexProjectileModifier = PickupObjectDatabase.GetById(298) as ComplexProjectileModifier;
            float chainGlitchPreventinator = complexProjectileModifier.ChainLightningMaxLinkDistance;

            if (Owner && m_owner.CurrentRoom != null && m_owner.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All) != null)
            {
                foreach (AIActor aiactor in this.m_owner.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All))
                {
                    if (Vector2.Distance(aiactor.CenterPosition, enemy.UnitCenter) < chainGlitchPreventinator)
                    {
                        GameObject gameObject = SpawnManager.SpawnProjectile((PickupObjectDatabase.GetById(38) as Gun).DefaultModule.projectiles[0].gameObject, aiactor.sprite.WorldCenter, Quaternion.identity, true);
                        Projectile component  = gameObject.GetComponent <Projectile>();
                        bool       flag4      = component != null;
                        if (flag4)
                        {
                            component.sprite.renderer.enabled          = false;
                            component.specRigidbody.CollideWithOthers  = false;
                            component.specRigidbody.CollideWithTileMap = false;
                            component.baseData.damage = 0f;
                            component.baseData.range  = float.MaxValue;
                            component.baseData.speed  = 0f;
                            component.Owner           = this.m_owner;
                            component.Shooter         = this.m_owner.specRigidbody;
                            ChainLightningModifier orAddComponent = gameObject.gameObject.GetOrAddComponent <ChainLightningModifier>();
                            orAddComponent.LinkVFXPrefab       = complexProjectileModifier.ChainLightningVFX;
                            orAddComponent.damageTypes         = complexProjectileModifier.ChainLightningDamageTypes;
                            orAddComponent.maximumLinkDistance = complexProjectileModifier.ChainLightningMaxLinkDistance;
                            orAddComponent.damagePerHit        = m_owner.HasMTGConsoleID("psm:thunder_shells") ? 3 : complexProjectileModifier.ChainLightningDamagePerHit;
                            orAddComponent.damageCooldown      = 0.1f;
                            StartCoroutine(DelProjectel(component));
                            bool flag5 = complexProjectileModifier.ChainLightningDispersalParticles != null;
                            if (flag5)
                            {
                                orAddComponent.UsesDispersalParticles        = true;
                                orAddComponent.DispersalParticleSystemPrefab = complexProjectileModifier.ChainLightningDispersalParticles;
                                orAddComponent.DispersalDensity      = complexProjectileModifier.ChainLightningDispersalDensity;
                                orAddComponent.DispersalMinCoherency = complexProjectileModifier.ChainLightningDispersalMinCoherence;
                                orAddComponent.DispersalMaxCoherency = complexProjectileModifier.ChainLightningDispersalMaxCoherence;
                            }
                            else
                            {
                                orAddComponent.UsesDispersalParticles = false;
                            }

                            chainGlitchPreventinator += Vector2.Distance(aiactor.CenterPosition, enemy.UnitCenter);
                        }
                    }
                }
            }
        }
Example #3
0
        public override void Pickup(PlayerController player)
        {
            base.Pickup(player);
            GameObject obj  = SpawnManager.SpawnProjectile(Toolbox.GetGunById(38).DefaultModule.projectiles[0].gameObject, this.m_owner.sprite.WorldCenter, Quaternion.identity);
            Projectile proj = obj.GetComponent <Projectile>();

            if (proj != null)
            {
                proj.sprite.renderer.enabled          = false;
                proj.specRigidbody.CollideWithOthers  = false;
                proj.specRigidbody.CollideWithTileMap = false;
                proj.baseData.damage = 0;
                proj.baseData.range  = float.MaxValue;
                proj.baseData.speed  = 0;
                proj.Owner           = this.m_owner;
                proj.Shooter         = this.m_owner.specRigidbody;
                proj.gameObject.AddComponent <ZapperMainProjectileBehaviour>().manuallyAssignedPlayer = this.m_owner;
                ComplexProjectileModifier projModifier   = PickupObjectDatabase.GetById(298) as ComplexProjectileModifier;
                ChainLightningModifier    orAddComponent = obj.gameObject.GetOrAddComponent <ChainLightningModifier>();
                orAddComponent.LinkVFXPrefab       = projModifier.ChainLightningVFX;
                orAddComponent.damageTypes         = projModifier.ChainLightningDamageTypes;
                orAddComponent.maximumLinkDistance = projModifier.ChainLightningMaxLinkDistance;
                orAddComponent.damagePerHit        = projModifier.ChainLightningDamagePerHit;
                orAddComponent.damageCooldown      = projModifier.ChainLightningDamageCooldown;
                if (projModifier.ChainLightningDispersalParticles != null)
                {
                    orAddComponent.UsesDispersalParticles        = true;
                    orAddComponent.DispersalParticleSystemPrefab = projModifier.ChainLightningDispersalParticles;
                    orAddComponent.DispersalDensity      = projModifier.ChainLightningDispersalDensity;
                    orAddComponent.DispersalMinCoherency = projModifier.ChainLightningDispersalMinCoherence;
                    orAddComponent.DispersalMaxCoherency = projModifier.ChainLightningDispersalMaxCoherence;
                }
                else
                {
                    orAddComponent.UsesDispersalParticles = false;
                }
            }
            this.zapperMainProjectile = proj;
            this.m_elecImmunity       = new DamageTypeModifier
            {
                damageMultiplier = 0,
                damageType       = CoreDamageTypes.Electric
            };
            player.healthHaver.damageTypeModifiers.Add(this.m_elecImmunity);
            player.PostProcessProjectile += this.OnPostProcessProjectile;
        }
        public override void PostProcessProjectile(Projectile projectile)
        {
            base.PostProcessProjectile(projectile);
            float      length            = 0;
            BraveInput instanceForPlayer = BraveInput.GetInstanceForPlayer((this.gun.CurrentOwner as PlayerController).PlayerIDX);
            bool       flag2             = instanceForPlayer == null;

            if (!flag2)
            {
                bool flag3 = instanceForPlayer.IsKeyboardAndMouse(false);
                if (flag3)
                {
                    Vector2 a;
                    a = (this.gun.CurrentOwner as PlayerController).unadjustedAimPoint.XY();
                    a.Normalize();
                    length = Vector2.Distance(projectile.sprite.WorldCenter, a) * 8f;
                    float magnitude = (projectile.sprite.WorldCenter - a).magnitude;
                }
                else
                {
                    length = 8f;
                }
            }
            bool isMiddleProj = false;

            if (this.lastUp == null)
            {
                projectile.OverrideMotionModule = new HelixProjectileMotionModule
                {
                    helixAmplitude  = 2f,
                    helixWavelength = 8f,
                    ForceInvert     = false
                };
                projectile.gameObject.AddComponent <EyeProjUp>();
                this.lastUp = projectile;
            }
            else if (this.lastDown == null)
            {
                projectile.OverrideMotionModule = new HelixProjectileMotionModule
                {
                    helixAmplitude  = 2f,
                    helixWavelength = 8f,
                    ForceInvert     = true
                };
                projectile.gameObject.AddComponent <EyeProjDown>();
                this.lastDown = projectile;
            }
            else
            {
                projectile.gameObject.AddComponent <EyeProjMain>().boundUp   = this.lastUp;
                projectile.gameObject.GetComponent <EyeProjMain>().boundDown = this.lastDown;
                projectile.gameObject.GetComponent <EyeProjMain>().ownerHasThunderstormSynergy = this.gun.CurrentOwner is PlayerController && (this.gun.CurrentOwner as PlayerController).PlayerHasActiveSynergy("#GUNDERSTORM");
                if (this.gun.CurrentOwner != null && this.gun.CurrentOwner is PlayerController)
                {
                    projectile.gameObject.GetComponent <EyeProjMain>().divider = (this.gun.CurrentOwner as PlayerController).stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed);
                }
                this.lastUp   = null;
                this.lastDown = null;
                isMiddleProj  = true;
            }
            if (this.gun.CurrentOwner is PlayerController && (this.gun.CurrentOwner as PlayerController).PlayerHasActiveSynergy("#GUNDERSTORM"))
            {
                ComplexProjectileModifier shockRounds    = PickupObjectDatabase.GetById(298) as ComplexProjectileModifier;
                ChainLightningModifier    orAddComponent = projectile.gameObject.GetOrAddComponent <ChainLightningModifier>();
                orAddComponent.LinkVFXPrefab       = shockRounds.ChainLightningVFX;
                orAddComponent.damageTypes         = shockRounds.ChainLightningDamageTypes;
                orAddComponent.maximumLinkDistance = shockRounds.ChainLightningMaxLinkDistance;
                orAddComponent.damagePerHit        = shockRounds.ChainLightningDamagePerHit;
                orAddComponent.damageCooldown      = shockRounds.ChainLightningDamageCooldown;
                if (isMiddleProj)
                {
                    orAddComponent.maximumLinkDistance    *= 3f;
                    orAddComponent.CanChainToAnyProjectile = true;
                }
                if (shockRounds.ChainLightningDispersalParticles != null)
                {
                    orAddComponent.UsesDispersalParticles        = true;
                    orAddComponent.DispersalParticleSystemPrefab = shockRounds.ChainLightningDispersalParticles;
                    orAddComponent.DispersalDensity      = shockRounds.ChainLightningDispersalDensity;
                    orAddComponent.DispersalMinCoherency = shockRounds.ChainLightningDispersalMinCoherence;
                    orAddComponent.DispersalMaxCoherency = shockRounds.ChainLightningDispersalMaxCoherence;
                }
                else
                {
                    orAddComponent.UsesDispersalParticles = false;
                }
            }
        }
Example #5
0
 protected override void Update()
 {
     base.Update();
     if (this.m_pickedUp && this.m_owner != null)
     {
         if (this.m_owner.CurrentRoom != null && this.m_owner.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All) != null)
         {
             foreach (AIActor aiactor in this.m_owner.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All))
             {
                 if (aiactor.GetComponent <ZappedEnemyBehaviour>() == null)
                 {
                     GameObject obj  = SpawnManager.SpawnProjectile(Toolbox.GetGunById(38).DefaultModule.projectiles[0].gameObject, aiactor.sprite.WorldCenter, Quaternion.identity);
                     Projectile proj = obj.GetComponent <Projectile>();
                     if (proj != null)
                     {
                         proj.sprite.renderer.enabled          = false;
                         proj.specRigidbody.CollideWithOthers  = false;
                         proj.specRigidbody.CollideWithTileMap = false;
                         proj.baseData.damage = 0;
                         proj.baseData.range  = float.MaxValue;
                         proj.baseData.speed  = 0;
                         proj.Owner           = this.m_owner;
                         proj.Shooter         = this.m_owner.specRigidbody;
                         proj.gameObject.AddComponent <ZapperProjectileBehaviour>().manuallyAssignedEnemy = aiactor;
                         ComplexProjectileModifier projModifier   = PickupObjectDatabase.GetById(298) as ComplexProjectileModifier;
                         ChainLightningModifier    orAddComponent = obj.gameObject.GetOrAddComponent <ChainLightningModifier>();
                         orAddComponent.LinkVFXPrefab       = projModifier.ChainLightningVFX;
                         orAddComponent.damageTypes         = projModifier.ChainLightningDamageTypes;
                         orAddComponent.maximumLinkDistance = projModifier.ChainLightningMaxLinkDistance;
                         orAddComponent.damagePerHit        = projModifier.ChainLightningDamagePerHit;
                         orAddComponent.damageCooldown      = projModifier.ChainLightningDamageCooldown;
                         if (projModifier.ChainLightningDispersalParticles != null)
                         {
                             orAddComponent.UsesDispersalParticles        = true;
                             orAddComponent.DispersalParticleSystemPrefab = projModifier.ChainLightningDispersalParticles;
                             orAddComponent.DispersalDensity      = projModifier.ChainLightningDispersalDensity;
                             orAddComponent.DispersalMinCoherency = projModifier.ChainLightningDispersalMinCoherence;
                             orAddComponent.DispersalMaxCoherency = projModifier.ChainLightningDispersalMaxCoherence;
                         }
                         else
                         {
                             orAddComponent.UsesDispersalParticles = false;
                         }
                     }
                     aiactor.gameObject.AddComponent <ZappedEnemyBehaviour>();
                 }
             }
         }
         if (this.zapperMainProjectile == null)
         {
             GameObject obj  = SpawnManager.SpawnProjectile(Toolbox.GetGunById(38).DefaultModule.projectiles[0].gameObject, this.m_owner.sprite.WorldCenter, Quaternion.identity);
             Projectile proj = obj.GetComponent <Projectile>();
             if (proj != null)
             {
                 proj.sprite.renderer.enabled          = false;
                 proj.specRigidbody.CollideWithOthers  = false;
                 proj.specRigidbody.CollideWithTileMap = false;
                 proj.baseData.damage = 0;
                 proj.baseData.range  = float.MaxValue;
                 proj.baseData.speed  = 0;
                 proj.Owner           = this.m_owner;
                 proj.Shooter         = this.m_owner.specRigidbody;
                 proj.gameObject.AddComponent <ZapperMainProjectileBehaviour>().manuallyAssignedPlayer = this.m_owner;
                 ComplexProjectileModifier projModifier   = PickupObjectDatabase.GetById(298) as ComplexProjectileModifier;
                 ChainLightningModifier    orAddComponent = obj.gameObject.GetOrAddComponent <ChainLightningModifier>();
                 orAddComponent.LinkVFXPrefab       = projModifier.ChainLightningVFX;
                 orAddComponent.damageTypes         = projModifier.ChainLightningDamageTypes;
                 orAddComponent.maximumLinkDistance = projModifier.ChainLightningMaxLinkDistance;
                 orAddComponent.damagePerHit        = projModifier.ChainLightningDamagePerHit;
                 orAddComponent.damageCooldown      = projModifier.ChainLightningDamageCooldown;
                 if (projModifier.ChainLightningDispersalParticles != null)
                 {
                     orAddComponent.UsesDispersalParticles        = true;
                     orAddComponent.DispersalParticleSystemPrefab = projModifier.ChainLightningDispersalParticles;
                     orAddComponent.DispersalDensity      = projModifier.ChainLightningDispersalDensity;
                     orAddComponent.DispersalMinCoherency = projModifier.ChainLightningDispersalMinCoherence;
                     orAddComponent.DispersalMaxCoherency = projModifier.ChainLightningDispersalMaxCoherence;
                 }
                 else
                 {
                     orAddComponent.UsesDispersalParticles = false;
                 }
             }
             this.zapperMainProjectile = proj;
         }
     }
 }
Example #6
0
 protected override void Update()
 {
     base.Update();
     if (this.m_pickedUp && this.m_owner != null)
     {
         if (this.m_owner.Velocity.magnitude > 0.05f && !this.m_owner.IsDodgeRolling)
         {
             this.m_movementElapsed += BraveTime.DeltaTime;
             if (this.m_movementElapsed > 2f && !this.m_isCurrentlyActive)
             {
                 this.EnableVfx();
                 this.m_isCurrentlyActive = true;
             }
             if (this.m_isCurrentlyActive && this.m_currentSprunSpinVfx == null)
             {
                 this.m_currentSprunSpinVfx = Toolbox.CreateSprenSpun(this.m_owner.CenterPosition);
                 this.m_currentSprunSpinVfx.transform.parent = this.m_owner.transform;
                 this.m_currentSprunSpinVfx.GetComponent <Toolbox.SprenSpunBehaviour>().ChangeDirection(Toolbox.SprenSpunBehaviour.SprenSpunRotateType.BACKWARDS);
             }
             if (this.m_isCurrentlyActive && this.m_owner.CurrentRoom != null)
             {
                 float   num     = -1f;
                 AIActor aiactor = this.m_owner.CurrentRoom.GetNearestEnemy(this.m_owner.CenterPosition, out num, true, true);
                 if (aiactor != null && this.zapperSecondaryProjectile != null)
                 {
                     this.zapperSecondaryProjectile.GetComponent <ZapperSecondaryProjectileBehaviour>().manuallyAssignedEnemy = aiactor;
                 }
                 else if (aiactor == null && this.zapperSecondaryProjectile != null)
                 {
                     this.zapperSecondaryProjectile.GetComponent <ZapperSecondaryProjectileBehaviour>().manuallyAssignedEnemy = null;
                 }
             }
         }
         else
         {
             this.m_movementElapsed = 0f;
             if (this.m_isCurrentlyActive)
             {
                 this.DisableVfx();
                 this.m_isCurrentlyActive = false;
             }
             if (this.zapperSecondaryProjectile != null)
             {
                 this.zapperSecondaryProjectile.GetComponent <ZapperSecondaryProjectileBehaviour>().manuallyAssignedEnemy = null;
             }
         }
         if (this.zapperMainProjectile == null || this.zapperSecondaryProjectile == null)
         {
             if (this.zapperMainProjectile != null)
             {
                 UnityEngine.Object.Destroy(this.zapperMainProjectile.gameObject);
             }
             if (this.zapperSecondaryProjectile != null)
             {
                 UnityEngine.Object.Destroy(this.zapperSecondaryProjectile.gameObject);
             }
             for (int i = 0; i < 2; i++)
             {
                 GameObject obj  = SpawnManager.SpawnProjectile(Toolbox.GetGunById(38).DefaultModule.projectiles[0].gameObject, this.m_owner.sprite.WorldCenter, Quaternion.identity);
                 Projectile proj = obj.GetComponent <Projectile>();
                 if (proj != null)
                 {
                     proj.sprite.renderer.enabled          = false;
                     proj.specRigidbody.CollideWithOthers  = false;
                     proj.specRigidbody.CollideWithTileMap = false;
                     proj.baseData.damage = 0;
                     proj.baseData.range  = float.MaxValue;
                     proj.baseData.speed  = 0;
                     proj.Owner           = this.m_owner;
                     proj.Shooter         = this.m_owner.specRigidbody;
                     if (zapperMainProjectile != null)
                     {
                         proj.gameObject.AddComponent <ZapperSecondaryProjectileBehaviour>().manuallyAssignedEnemy  = null;
                         proj.gameObject.GetComponent <ZapperSecondaryProjectileBehaviour>().manuallyAssignedPlayer = this.m_owner;
                     }
                     else
                     {
                         proj.gameObject.AddComponent <TeslaCoil.ZapperMainProjectileBehaviour>().manuallyAssignedPlayer = this.m_owner;
                     }
                     ComplexProjectileModifier projModifier   = PickupObjectDatabase.GetById(298) as ComplexProjectileModifier;
                     ChainLightningModifier    orAddComponent = obj.gameObject.GetOrAddComponent <ChainLightningModifier>();
                     orAddComponent.LinkVFXPrefab       = Toolbox.GetGunById(682).DefaultModule.projectiles[0].GetComponent <ChainLightningModifier>().LinkVFXPrefab;
                     orAddComponent.damageTypes         = projModifier.ChainLightningDamageTypes;
                     orAddComponent.maximumLinkDistance = projModifier.ChainLightningMaxLinkDistance;
                     orAddComponent.damagePerHit        = projModifier.ChainLightningDamagePerHit;
                     orAddComponent.damageCooldown      = projModifier.ChainLightningDamageCooldown / 5;
                     if (projModifier.ChainLightningDispersalParticles != null)
                     {
                         orAddComponent.UsesDispersalParticles        = true;
                         orAddComponent.DispersalParticleSystemPrefab = projModifier.ChainLightningDispersalParticles;
                         orAddComponent.DispersalDensity      = projModifier.ChainLightningDispersalDensity;
                         orAddComponent.DispersalMinCoherency = projModifier.ChainLightningDispersalMinCoherence;
                         orAddComponent.DispersalMaxCoherency = projModifier.ChainLightningDispersalMaxCoherence;
                     }
                     else
                     {
                         orAddComponent.UsesDispersalParticles = false;
                     }
                 }
                 if (zapperMainProjectile != null)
                 {
                     this.zapperSecondaryProjectile = proj;
                 }
                 else
                 {
                     this.zapperMainProjectile = proj;
                 }
             }
         }
     }
 }
        public static void Init()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("The Sequencer", "sequencer");

            gun.idleAnimation  = "sequencer1_idle";
            gun.shootAnimation = "sequencer1_fire";
            Game.Items.Rename("outdated_gun_mods:the_sequencer", "spapi:the_sequencer");
            SequencerController controller = gun.gameObject.AddComponent <SequencerController>();

            GunExt.SetShortDescription(gun, "Change Your Mind");
            GunExt.SetLongDescription(gun, "A worn gun with an enchanted chamber. It's enchantment makes the gun change it's mood (as well as projectiles) very quickly. Like after every shot.\n\nThis gun was once worn by a famous gungeoneer and handcrafted " +
                                      "by him too. At first it was a normal gun, but a gunjurer accidentaly threw a magical spell on the chamber, enchanting it with the elements.");
            GunExt.SetupSprite(gun, null, "sequencer1_idle_001", 8);
            GunExt.SetAnimationFPS(gun, gun.shootAnimation, 16);
            GunExt.SetAnimationFPS(gun, gun.reloadAnimation, 16);
            GunExt.AddProjectileModuleFrom(gun, "klobb", true, false);
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.SemiAutomatic;
            gun.DefaultModule.cooldownTime  = 0.50f;
            gun.DefaultModule.angleVariance = 0;
            //setting up fire proj.
            Projectile fireProjectile = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(56) as Gun).DefaultModule.projectiles[0]);

            fireProjectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(fireProjectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(fireProjectile);
            fireProjectile.transform.parent = gun.barrelOffset;
            fireProjectile.baseData.damage  = 20f;
            fireProjectile.baseData.force  /= 2f;
            fireProjectile.baseData.range   = 9999;
            fireProjectile.DefaultTintColor = Color.red;
            fireProjectile.HasDefaultTint   = true;
            fireProjectile.AppliesFire      = true;
            fireProjectile.FireApplyChance  = 100;
            fireProjectile.fireEffect       = (PickupObjectDatabase.GetById(295) as BulletStatusEffectItem).FireModifierEffect;
            fireProjectile.damageTypes      = CoreDamageTypes.Fire;
            fireProjectile.name             = "Sequencer_FireProjectile";
            SequencerController.replacementProjectiles.Add(fireProjectile);
            //setting up poison proj;
            Projectile poisonProjectile = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(56) as Gun).DefaultModule.projectiles[0]);

            poisonProjectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(poisonProjectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(poisonProjectile);
            poisonProjectile.transform.parent  = gun.barrelOffset;
            poisonProjectile.baseData.damage   = 20f;
            poisonProjectile.baseData.force   /= 2f;
            poisonProjectile.baseData.range    = 9999;
            poisonProjectile.DefaultTintColor  = Color.green;
            poisonProjectile.HasDefaultTint    = true;
            poisonProjectile.AppliesPoison     = true;
            poisonProjectile.PoisonApplyChance = 100;
            poisonProjectile.healthEffect      = (PickupObjectDatabase.GetById(204) as BulletStatusEffectItem).HealthModifierEffect;
            poisonProjectile.damageTypes       = CoreDamageTypes.Poison;
            poisonProjectile.name = "Sequencer_PoisonProjectile";
            SequencerController.replacementProjectiles.Add(poisonProjectile);
            //setting up electric proj;
            Projectile electricProjectile = UnityEngine.Object.Instantiate <Projectile>((PickupObjectDatabase.GetById(56) as Gun).DefaultModule.projectiles[0]);

            electricProjectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(electricProjectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(electricProjectile);
            electricProjectile.transform.parent = gun.barrelOffset;
            electricProjectile.baseData.damage  = 28f;
            electricProjectile.baseData.force  /= 2f;
            electricProjectile.baseData.range   = 9999;
            electricProjectile.DefaultTintColor = Color.blue;
            electricProjectile.HasDefaultTint   = true;
            ComplexProjectileModifier chainBullets   = PickupObjectDatabase.GetById(298) as ComplexProjectileModifier;
            ChainLightningModifier    orAddComponent = electricProjectile.gameObject.GetOrAddComponent <ChainLightningModifier>();

            orAddComponent.LinkVFXPrefab       = chainBullets.ChainLightningVFX;
            orAddComponent.damageTypes         = chainBullets.ChainLightningDamageTypes;
            orAddComponent.maximumLinkDistance = chainBullets.ChainLightningMaxLinkDistance;
            orAddComponent.damagePerHit        = chainBullets.ChainLightningDamagePerHit;
            orAddComponent.damageCooldown      = chainBullets.ChainLightningDamageCooldown;
            if (chainBullets.ChainLightningDispersalParticles != null)
            {
                orAddComponent.UsesDispersalParticles        = true;
                orAddComponent.DispersalParticleSystemPrefab = chainBullets.ChainLightningDispersalParticles;
                orAddComponent.DispersalDensity      = chainBullets.ChainLightningDispersalDensity;
                orAddComponent.DispersalMinCoherency = chainBullets.ChainLightningDispersalMinCoherence;
                orAddComponent.DispersalMaxCoherency = chainBullets.ChainLightningDispersalMaxCoherence;
            }
            else
            {
                orAddComponent.UsesDispersalParticles = false;
            }
            electricProjectile.OnDestruction += controller.AddElectricGoop;
            electricProjectile.damageTypes    = CoreDamageTypes.Electric;
            electricProjectile.name           = "Sequencer_ElectricProjectile";
            SequencerController.replacementProjectiles.Add(electricProjectile);
            gun.reloadTime = 1f;
            gun.DefaultModule.numberOfShotsInClip = 3;
            gun.DefaultModule.ammoType            = GameUIAmmoType.AmmoType.CUSTOM;
            gun.SetBaseMaxAmmo(200);
            gun.DefaultModule.projectiles = new List <Projectile> {
                fireProjectile
            };
            gun.quality = PickupObject.ItemQuality.S;
            gun.encounterTrackable.EncounterGuid = "sequencer_gun";
            gun.gunClass = GunClass.PISTOL;
            gun.barrelOffset.transform.localPosition = new Vector3(1.15f, 0.45f, 0f);
            ETGMod.Databases.Items.Add(gun, null, "ANY");
            gun.AddToBlacksmithShop();
            gun.RemovePeskyQuestionmark();
            gun.PlaceItemInAmmonomiconAfterItemById(341);
        }
Example #8
0
        protected override void Update()
        {
            try
            {
                base.Update();
                if (this.m_pickedUp && this.m_owner != null)
                {
                    if (ActiveProjectiles.Count != 0 && ActiveProjectiles[0] && ActiveProjectiles != null)
                    {
                        bool flag2 = this.m_owner.CurrentRoom != null && this.m_owner.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All) != null;
                        if (flag2)
                        {
                            foreach (AIActor aiactor in this.m_owner.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All))
                            {
                                if (aiactor.GetComponent <ThunderRounds.ZappedEnemyBehaviour>() == null)
                                {
                                    if (Vector2.Distance(aiactor.CenterPosition, (this.zapperMainProjectile == null) ? ActiveProjectiles[0].transform.position : this.zapperMainProjectile.transform.position) < chainGlitchPreventinator)
                                    {
                                        GameObject gameObject = SpawnManager.SpawnProjectile((PickupObjectDatabase.GetById(38) as Gun).DefaultModule.projectiles[0].gameObject, aiactor.sprite.WorldCenter, Quaternion.identity, true);
                                        Projectile component  = gameObject.GetComponent <Projectile>();
                                        bool       flag4      = component != null;
                                        if (flag4)
                                        {
                                            component.sprite.renderer.enabled          = false;
                                            component.specRigidbody.CollideWithOthers  = false;
                                            component.specRigidbody.CollideWithTileMap = false;
                                            component.baseData.damage = 0f;
                                            component.baseData.range  = float.MaxValue;
                                            component.baseData.speed  = 0f;
                                            component.Owner           = this.m_owner;
                                            component.Shooter         = this.m_owner.specRigidbody;
                                            component.gameObject.AddComponent <ThunderRounds.ZapperProjectileBehaviour>().manuallyAssignedEnemy = aiactor;
                                            ComplexProjectileModifier complexProjectileModifier = PickupObjectDatabase.GetById(298) as ComplexProjectileModifier;
                                            ChainLightningModifier    orAddComponent            = gameObject.gameObject.GetOrAddComponent <ChainLightningModifier>();
                                            orAddComponent.LinkVFXPrefab       = complexProjectileModifier.ChainLightningVFX;
                                            orAddComponent.damageTypes         = complexProjectileModifier.ChainLightningDamageTypes;
                                            orAddComponent.maximumLinkDistance = complexProjectileModifier.ChainLightningMaxLinkDistance;
                                            orAddComponent.damagePerHit        = m_owner.HasPassiveItem(ElectricRounds.ID) || m_owner.HasGun(13) ? 3 : complexProjectileModifier.ChainLightningDamagePerHit;
                                            orAddComponent.damageCooldown      = complexProjectileModifier.ChainLightningDamageCooldown;
                                            bool flag5 = complexProjectileModifier.ChainLightningDispersalParticles != null;
                                            if (flag5)
                                            {
                                                orAddComponent.UsesDispersalParticles        = true;
                                                orAddComponent.DispersalParticleSystemPrefab = complexProjectileModifier.ChainLightningDispersalParticles;
                                                orAddComponent.DispersalDensity      = complexProjectileModifier.ChainLightningDispersalDensity;
                                                orAddComponent.DispersalMinCoherency = complexProjectileModifier.ChainLightningDispersalMinCoherence;
                                                orAddComponent.DispersalMaxCoherency = complexProjectileModifier.ChainLightningDispersalMaxCoherence;
                                            }
                                            else
                                            {
                                                orAddComponent.UsesDispersalParticles = false;
                                            }

                                            chainGlitchPreventinator += Vector2.Distance(aiactor.CenterPosition, (this.zapperMainProjectile == null) ? ActiveProjectiles[0].transform.position : this.zapperMainProjectile.transform.position);
                                        }
                                        LightningProjectiles.Add(component);
                                        aiactor.gameObject.AddComponent <ThunderRounds.ZappedEnemyBehaviour>();
                                    }
                                }
                            }
                        }
                        bool flag6 = this.zapperMainProjectile == null;
                        if (flag6)
                        {
                            GameObject gameObject2 = SpawnManager.SpawnProjectile((PickupObjectDatabase.GetById(38) as Gun).DefaultModule.projectiles[0].gameObject, this.m_owner.sprite.WorldCenter, Quaternion.identity, true);
                            Projectile component2  = gameObject2.GetComponent <Projectile>();
                            bool       flag7       = component2 != null;
                            if (flag7)
                            {
                                component2.sprite.renderer.enabled          = false;
                                component2.specRigidbody.CollideWithOthers  = false;
                                component2.specRigidbody.CollideWithTileMap = false;
                                component2.baseData.damage = 0f;
                                component2.baseData.range  = float.MaxValue;
                                component2.baseData.speed  = 0f;
                                component2.Owner           = this.m_owner;
                                component2.Shooter         = this.m_owner.specRigidbody;
                                component2.gameObject.AddComponent <ThunderRounds.ZapperMainProjectileBehaviour>().manuallyAssignedPlayer = this.ActiveProjectiles[0];
                                ComplexProjectileModifier complexProjectileModifier2 = PickupObjectDatabase.GetById(298) as ComplexProjectileModifier;
                                ChainLightningModifier    orAddComponent2            = gameObject2.gameObject.GetOrAddComponent <ChainLightningModifier>();
                                orAddComponent2.LinkVFXPrefab       = complexProjectileModifier2.ChainLightningVFX;
                                orAddComponent2.damageTypes         = complexProjectileModifier2.ChainLightningDamageTypes;
                                orAddComponent2.maximumLinkDistance = complexProjectileModifier2.ChainLightningMaxLinkDistance;
                                orAddComponent2.damagePerHit        = m_owner.HasPassiveItem(ElectricRounds.ID) || m_owner.HasGun(13) ? 3 : complexProjectileModifier2.ChainLightningDamagePerHit;
                                orAddComponent2.damageCooldown      = complexProjectileModifier2.ChainLightningDamageCooldown;
                                bool flag8 = complexProjectileModifier2.ChainLightningDispersalParticles != null;
                                if (flag8)
                                {
                                    orAddComponent2.UsesDispersalParticles        = true;
                                    orAddComponent2.DispersalParticleSystemPrefab = complexProjectileModifier2.ChainLightningDispersalParticles;
                                    orAddComponent2.DispersalDensity      = complexProjectileModifier2.ChainLightningDispersalDensity;
                                    orAddComponent2.DispersalMinCoherency = complexProjectileModifier2.ChainLightningDispersalMinCoherence;
                                    orAddComponent2.DispersalMaxCoherency = complexProjectileModifier2.ChainLightningDispersalMaxCoherence;
                                }
                                else
                                {
                                    orAddComponent2.UsesDispersalParticles = false;
                                }
                            }
                            this.zapperMainProjectile = component2;
                        }
                    }
                    if (ActiveProjectiles.Count == 0)
                    {
                        foreach (Projectile projectile in LightningProjectiles)
                        {
                            if (projectile)
                            {
                                projectile.DieInAir();
                            }
                        }

                        bool safetyflag = this.m_owner.CurrentRoom != null && this.m_owner.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All) != null;
                        if (safetyflag)
                        {
                            foreach (AIActor aiactor in this.m_owner.CurrentRoom.GetActiveEnemies(RoomHandler.ActiveEnemyType.All))
                            {
                                Destroy(aiactor.gameObject.GetComponent <ThunderRounds.ZappedEnemyBehaviour>());
                            }
                        }
                    }
                }
            } catch (Exception Exc)
            {
                ETGModConsole.Log($"{Exc}");
            }
        }