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); }); } }
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)}"); } )); } }
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}"); } )); } }
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)}"); } )); } }
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); } )); } }
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"); } )); } }
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)}"); } )); } }
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}"); } )); } }
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)}"); } )); } }
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)}"); })); } }
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)}"); } )); } }
// 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"); } )); } }
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)}"); } )); } }
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)}"); } )); } }
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"); } )); } }
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")}"); } )); } }
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"); } )); } }
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"); } )); } }
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")}"); } )); } }
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"); } )); } }
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); } }
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)}"); } )); } }
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); } }
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"); } )); } }
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); } }
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); } }
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"); })); } }