public override void PostProcessProjectile(Projectile projectile)
 {
     if (projectile.ProjectilePlayerOwner() && projectile.ProjectilePlayerOwner().PlayerHasActiveSynergy("Backstabber!"))
     {
         ProjectileSlashingBehaviour slash = projectile.gameObject.AddComponent <ProjectileSlashingBehaviour>();
         slash.DestroyBaseAfterFirstSlash           = false;
         slash.timeBetweenSlashes                   = 1;
         slash.SlashDamageUsesBaseProjectileDamage  = true;
         slash.slashParameters.playerKnockbackForce = 0;
     }
     base.PostProcessProjectile(projectile);
 }
 public override void PostProcessProjectile(Projectile projectile)
 {
     if (projectile && projectile.Owner && projectile.Owner is PlayerController)
     {
         PlayerController            player = projectile.Owner as PlayerController;
         ProjectileSlashingBehaviour slash  = projectile.gameObject.GetComponent <ProjectileSlashingBehaviour>();
         if (slash)
         {
             if (player.PlayerHasActiveSynergy("Bloodthirsty Blades") && UnityEngine.Random.value <= 0.07f)
             {
                 slash.slashParameters.projInteractMode = SlashDoer.ProjInteractMode.DESTROY;
             }
         }
     }
     base.PostProcessProjectile(projectile);
 }
        public void PostProcess(Projectile bullet, float chanceScaler)
        {
            if (bullet && bullet.Owner && bullet.Owner is PlayerController)
            {
                float procChance = 0.35f;
                procChance *= chanceScaler;
                if (UnityEngine.Random.value <= procChance)
                {
                    SlashData slashParams = new SlashData();


                    PlayerController player = bullet.Owner as PlayerController;
                    bullet.baseData.speed *= 0.5f;
                    bullet.UpdateSpeed();
                    PierceProjModifier piercing = bullet.gameObject.GetOrAddComponent <PierceProjModifier>();
                    piercing.penetratesBreakables = true;
                    piercing.penetration         += 2;
                    ProjectileSlashingBehaviour slashing = bullet.gameObject.GetOrAddComponent <ProjectileSlashingBehaviour>();
                    slashing.DestroyBaseAfterFirstSlash = false;
                    slashing.timeBetweenSlashes         = 0.30f;
                    if (player.PlayerHasActiveSynergy("Sword Mage"))
                    {
                        slashing.timeBetweenSlashes = 0.15f;
                    }

                    slashing.SlashDamageUsesBaseProjectileDamage = true;
                    if (player.PlayerHasActiveSynergy("Sabre Throw"))
                    {
                        slashParams.projInteractMode = SlashDoer.ProjInteractMode.REFLECT;
                    }
                    if (player.PlayerHasActiveSynergy("Whirling Blade"))
                    {
                        slashing.doSpinAttack = true;
                    }
                    if (player.PlayerHasActiveSynergy("Live By The Sword"))
                    {
                        bullet.OnDestruction += this.OnDestruction;
                    }

                    slashing.slashParameters = slashParams;
                }
            }
        }
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Mantid Augment", "mantidaugment");

            Game.Items.Rename("outdated_gun_mods:mantid_augment", "nn:mantid_augment");
            var behav = gun.gameObject.AddComponent <MantidAugment>();

            behav.preventNormalFireAudio = true;

            gun.SetShortDescription("Flashy and Lethal");
            gun.SetLongDescription("A cybernetic augment concealed in the forearm, this cruel blade extends to slash at your enemies with inhuman speed.");

            gun.SetupSprite(null, "mantidaugment_idle_001", 8);
            gun.AddPassiveStatModifier(PlayerStats.StatType.Curse, 1f, StatModifier.ModifyMethod.ADDITIVE);
            gun.AddCurrentGunStatModifier(PlayerStats.StatType.MovementSpeed, 1f, StatModifier.ModifyMethod.ADDITIVE);
            gun.SetAnimationFPS(gun.shootAnimation, 20);
            gun.SetAnimationFPS(gun.reloadAnimation, 12);

            gun.AddProjectileModuleFrom(PickupObjectDatabase.GetById(86) as Gun, true, false);

            //GUN STATS
            gun.gunHandedness               = GunHandedness.HiddenOneHanded;
            gun.DefaultModule.ammoCost      = 1;
            gun.DefaultModule.shootStyle    = ProjectileModule.ShootStyle.Automatic;
            gun.DefaultModule.sequenceStyle = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.DefaultModule.ammoType      = GameUIAmmoType.AmmoType.BEAM;
            gun.reloadTime = 1f;
            gun.muzzleFlashEffects.type              = VFXPoolType.None;
            gun.DefaultModule.cooldownTime           = 0.01f;
            gun.DefaultModule.numberOfShotsInClip    = 100;
            gun.barrelOffset.transform.localPosition = new Vector3(1.56f, 0.56f, 0f);
            gun.SetBaseMaxAmmo(2077);
            gun.ammo     = 2077;
            gun.gunClass = GunClass.FULLAUTO;
            //BULLET STATS
            Projectile projectile = UnityEngine.Object.Instantiate <Projectile>(gun.DefaultModule.projectiles[0]);

            projectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(projectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(projectile);
            projectile.baseData.damage        *= 2f;
            projectile.baseData.force         *= 0.5f;
            projectile.sprite.renderer.enabled = false;
            NoCollideBehaviour nocollide = projectile.gameObject.AddComponent <NoCollideBehaviour>();

            nocollide.worksOnEnemies     = true;
            nocollide.worksOnProjectiles = true;
            projectile.specRigidbody.CollideWithTileMap = false;
            ProjectileSlashingBehaviour slashing = projectile.gameObject.AddComponent <ProjectileSlashingBehaviour>();

            slashing.DestroyBaseAfterFirstSlash          = true;
            slashing.SlashDamageUsesBaseProjectileDamage = true;
            slashing.slashParameters        = new SlashData();
            slashing.slashParameters.hitVFX = (PickupObjectDatabase.GetById(369) as Gun).DefaultModule.chargeProjectiles[0].Projectile.hitEffects.tileMapVertical;

            gun.DefaultModule.projectiles[0] = projectile;

            gun.DefaultModule.ammoType       = GameUIAmmoType.AmmoType.CUSTOM;
            gun.DefaultModule.customAmmoType = "red_beam";

            gun.quality = PickupObject.ItemQuality.A;
            ETGMod.Databases.Items.Add(gun, null, "ANY");
            MantidAugmentID = gun.PickupObjectId;
        }