// Token: 0x06000036 RID: 54 RVA: 0x000037D8 File Offset: 0x000019D8
        public static void Add()
        {
            Gun gun = ETGMod.Databases.Items.NewGun("Robotic Injector", "directiveinject");

            Game.Items.Rename("outdated_gun_mods:robotic_injector", "bny:robotic_injector");
            gun.gameObject.AddComponent <REXNeedler>();
            GunExt.SetShortDescription(gun, "Directive: Inject");
            GunExt.SetLongDescription(gun, "An injector commonly used by hydroponic robots. Looks like its original carrier is off protocol.");
            GunExt.SetupSprite(gun, null, "directiveinject_idle_001", 11);
            GunExt.SetAnimationFPS(gun, gun.shootAnimation, 36);
            GunExt.SetAnimationFPS(gun, gun.reloadAnimation, 7);
            GunExt.SetAnimationFPS(gun, gun.idleAnimation, 1);
            GunExt.AddProjectileModuleFrom(gun, PickupObjectDatabase.GetById(26) as Gun, true, false);
            gun.gunHandedness  = GunHandedness.HiddenOneHanded;
            gun.gunSwitchGroup = (PickupObjectDatabase.GetById(26) as Gun).gunSwitchGroup;
            gun.DefaultModule.burstShotCount    = 3;
            gun.DefaultModule.burstCooldownTime = 0.0833f;
            gun.DefaultModule.ammoCost          = 1;
            gun.DefaultModule.shootStyle        = ProjectileModule.ShootStyle.Burst;
            gun.DefaultModule.sequenceStyle     = ProjectileModule.ProjectileSequenceStyle.Random;
            gun.reloadTime = 0f;
            gun.DefaultModule.cooldownTime        = .7f;
            gun.DefaultModule.numberOfShotsInClip = 300;
            gun.SetBaseMaxAmmo(300);
            gun.quality = PickupObject.ItemQuality.C;
            gun.DefaultModule.angleVariance      = 0f;
            gun.encounterTrackable.EncounterGuid = "THE PLANT, THE PLANT, ITS THE PLANT";
            Projectile projectile = UnityEngine.Object.Instantiate <Projectile>(gun.DefaultModule.projectiles[0]);

            projectile.gameObject.SetActive(false);
            FakePrefab.MarkAsFakePrefab(projectile.gameObject);
            UnityEngine.Object.DontDestroyOnLoad(projectile);
            gun.DefaultModule.projectiles[0] = projectile;
            projectile.PoisonApplyChance     = 1f;
            projectile.baseData.damage       = 3f;
            projectile.baseData.speed        = 20f;
            projectile.baseData.range       *= 10f;
            projectile.baseData.force       *= 0.3f;
            projectile.HasDefaultTint        = true;
            projectile.SetProjectileSpriteRight("directiveinject_projectile_001", 11, 3, true, tk2dBaseSprite.Anchor.MiddleCenter, new int?(8), new int?(2), null, null, null);
            projectile.AdditionalScaleMultiplier = 1.1f;
            projectile.pierceMinorBreakables     = true;
            projectile.transform.parent          = gun.barrelOffset;
            projectile.damageTypes |= CoreDamageTypes.Poison;
            PoisonForDummiesLikeMe auegh = projectile.gameObject.AddComponent <PoisonForDummiesLikeMe>();

            auegh.procChance     = 1;
            auegh.useSpecialTint = false;
            ETGMod.Databases.Items.Add(gun, null, "ANY");
            gun.AddToSubShop(ItemBuilder.ShopType.Goopton, 1f);
        }
Exemple #2
0
        public override void PostProcessProjectile(Projectile projectile)
        {
            bool hasDeterminedValidFloor = false;

            if (GameManager.Instance.Dungeon.IsGlitchDungeon) //GLITCHED FLOOR BONUS
            {
                projectile.baseData.damage *= 3;
            }
            else
            {
                switch (GameManager.Instance.Dungeon.tileIndices.tilesetId)
                {
                case GlobalDungeonData.ValidTilesets.CASTLEGEON:     //KEEP
                {
                    projectile.baseData.damage *= 1.4f;
                    projectile.baseData.speed  *= 1.4f;
                }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.SEWERGEON:     //OUBLIETTE
                {
                    PoisonForDummiesLikeMe auegh = projectile.gameObject.AddComponent <PoisonForDummiesLikeMe>();
                    auegh.procChance = 1;
                }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.JUNGLEGEON:     //JUNGLE
                {
                    projectile.baseData.damage *= 1.6f;
                    projectile.baseData.speed  *= 1.6f;
                }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.GUNGEON:     //GUNGEON PROPER
                {
                    projectile.baseData.range             = 9f;
                    projectile.baseData.speed             = 15f;
                    projectile.AdditionalScaleMultiplier *= 1.25f;
                    projectile.baseData.damage           *= 2f;
                }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.CATHEDRALGEON:     //ABBEY
                {
                    HomingModifier homing = projectile.gameObject.AddComponent <HomingModifier>();
                    homing.HomingRadius    = 25f;
                    homing.AngularVelocity = 100f;
                }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.MINEGEON:     //MINES
                {
                    projectile.baseData.damage *= 1.6f;
                    projectile.baseData.force  *= 2f;
                }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.RATGEON:     //RAT LAIR
                {
                    Cheesesprayer cheese = projectile.gameObject.AddComponent <Cheesesprayer>();
                    cheese.projectileToSpawn = (PickupObjectDatabase.GetById(626) as Gun).DefaultModule.projectiles[0];
                }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.CATACOMBGEON:     // HOLLOW
                {
                    projectile.OnHitEnemy += (Action <Projectile, SpeculativeRigidbody, bool>)Delegate.Combine(projectile.OnHitEnemy, new Action <Projectile, SpeculativeRigidbody, bool>(this.cold));

                    //FIX FREEZE EFFECT
                }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.OFFICEGEON:     //R&G DEPT
                {
                    projectile.OnDestruction += this.kerboomer;
                }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.WESTGEON:     //OLD WEST FLOOR (EXPAND)
                {
                    projectile.baseData.damage *= 1.8f;
                    projectile.baseData.speed  *= 1.8f;
                }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.FORGEGEON:     //FORGE
                {
                    projectile.OnHitEnemy += (Action <Projectile, SpeculativeRigidbody, bool>)Delegate.Combine(projectile.OnHitEnemy, new Action <Projectile, SpeculativeRigidbody, bool>(this.fire));
                }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.HELLGEON:     //BULLET HELL
                    if (GameManager.IsGunslingerPast)
                    {
                        projectile.specRigidbody.OnPreRigidbodyCollision = (SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate)Delegate.Combine(projectile.specRigidbody.OnPreRigidbodyCollision, new SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate(this.HandlePreCollision));
                    }
                    else
                    {
                        projectile.specRigidbody.OnPreRigidbodyCollision = (SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate)Delegate.Combine(projectile.specRigidbody.OnPreRigidbodyCollision, new SpeculativeRigidbody.OnPreRigidbodyCollisionDelegate(this.HandlePreCollision));
                    }
                    hasDeterminedValidFloor = true;
                    break;

                case GlobalDungeonData.ValidTilesets.BELLYGEON:     //BELLY
                {
                    projectile.baseData.damage *= 1.8f;
                    projectile.baseData.speed  *= 1.8f;
                }
                break;
                }
                //-----------------------------------------DEFAULT CATCH EFFECT
                if (!hasDeterminedValidFloor)
                {
                    projectile.baseData.damage *= 3;
                }
            }
        }