예제 #1
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            SetupMortarProjectile();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   (
                                                       (count, inv, master) => { return(Mathf.Min(procChance + stackChance * (count - 1), capChance)); },
                                                       (value, inv, master) => { return($"Firing Chance: {Pct(value, 0, 1)}"); }
                                                   ),
                                                   (
                                                       (count, inv, master) => { return(dmgCoefficient + (count - 1) * dmgStack); },
                                                       (value, inv, master) => { return($"Damage: {Pct(value, 0)}"); }
                                                   ),
                                                   (
                                                       (count, inv, master) => { return(Mathf.Floor(1 + stackAmount * (count - 1))); },
                                                       (value, inv, master) => { return($"Mortars: {value}"); }
                                                   ));
            }
            if (Compat_BetterUI.enabled)
            {
                Compat_BetterUI.AddEffect(itemDef, procChance, stackChance, Compat_BetterUI.ChanceFormatter, Compat_BetterUI.LinearStacking,
                                          (value, extraStackValue, procCoefficient) =>
                {
                    return(Mathf.CeilToInt((capChance - value * procCoefficient) / (extraStackValue * procCoefficient)) + 1);
                });
            }
        }
예제 #2
0
        public override void SetupBehavior()
        {
            GameObject engiMinePrefab = Resources.Load <GameObject>("prefabs/projectiles/EngiGrenadeProjectile");

            BombPrefab = engiMinePrefab.InstantiateClone("Bulletstorm_RollBomb", true);
            BombPrefab.transform.localScale = new Vector3(2f, 2f, 2f);
            BombPrefab.GetComponent <ProjectileSimple>().desiredForwardSpeed     = 1;     //default 50
            BombPrefab.GetComponent <ProjectileDamage>().damageColorIndex        = DamageColorIndex.Item;
            BombPrefab.GetComponent <ProjectileImpactExplosion>().destroyOnEnemy = false; //default True
            BombPrefab.GetComponent <ProjectileImpactExplosion>().blastRadius   *= Radius;
            Object.Destroy(BombPrefab.GetComponent <ApplyTorqueOnStart>());

            var controller = BombPrefab.GetComponent <ProjectileController>();

            controller.transform.localScale = new Vector3(2f, 2f, 2f);

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(count); },
                                                    (value, inv, master) => { return($"Additional Bombs: {value}"); }
                                                   ));
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(Damage); },
                                                    (value, inv, master) => { return($"Damage: {Pct(value)}"); }
                                                   ));
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(Radius); },
                                                    (value, inv, master) => { return($"Radius: {Pct(value)}"); }
                                                   ));
            }
        }
예제 #3
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();
            GameObject engiMinePrefab = Resources.Load <GameObject>("prefabs/projectiles/EngiMine");

            minePrefab = engiMinePrefab.InstantiateClone("PanicMine", true);
            Object.Destroy(minePrefab.GetComponent <ProjectileDeployToOwner>());

            GameObject engiMineGhostPrefab = Resources.Load <GameObject>("prefabs/projectileghosts/EngiMineGhost");

            mineGhostPrefab = engiMineGhostPrefab.InstantiateClone("PanicMineGhost", false);
            SkinnedMeshRenderer mesh = mineGhostPrefab.GetComponentInChildren <SkinnedMeshRenderer>();

            mesh.material.color = new Color32(255, 168, 0, 255);
            minePrefab.GetComponent <ProjectileController>().ghostPrefab = mineGhostPrefab;

            ProjectileAPI.Add(minePrefab);

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   (
                                                       (count, inv, master) => { return(baseDmg + (count - 1) * stackDmg); },
                                                       (value, inv, master) => { return($"Damage: {Pct(value, 1)}"); }
                                                   ),
                                                   (
                                                       (count, inv, master) => { return(count); },
                                                       (value, inv, master) => { return($"Mines: {value}"); }
                                                   ));
            }
        }
예제 #4
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            MortarTube.SetupMortarProjectile();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   (
                                                       (count, inv, master) => { return(ProcComputation(mortarProcChance, (int)count)); },
                                                       (value, inv, master) => { return($"Mortar Firing Chance: {Pct(value, 0, 1)}"); }
                                                   ),
                                                   (
                                                       (count, inv, master) => { return(ProcComputation(missileProcChance, (int)count)); },
                                                       (value, inv, master) => { return($"Missile Firing Chance: {Pct(value, 0, 1)}"); }
                                                   ),
                                                   (
                                                       (count, inv, master) => { return(mortarDamage + (count - 1) * mortarStackDamage); },
                                                       (value, inv, master) => { return($"Mortar Damage: {Pct(value, 0)}"); }
                                                   ),
                                                   (
                                                       (count, inv, master) => { return(missileDamage + (count - 1) * missileStackDamage); },
                                                       (value, inv, master) => { return($"Missile Damage: {Pct(value, 0)}"); }
                                                   ));
            }
        }
예제 #5
0
 public override void SetupBehavior()
 {
     base.SetupBehavior();
     if (Compat_ItemStats.enabled)
     {
         Compat_ItemStats.CreateItemStatDef(itemDef,
                                            ((count, inv, master) => { return(healthThreshold * Mathf.Pow(2, 1 - count)); },
                                             (value, inv, master) => { return($"Health Threshold: {Pct(value, 1)}"); }));
     }
 }
        public override void SetupBehavior()
        {
            base.SetupBehavior();
            PermanentScannerPrefab = PrefabAPI.InstantiateClone(Resources.Load <GameObject>("Prefabs/NetworkedObjects/ChestScanner"), "Bulletstorm_ChestScanner", true);
            ChestRevealer chestRevealer = PermanentScannerPrefab.GetComponent <ChestRevealer>();

            chestRevealer.radius           = 1000;
            chestRevealer.pulseTravelSpeed = 1000;
            chestRevealer.revealDuration   = 1;
            chestRevealer.pulseInterval    = 10;
            chestRevealer.pulseEffectScale = 0; // a scale of zero should make it invisible
            //chestRevealer.pulseEffectPrefab = null; //throws an error if null

            if (ScanDuration <= 0)
            {
                chestRevealer.revealDuration = 99999; //~27 hours
            }
            else
            {
                chestRevealer.revealDuration = Mathf.Max(1, ScanDuration);
            }

            DestroyOnTimer destroyOnTimer = PermanentScannerPrefab.GetComponent <DestroyOnTimer>();

            if (KeepScanningPastStart)
            {
                //UnityEngine.Object.Destroy(destroyOnTimer);
                destroyOnTimer.duration = 99999;
            }
            else
            {
                destroyOnTimer.duration = ScanDuration;
            }

            if (PermanentScannerPrefab)
            {
                PrefabAPI.RegisterNetworkPrefab(PermanentScannerPrefab);
            }

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(ScanChance + ScanChancePerStack * (count - 1)); },
                                                    (value, inv, master) => { return($"Scan Chance: {Pct(value)}"); }
                                                   ));
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(ScanDuration); },
                                                    (value, inv, master) => {
                    string text = $"Scan Duration: ";
                    text += ScanDuration == 0 ? $"27:00:00" : $"{GenTimeSpanFromSeconds(value)}";
                    return(text);
                }
                                                   ));
            }
        }
예제 #7
0
 public override void SetupBehavior()
 {
     base.SetupBehavior();
     if (Compat_ItemStats.enabled)
     {
         Compat_ItemStats.CreateItemStatDef(itemDef,
                                            ((count, inv, master) => { return(Mathf.Max(baseCD * Mathf.Pow(1f - stackCDreduc, count - 1), baseDuration)); },
                                             (value, inv, master) => { return($"Buff Interval: {value.ToString("N1")} s"); }
                                            ));
     }
 }
예제 #8
0
 public override void SetupBehavior()
 {
     base.SetupBehavior();
     if (Compat_ItemStats.enabled)
     {
         Compat_ItemStats.CreateItemStatDef(itemDef,
                                            ((count, inv, master) => { return(SpreadReduction + SpreadReductionPerStack * (count - 1)); },
                                             (value, inv, master) => { return($"Spread Reduction (Scope): {Pct(value)}"); }
                                            ));
     }
 }
예제 #9
0
 public override void SetupBehavior()
 {
     base.SetupBehavior();
     if (Compat_ItemStats.enabled)
     {
         Compat_ItemStats.CreateItemStatDef(itemDef,
                                            ((count, inv, master) => { return(count); },
                                             (value, inv, master) => { return($"Additional Backpack Slots: {value}"); }
                                            ));
     }
 }
예제 #10
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(jumpMult * count); },
                                                    (value, inv, master) => { return($"Jump Power: +{value.ToString("N1")}"); }));
            }
        }
 public override void SetupBehavior()
 {
     base.SetupBehavior();
     if (Compat_ItemStats.enabled)
     {
         Compat_ItemStats.CreateItemStatDef(itemDef,
                                            ((count, inv, master) => { return(PercentOfMaxHealthAdded + PercentOfMaxHealthAddedPerStack * (count - 1)); },
                                             (value, inv, master) => { return($"Health Multiplier: +{Pct(value)}"); }
                                            ));
     }
 }
예제 #12
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(moneyMult * count); },
                                                    (value, inv, master) => { return($"Money Bonus: {Pct(value, 1)}"); }));
            }
        }
예제 #13
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(baseDamage + stackDamage * (count - 1)); },
                                                    (value, inv, master) => { return($"Stomp Damage: {Pct(value, 1)}"); }
                                                   ));
            }
        }
예제 #14
0
        // private Texture MoonMansTexture = Resources.Load<Texture>("Assets/Textures/Icons/MasterRoundMoon.png");



        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(MasterRound_MaxHealthMult * count); },
                                                    (value, inv, master) => { return($"Max Health Multiplier: +{Pct(value)} health"); }
                                                   ));
            }
        }
예제 #15
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(critAdd * count); },
                                                    (value, inv, master) => { return($"Crit Chance Per Shrine Fail: {Pct(value, 1, 1)}"); }
                                                   ));
            }
        }
예제 #16
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(procChance * count); },
                                                    (value, inv, master) => { return($"Proc Chance: {Pct(value, 1, 1)}"); }
                                                   ));
            }
        }
예제 #17
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(addRegen * count); },
                                                    (value, inv, master) => { return($"Regen Bonus: {value.ToString("N1")} HP/s"); }
                                                   ));
            }
        }
예제 #18
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(LifeSavingsComponent.CalculateMoneyIncrease(Mathf.FloorToInt(count))); },
                                                    (value, inv, master) => { return($"Money Per Second: ${value.ToString("N1")}"); }
                                                   ));
            }
        }
예제 #19
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(RingUnity_DamageBonus + RingUnity_DamageBonusStack * (count - 1)); },
                                                    (value, inv, master) => { return($"Base Damage: +{value} health"); }
                                                   ));
            }
        }
예제 #20
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(baseDuration + (count - 1) * stackDuration); },
                                                    (value, inv, master) => { return($"Duration: {value.ToString("N1")} s"); }
                                                   ));
            }
        }
예제 #21
0
 public override void SetupBehavior()
 {
     base.SetupBehavior();
     if (Compat_ItemStats.enabled)
     {
         Compat_ItemStats.CreateItemStatDef(itemDef,
                                            ((count, inv, master) => {
             return(Run.instance.GetDifficultyScaledCost(goldAmt) * Mathf.Pow(goldReduc, count - 1));
         },
                                             (value, inv, master) => { return($"Full Damage Cost: ${value.ToString("N0")}"); }
                                            ));
     }
 }
예제 #22
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();
            GameObject engiMinePrefab = Resources.Load <GameObject>("prefabs/projectiles/EngiMine");

            minePrefab = engiMinePrefab.InstantiateClone("FootMine", true);
            Object.Destroy(minePrefab.GetComponent <ProjectileDeployToOwner>());

            GameObject engiMineGhostPrefab = Resources.Load <GameObject>("prefabs/projectileghosts/EngiMineGhost");

            mineGhostPrefab = engiMineGhostPrefab.InstantiateClone("FootMineGhost", false);
            SkinnedMeshRenderer mesh = mineGhostPrefab.GetComponentInChildren <SkinnedMeshRenderer>();

            mesh.material.color = Color.green;
            minePrefab.GetComponent <ProjectileController>().ghostPrefab = mineGhostPrefab;

            ProjectileAPI.Add(minePrefab);

            poisonBuff = ScriptableObject.CreateInstance <BuffDef>();
            //poisonBuff.buffColor = new Color32(1, 121, 91, 255);
            poisonBuff.isDebuff   = true;
            poisonBuff.canStack   = true;
            poisonBuff.name       = "CCIFootPoison";
            poisonBuff.iconSprite = assetBundle.LoadAsset <Sprite>("Assets/ClassicItems/icons/footmine_buff_icon.png");

            CustomBuff poisonCustomBuff = new CustomBuff(poisonBuff);

            BuffAPI.Add(poisonCustomBuff);

            DotController.DotDef poisonDotDef = new DotController.DotDef
            {
                interval          = 1,
                damageCoefficient = 1,
                damageColorIndex  = DamageColorIndex.Poison,
                associatedBuff    = poisonBuff
            };
            poisonDot = DotAPI.RegisterDotDef(poisonDotDef);

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   (
                                                       (count, inv, master) => { return(baseDmg + (count - 1) * stackDmg); },
                                                       (value, inv, master) => { return($"Poison Damage/Second: {Pct(value, 1)}"); }
                                                   ),
                                                   (
                                                       (count, inv, master) => { return(baseTicks + (count - 1) * stackTicks); },
                                                       (value, inv, master) => { return($"Duration: {value} seconds"); }
                                                   ));
            }
        }
예제 #23
0
 public override void SetupBehavior()
 {
     base.SetupBehavior();
     if (Compat_ItemStats.enabled)
     {
         Compat_ItemStats.CreateItemStatDef(itemDef,
                                            ((count, inv, master) => { return(Util.ConvertAmplificationPercentageIntoReductionPercentage(procChance * count)); },
                                             (value, inv, master) => { return($"Freeze Chance: {Pct(value, 1, 1f)}"); }));
     }
     if (Compat_BetterUI.enabled)
     {
         Compat_BetterUI.AddEffect(catalogIndex, procChance, procChance, Compat_BetterUI.ChanceFormatter, Compat_BetterUI.HyperbolicStacking);
     }
 }
예제 #24
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => {
                    return(Math.Min(count * healthMult, healthCap));
                },
                                                    (value, inv, master) => { return($"Bonus Health: {Pct(value)}"); }
                                                   ));
            }
        }
예제 #25
0
 public override void SetupBehavior()
 {
     base.SetupBehavior();
     if (Compat_ItemStats.enabled)
     {
         Compat_ItemStats.CreateItemStatDef(itemDef,
                                            ((count, inv, master) => { return(BatteryBullets_ProcCoefficient + BatteryBullets_ProcCoefficientStack * (count - 1)); },
                                             (value, inv, master) => { return($"Shock Chance: +{Pct(value)}"); }
                                            ));
     }
     if (Compat_BetterUI.enabled)
     {
         Compat_BetterUI.AddEffect(itemDef, BatteryBullets_ProcCoefficient, BatteryBullets_ProcCoefficientStack, Compat_BetterUI.ChanceFormatter, Compat_BetterUI.LinearStacking);
     }
 }
예제 #26
0
 public override void SetupBehavior()
 {
     base.SetupBehavior();
     if (Compat_ItemStats.enabled)
     {
         Compat_ItemStats.CreateItemStatDef(itemDef,
                                            ((count, inv, master) => { return(RegenAddAmount + RegenAddAmountPerStack * (count - 1)); },
                                             (value, inv, master) => { return($"Regen: +{value} health/second"); }
                                            ));
         Compat_ItemStats.CreateItemStatDef(itemDef,
                                            ((count, inv, master) => { return(Mustache_Duration); },
                                             (value, inv, master) => { return($"Duration: {value} seconds"); }
                                            ));
     }
 }
예제 #27
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return(procTime + (count - 1) * stackTime); },
                                                    (value, inv, master) => { return($"Duration: {value.ToString("N1")} s"); }
                                                   ));
            }
            if (Compat_BetterUI.enabled)
            {
                Compat_BetterUI.AddEffect(catalogIndex, procChance, null, Compat_BetterUI.ChanceFormatter, Compat_BetterUI.NoStacking);
            }
        }
예제 #28
0
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef,
                                                   ((count, inv, master) => { return((1f - Mathf.Pow(1 - procChance / 100f, count)) * 100f); },
                                                    (value, inv, master) => { return($"Knockback Chance: {Pct(value, 1, 1)}"); }
                                                   ));
            }
            if (Compat_BetterUI.enabled)
            {
                Compat_BetterUI.AddEffect(catalogIndex, procChance, procChance, Compat_BetterUI.ChanceFormatter, Compat_BetterUI.ExponentialStacking);
            }
        }
예제 #29
0
 public override void SetupBehavior()
 {
     base.SetupBehavior();
     if (Compat_ItemStats.enabled)
     {
         Compat_ItemStats.CreateItemStatDef(itemDef,
                                            ((count, inv, master) => { return(Mathf.Min(procChance + stackChance * (count - 1), capChance)); },
                                             (value, inv, master) => { return($"Instakill Chance: {Pct(value, 1, 1f)}"); }));
     }
     if (Compat_BetterUI.enabled)
     {
         Compat_BetterUI.AddEffect(catalogIndex, procChance, stackChance, Compat_BetterUI.ChanceFormatter, Compat_BetterUI.LinearStacking,
                                   (value, extraStackValue, procCoefficient) => {
             return(Mathf.CeilToInt((capChance - value * procCoefficient) / (extraStackValue * procCoefficient)) + 1);
         });
     }
 }
        public override void SetupBehavior()
        {
            base.SetupBehavior();

            if (Compat_ItemStats.enabled == true)
            {
                Compat_ItemStats.CreateItemStatDef(itemDef, (
                                                       (count, inv, master) =>
                {
                    return((float)Mathf.Pow((1 + stackPercentageIncrease), count));
                },
                                                       (value, inv, master) =>
                {
                    return($"Increases Damage By: {value.ToString("N2")} Times");
                }));
            }
        }