Exemplo n.º 1
0
        public static void Init()
        {
            //The name of the item
            string itemName = "Material Emancipation Grill";

            //Refers to an embedded png in the project. Make sure to embed your resources!
            string resourceName = "CustomItems/Resources/P1/MEG";

            //Create new GameObject
            GameObject obj = new GameObject();

            //Add a ActiveItem component to the object
            var item = obj.AddComponent <HologramItem>();

            //Generate a new GameObject with a sprite component
            ItemBuilder.AddSpriteToObject(itemName, resourceName, obj);

            //Ammonomicon entry variables
            string shortDesc = "For Science";
            string longDesc  = "Creates a field around the user that vaporizes unauthorized materials.\n\n" +
                               "This handy piece of technology found its way to the Gungeon in the hands of a " +
                               "mysteriously silent woman. Some say she possessed a form of serious brain damage.";

            //Adds the item to the gungeon item list, the ammonomicon, the loot table, etc.
            ItemBuilder.SetupItem(item, shortDesc, longDesc, "kts");

            //Set the cooldown type and duration of the cooldown
            ItemBuilder.SetCooldownType(item, ItemBuilder.CooldownType.Damage, 1000);

            //Set some other fields
            item.consumable = false;
            item.quality    = ItemQuality.C;

            effect = GetCombineEffect();
        }
        private void PostProcessProjectile(Projectile sourceProjectile, float effectChanceScalar)
        {
            try
            {
                if (sourceProjectile.GetComponent <HasBeenBulletShuffled>() == null)
                {
                    int num = UnityEngine.Random.Range(1, 55);
                    //VFXToolbox.DoStringSquirt(num.ToString(), sourceProjectile.ProjectilePlayerOwner().specRigidbody.UnitCenter, Color.red);
                    switch (num)
                    {
                    case 1:     //+1 Bullets ------------------------------- WORKS
                        sourceProjectile.baseData.damage *= 1.25f;
                        break;

                    case 2:     //Rocket Powered Bullets ------------------------------- WORKS
                        sourceProjectile.baseData.damage *= 1.1f;
                        sourceProjectile.baseData.speed  *= 1.5f;
                        sourceProjectile.UpdateSpeed();
                        break;

                    case 3:     //Devolver Bullets ------------------------------- WORKS
                        AdvancedTransmogrifyComponent advancedTransmog = sourceProjectile.gameObject.AddComponent <AdvancedTransmogrifyComponent>();
                        advancedTransmog.TransmogDataList = new List <AdvancedTransmogrifyComponent.TransmogData>()
                        {
                            new AdvancedTransmogrifyComponent.TransmogData()
                            {
                                identifier        = "BulletShuffle",
                                maintainHPPercent = false,
                                TargetGuid        = "05891b158cd542b1a5f3df30fb67a7ff",
                                TransmogChance    = 1,
                            }
                        };
                        break;

                    case 4:     //Vorpal Bullets
                        StartCoroutine(EraseAndReplace(sourceProjectile, PickupObjectDatabase.GetById(640).GetComponent <ComplexProjectileModifier>().CriticalProjectile));
                        break;

                    case 5:     //Katana Bullets ------------------------------- WORKS
                        sourceProjectile.OnHitEnemy += DoKatana;
                        break;

                    case 6:     //Hungry Bullets ------------------------------- WORKS
                        HungryProjectileModifier hungry = sourceProjectile.gameObject.GetOrAddComponent <HungryProjectileModifier>();
                        hungry.HungryRadius = 1.5f;
                        hungry.DamagePercentGainPerSnack = 0.25f;
                        hungry.MaxMultiplier             = 3f;
                        hungry.MaximumBulletsEaten       = 10;
                        sourceProjectile.AdjustPlayerProjectileTint(ExtendedColours.purple, 1);
                        break;

                    case 7:     //Heavy Bullets ------------------------------- WORKS
                        sourceProjectile.baseData.damage *= 1.25f;
                        sourceProjectile.baseData.speed  *= 0.5f;
                        sourceProjectile.baseData.force  *= 2f;
                        sourceProjectile.RuntimeUpdateScale(1.25f);
                        sourceProjectile.UpdateSpeed();
                        break;

                    case 8:     //Bouncy Bullets ------------------------------- WORKS
                        BounceProjModifier bounce = sourceProjectile.gameObject.GetOrAddComponent <BounceProjModifier>();
                        bounce.numberOfBounces++;
                        break;

                    case 9:     //Explosive Rounds ------------------------------- WORKS
                        ExplosiveModifier explosion = sourceProjectile.gameObject.AddComponent <ExplosiveModifier>();
                        explosion.doExplosion   = true;
                        explosion.explosionData = StaticExplosionDatas.explosiveRoundsExplosion;
                        break;

                    case 10:     //Ghost Bullets ------------------------------- WORKS
                        PierceProjModifier piercing = sourceProjectile.gameObject.AddComponent <PierceProjModifier>();
                        piercing.penetration++;
                        break;

                    case 11:     //Irradiated Lead ------------------------------- WORKS
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.irradiatedLeadEffect);
                        sourceProjectile.AdjustPlayerProjectileTint(ExtendedColours.poisonGreen, 1);
                        break;

                    case 12:     //Hot Lead ------------------------------- WORKS
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.hotLeadEffect);
                        sourceProjectile.AdjustPlayerProjectileTint(Color.red, 1);
                        break;

                    case 13:     //Battery Bullets ------------------------------- WORKS
                        sourceProjectile.damageTypes |= CoreDamageTypes.Electric;
                        break;

                    case 14:     //Frost Bullets (Actully just insta freeze but whatever)
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.chaosBulletsFreeze);
                        sourceProjectile.AdjustPlayerProjectileTint(ExtendedColours.freezeBlue, 1);
                        break;

                    case 15:     //Charming Rounds ------------------------------- WORKS
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.charmingRoundsEffect);
                        sourceProjectile.AdjustPlayerProjectileTint(ExtendedColours.charmPink, 1);
                        break;

                    case 16:     //Magic Bullets ------------------------------- WORKS
                        AdvancedTransmogrifyComponent advancedTransmog2 = sourceProjectile.gameObject.AddComponent <AdvancedTransmogrifyComponent>();
                        advancedTransmog2.TransmogDataList = new List <AdvancedTransmogrifyComponent.TransmogData>()
                        {
                            new AdvancedTransmogrifyComponent.TransmogData()
                            {
                                identifier        = "BulletShuffle",
                                maintainHPPercent = false,
                                TargetGuid        = "76bc43539fc24648bff4568c75c686d1",
                                TransmogChance    = 1,
                            }
                        };
                        break;

                    case 17:     //Fat Bullets ------------------------------- WORKS
                        sourceProjectile.baseData.force *= 2f;
                        sourceProjectile.RuntimeUpdateScale(2f);
                        sourceProjectile.baseData.damage *= 1.3f;
                        break;

                    case 18:     //Angry Bullets ------------------------------- WORKS
                        AngryBulletsProjectileBehaviour angry = sourceProjectile.gameObject.AddComponent <AngryBulletsProjectileBehaviour>();
                        break;

                    case 19:     //Blank Bullets
                        BlankOnHitModifier blanking = sourceProjectile.gameObject.GetOrAddComponent <BlankOnHitModifier>();
                        blanking.useTinyBlank = true;
                        break;

                    case 20:     //Orbital Bullets Behaviour ------------------------------- WORKS
                        OrbitalBulletsBehaviour orbiting = sourceProjectile.gameObject.GetOrAddComponent <OrbitalBulletsBehaviour>();
                        break;

                    case 21:     //Shadow Bullets ------------------------------- WORKS
                        sourceProjectile.SpawnChainedShadowBullets(1, 0.05f, 1, null, true);
                        break;

                    case 22:     //Stout Bullets ------------------------------- WORKS
                        sourceProjectile.RuntimeUpdateScale(1.5f);
                        sourceProjectile.gameObject.GetOrAddComponent <StoutBulletsProjectileBehaviour>();
                        break;

                    case 23:     //Snowballets ------------------------------- WORKS
                        ScalingProjectileModifier scalingProjectileModifier = sourceProjectile.gameObject.AddComponent <ScalingProjectileModifier>();
                        scalingProjectileModifier.ScaleToDamageRatio      = 2.5f / 10f;
                        scalingProjectileModifier.MaximumDamageMultiplier = 2.5f;
                        scalingProjectileModifier.IsSynergyContingent     = false;
                        scalingProjectileModifier.PercentGainPerUnit      = 10f;
                        break;

                    case 24:     //Remote Bullets ------------------------------- WORKS
                        sourceProjectile.gameObject.GetOrAddComponent <RemoteBulletsProjectileBehaviour>();
                        break;

                    case 25:     //Zombie Bullets ------------------------------- WORKS
                        sourceProjectile.OnDestruction += HandleZombieEffect;
                        break;

                    case 26:     //Flak Bullets ------------------------------- WORKS
                        sourceProjectile.gameObject.GetOrAddComponent <FlakBulletsProjectileBehaviour>();
                        break;

                    case 27:     //Silver Bullets ------------------------------- WORKS
                        sourceProjectile.BossDamageMultiplier         *= 1.25f;
                        sourceProjectile.BlackPhantomDamageMultiplier *= 2.25f;
                        sourceProjectile.AdjustPlayerProjectileTint(ExtendedColours.silvedBulletsSilver, 1);
                        break;

                    case 28:     //Gilded Bullets ------------------------------- WORKS
                        float gildnum = 0f;
                        ScalingStatBoostItem gildedbullets = PickupObjectDatabase.GetById(532).GetComponent <ScalingStatBoostItem>();
                        gildnum = Mathf.Clamp01(Mathf.InverseLerp(gildedbullets.ScalingTargetMin, gildedbullets.ScalingTargetMax, sourceProjectile.ProjectilePlayerOwner().carriedConsumables.Currency));
                        gildnum = gildedbullets.ScalingCurve.Evaluate(gildnum);
                        float gildnum2 = Mathf.Lerp(gildedbullets.MinScaling, gildedbullets.MaxScaling, gildnum);
                        sourceProjectile.baseData.damage *= gildnum2;
                        sourceProjectile.AdjustPlayerProjectileTint(gildedbullets.TintColor, gildedbullets.TintPriority, 0f);
                        break;

                    case 29:     //Cursed Bullets ------------------------------- WORKS
                        float cursenum = 0f;
                        ScalingStatBoostItem cursedBullets = PickupObjectDatabase.GetById(571).GetComponent <ScalingStatBoostItem>();
                        cursenum = Mathf.Clamp01(Mathf.InverseLerp(cursedBullets.ScalingTargetMin, cursedBullets.ScalingTargetMax, sourceProjectile.ProjectilePlayerOwner().stats.GetStatValue(PlayerStats.StatType.Curse)));
                        cursenum = cursedBullets.ScalingCurve.Evaluate(cursenum);
                        float cursenum2 = Mathf.Lerp(cursedBullets.MinScaling, cursedBullets.MaxScaling, cursenum);
                        sourceProjectile.baseData.damage *= cursenum2;
                        sourceProjectile.AdjustPlayerProjectileTint(cursedBullets.TintColor, cursedBullets.TintPriority, 0f);
                        sourceProjectile.CurseSparks = true;
                        break;

                    case 30:     //Chance Bullets
                        DoChanceBulletsEffect(sourceProjectile);
                        break;

                    case 31:     //Bumbullets
                        StartCoroutine(SpawnAdditionalProjectile(sourceProjectile, (PickupObjectDatabase.GetById(14) as Gun).DefaultModule.projectiles[0], 0));
                        break;

                    case 32:     //Bloody 9mm
                        StartCoroutine(EraseAndReplace(sourceProjectile, PickupObjectDatabase.GetById(524).GetComponent <RandomProjectileReplacementItem>().ReplacementProjectile));
                        break;

                    case 33:     //Slow ------------------------------- WORKS
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.tripleCrossbowSlowEffect);
                        sourceProjectile.AdjustPlayerProjectileTint(Color.yellow, 1);
                        break;

                    case 34:     //Wallpierce
                        sourceProjectile.pierceMinorBreakables   = true;
                        sourceProjectile.PenetratesInternalWalls = true;
                        break;

                    case 35:     //Ignore DPS Cap
                        sourceProjectile.ignoreDamageCaps = true;
                        break;

                    case 36:     //Scattershot
                        sourceProjectile.baseData.damage *= 0.55f;
                        StartCoroutine(DoAdditionalShot(sourceProjectile, 0, 30f));
                        StartCoroutine(DoAdditionalShot(sourceProjectile, 0, 30f));
                        break;

                    case 37:     //Backup Gun
                        StartCoroutine(DoAdditionalShot(sourceProjectile, 180, 5f));
                        break;

                    case 38:     //Helix
                        StartCoroutine(DoAdditionalShot(sourceProjectile, 0, 0f, true));
                        sourceProjectile.ConvertToHelixMotion(false);
                        break;

                    case 39:     //Killed enemies become projectiles (Casey)
                        sourceProjectile.baseData.force *= 3f;
                        KilledEnemiesBecomeProjectileModifier caseymode = sourceProjectile.gameObject.AddComponent <KilledEnemiesBecomeProjectileModifier>();
                        caseymode.CompletelyBecomeProjectile = (PickupObjectDatabase.GetById(541) as Gun).DefaultModule.chargeProjectiles[0].Projectile.GetComponent <KilledEnemiesBecomeProjectileModifier>().CompletelyBecomeProjectile;
                        caseymode.BaseProjectile             = (PickupObjectDatabase.GetById(541) as Gun).DefaultModule.chargeProjectiles[0].Projectile.GetComponent <KilledEnemiesBecomeProjectileModifier>().BaseProjectile;
                        break;

                    case 40:     //Instant Cheese
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.instantCheese);
                        sourceProjectile.AdjustPlayerProjectileTint(ExtendedColours.honeyYellow, 1);
                        break;

                    case 41:     //Stun
                        sourceProjectile.StunApplyChance     = 1;
                        sourceProjectile.AppliedStunDuration = 2;
                        sourceProjectile.AppliesStun         = true;
                        break;

                    case 42:     //High Kaliber Effect
                        sourceProjectile.OnHitEnemy += KaliberShit;
                        break;

                    case 43:     //Tangler Squarify
                        sourceProjectile.ApplyClonedShaderProjModifier((PickupObjectDatabase.GetById(175) as Gun).DefaultModule.projectiles[0].GetComponent <ShaderProjModifier>());
                        break;

                    case 44:     //Akey47
                        sourceProjectile.gameObject.AddComponent <KeyProjModifier>();
                        break;

                    case 45:     //Combine Vapourise
                        sourceProjectile.baseData.damage *= 2f;
                        CombineEvaporateEffect origEvap = (PickupObjectDatabase.GetById(519) as Gun).alternateVolley.projectiles[0].projectiles[0].GetComponent <CombineEvaporateEffect>();
                        CombineEvaporateEffect newEvap  = sourceProjectile.gameObject.AddComponent <CombineEvaporateEffect>();
                        newEvap.FallbackShader        = origEvap.FallbackShader;
                        newEvap.ParticleSystemToSpawn = origEvap.ParticleSystemToSpawn;
                        break;

                    case 46:     //Snakemaker Snakify
                        AdvancedTransmogrifyComponent advancedTransmogSnek = sourceProjectile.gameObject.AddComponent <AdvancedTransmogrifyComponent>();
                        advancedTransmogSnek.TransmogDataList = new List <AdvancedTransmogrifyComponent.TransmogData>()
                        {
                            new AdvancedTransmogrifyComponent.TransmogData()
                            {
                                identifier        = "BulletShuffle",
                                maintainHPPercent = false,
                                TargetGuid        = "1386da0f42fb4bcabc5be8feb16a7c38",
                                TransmogChance    = 1,
                            }
                        };
                        break;

                    case 47:     //Sunlight Burn
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.SunlightBurn);
                        break;

                    case 48:     //Tiger
                        SummonTigerModifier tigerness = sourceProjectile.gameObject.AddComponent <SummonTigerModifier>();
                        tigerness.TigerProjectilePrefab = (PickupObjectDatabase.GetById(369) as Gun).DefaultModule.chargeProjectiles[0].Projectile.GetComponent <SummonTigerModifier>().TigerProjectilePrefab;
                        break;

                    case 49:     //Shield on Destroy
                        sourceProjectile.OnDestruction += SpawnShieldOnDestroy;
                        break;

                    case 50:     //Glitter
                        sourceProjectile.ApplyClonedShaderProjModifier((PickupObjectDatabase.GetById(28) as Gun).modifiedFinalVolley.projectiles[0].projectiles[1].GetComponent <ShaderProjModifier>());
                        break;

                    case 51:     //Finished Effect
                        sourceProjectile.gameObject.AddComponent <BlackRevolverModifier>();
                        break;

                    case 52:     //Mimic Gun Effect
                        sourceProjectile.gameObject.AddComponent <EnemyBulletsBecomeJammedModifier>();
                        break;

                    case 53:     //Green Fire
                        sourceProjectile.statusEffectsToApply.Add(StaticStatusEffects.greenFireEffect);
                        sourceProjectile.AdjustPlayerProjectileTint(Color.green, 1);
                        break;

                    case 54:     //Encircler
                        sourceProjectile.ApplyClonedShaderProjModifier((PickupObjectDatabase.GetById(648) as Gun).DefaultModule.projectiles[0].GetComponent <ShaderProjModifier>());
                        break;
                    }
                    sourceProjectile.gameObject.AddComponent <HasBeenBulletShuffled>();
                }
            }
            catch (Exception e)
            {
                ETGModConsole.Log(e.Message);
            }
        }