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; }
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); } } } } }
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; } } }
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; } } }
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); }
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}"); } }