private void Update() { if (!this.gun.PreventNormalFireAudio) { this.gun.PreventNormalFireAudio = true; } if (this.forme == 1) { this.gun.DefaultModule.customAmmoType = "burning hand"; this.gun.DefaultModule.projectiles[0] = SequencerController.replacementProjectiles[0]; this.gun.muzzleFlashEffects = (PickupObjectDatabase.GetById(384) as Gun).muzzleFlashEffects; } else if (this.forme == 2) { this.gun.DefaultModule.customAmmoType = "poison_blob"; this.gun.DefaultModule.projectiles[0] = SequencerController.replacementProjectiles[1]; this.gun.muzzleFlashEffects = (PickupObjectDatabase.GetById(207) as Gun).muzzleFlashEffects; } else { this.gun.DefaultModule.customAmmoType = "ghost_small"; this.gun.DefaultModule.projectiles[0] = SequencerController.replacementProjectiles[2]; this.gun.muzzleFlashEffects = (PickupObjectDatabase.GetById(156) as Gun).muzzleFlashEffects; } if (!this.gun.IsReloading) { this.reloaded = true; } if (this.gun.CurrentOwner != null && this.gun.CurrentOwner is PlayerController) { lastOwner = this.gun.CurrentOwner as PlayerController; if (this.electricityImmunity == null) { this.electricityImmunity = new DamageTypeModifier { damageMultiplier = 0, damageType = CoreDamageTypes.Electric }; this.lastOwner.healthHaver.damageTypeModifiers.Add(this.electricityImmunity); } } else { if (this.electricityImmunity != null) { this.lastOwner.healthHaver.damageTypeModifiers.Remove(this.electricityImmunity); this.electricityImmunity = null; } } this.gun.idleAnimation = SequencerController.UpdateSequencerAnimation(this, "idle", null, false); this.gun.shootAnimation = SequencerController.UpdateSequencerAnimation(this, "fire", null, true); }
public static string UpdateSequencerAnimation(SequencerController controller, string name, tk2dSpriteCollectionData collection = null, bool returnToIdle = false) { Gun gun = controller.gun; collection = (collection ?? ETGMod.Databases.Items.WeaponCollection); string text = gun.name + controller.forme + "_" + name; string text2 = text + "_"; int prefixLength = text2.Length; List <tk2dSpriteAnimationFrame> list = new List <tk2dSpriteAnimationFrame>(); for (int i = 0; i < collection.spriteDefinitions.Length; i++) { tk2dSpriteDefinition tk2dSpriteDefinition = collection.spriteDefinitions[i]; if (tk2dSpriteDefinition.Valid && tk2dSpriteDefinition.name.StartsWithInvariant(text2)) { list.Add(new tk2dSpriteAnimationFrame { spriteCollection = collection, spriteId = i }); } } if (list.Count == 0) { return(null); } tk2dSpriteAnimationClip tk2dSpriteAnimationClip = gun.spriteAnimator.Library.GetClipByName(text); if (tk2dSpriteAnimationClip == null) { tk2dSpriteAnimationClip = new tk2dSpriteAnimationClip(); tk2dSpriteAnimationClip.name = text; tk2dSpriteAnimationClip.fps = 15f; if (returnToIdle) { tk2dSpriteAnimationClip.wrapMode = tk2dSpriteAnimationClip.WrapMode.Once; } Array.Resize <tk2dSpriteAnimationClip>(ref gun.spriteAnimator.Library.clips, gun.spriteAnimator.Library.clips.Length + 1); gun.spriteAnimator.Library.clips[gun.spriteAnimator.Library.clips.Length - 1] = tk2dSpriteAnimationClip; } list.Sort((tk2dSpriteAnimationFrame x, tk2dSpriteAnimationFrame y) => int.Parse(collection.spriteDefinitions[x.spriteId].name.Substring(prefixLength)) - int.Parse(collection.spriteDefinitions[y.spriteId].name.Substring(prefixLength))); tk2dSpriteAnimationClip.frames = list.ToArray(); return(text); }
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); }