Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of UncappedChances v1.1.0
UncappedChances.dll
Decompiled 2 years agousing System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using IL.RoR2; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.RoR2; using RoR2; using RoR2.Projectile; using UncappedChances.Effects; using UnityEngine; using UnityEngine.Networking; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("UncappedChances")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+ac568060a64e68fa64ed2214b28e7ed427059e79")] [assembly: AssemblyProduct("UncappedChances")] [assembly: AssemblyTitle("UncappedChances")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace UncappedChances { public static class Configs { public static ConfigFile ModConfig; private const string Section_Crit = "Crit"; private const string Section_Bleed = "Bleed"; private const string Section_Collapse = "Collapse"; private const string Section_Ghors = "Ghors Tome"; private const string Section_Sticky = "Sticky Bomb"; private const string Label_EnableChange = "Enable Changes"; private const string Desc_Enable = "Enables changes for this item."; public static string ConfigFolderPath => Path.Combine(Paths.ConfigPath, MainPlugin.pluginInfo.Metadata.GUID); public static void Setup() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown ModConfig = new ConfigFile(Path.Combine(ConfigFolderPath, "ModConfig.cfg"), true); Read_AllConfigs(); } private static void Read_AllConfigs() { Crit.Enable = ModConfig.Bind<bool>("Crit", "Enable Changes", Crit.EnableDefault, "Enables changes for this item.").Value; Crit.HarderSuccessive = ModConfig.Bind<bool>("Crit", "Lower Successive Crits", Crit.HarderSuccessiveDefault, "Each successive crit has a low chance to proc.").Value; Crit.MultiplicativeCrit = ModConfig.Bind<bool>("Crit", "Multiplicative Crits", Crit.MultiplicativeCritDefault, "Each crit multiplies the previous, ie 2-4-8 instead of 2-4-6").Value; Bleed.Enable = ModConfig.Bind<bool>("Bleed", "Enable Changes", Bleed.EnableDefault, "Enables changes for this item.").Value; Bleed.HarderSuccessive = ModConfig.Bind<bool>("Bleed", "Lower Successive Stacks", Bleed.HarderSuccessiveDefault, "Each successive bleed stack has a low chance to proc.").Value; Collapse.Enable = ModConfig.Bind<bool>("Collapse", "Enable Changes", Collapse.EnableDefault, "Enables changes for this item.").Value; Collapse.HarderSuccessive = ModConfig.Bind<bool>("Collapse", "Lower Successive Stacks", Collapse.HarderSuccessiveDefault, "Each successive collapse stack has a low chance to proc.").Value; GhorsTome.Enable = ModConfig.Bind<bool>("Ghors Tome", "Enable Changes", GhorsTome.EnableDefault, "Enables changes for this item.").Value; GhorsTome.HarderSuccessive = ModConfig.Bind<bool>("Ghors Tome", "Lower Successive Drops", GhorsTome.HarderSuccessiveDefault, "Each successive drop has a low chance to proc.").Value; StickyBomb.Enable = ModConfig.Bind<bool>("Sticky Bomb", "Enable Changes", StickyBomb.EnableDefault, "Enables changes for this item.").Value; StickyBomb.HarderSuccessive = ModConfig.Bind<bool>("Sticky Bomb", "Lower Successive Bombs", StickyBomb.HarderSuccessiveDefault, "Each successive sticky bomb has a low chance to proc.").Value; StickyBomb.SingleBomb = ModConfig.Bind<bool>("Sticky Bomb", "One Bomb", StickyBomb.SingleBombDefault, "Instead of applying multiple bombs, apply 1 with the total damage.").Value; } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("ZetaDaemon.UncappedChances", "UncappedChances", "1.1.0")] public class MainPlugin : BaseUnityPlugin { public const string PluginGUID = "ZetaDaemon.UncappedChances"; public const string PluginAuthor = "ZetaDaemon"; public const string PluginName = "UncappedChances"; public const string PluginVersion = "1.1.0"; internal static ManualLogSource ModLogger; public static PluginInfo pluginInfo; private void Awake() { ModLogger = ((BaseUnityPlugin)this).Logger; pluginInfo = ((BaseUnityPlugin)this).Info; Configs.Setup(); EnableChanges(); SharedHooks.Setup(); } private void EnableChanges() { new Crit(); new Bleed(); new Collapse(); new GhorsTome(); new StickyBomb(); } } public class SharedHooks { public delegate void Handle_GlobalHitEvent(GameObject victim, CharacterBody attackerBody, DamageInfo damageInfo); [CompilerGenerated] private static class <>O { public static hook_OnHitEnemy <0>__GlobalEventManager_HitEnemy; } public static Handle_GlobalHitEvent Handle_GlobalHitEvent_Actions; public static void Setup() { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown if (Handle_GlobalHitEvent_Actions != null) { object obj = <>O.<0>__GlobalEventManager_HitEnemy; if (obj == null) { hook_OnHitEnemy val = GlobalEventManager_HitEnemy; <>O.<0>__GlobalEventManager_HitEnemy = val; obj = (object)val; } GlobalEventManager.OnHitEnemy += (hook_OnHitEnemy)obj; } } internal static void GlobalEventManager_HitEnemy(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim) { orig.Invoke(self, damageInfo, victim); if (NetworkServer.active && Object.op_Implicit((Object)(object)victim) && Object.op_Implicit((Object)(object)damageInfo.attacker)) { CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { Handle_GlobalHitEvent_Actions(victim, component, damageInfo); } } } } } namespace UncappedChances.Effects { public class Bleed { internal static bool EnableDefault = true; internal static bool HarderSuccessiveDefault = false; internal static bool Enable = EnableDefault; internal static bool HarderSuccessive = HarderSuccessiveDefault; public Bleed() { if (Enable) { Hooks(); } } private void Hooks() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown MainPlugin.ModLogger.LogInfo((object)"Applying Bleed IL modifications"); SharedHooks.Handle_GlobalHitEvent_Actions = (SharedHooks.Handle_GlobalHitEvent)Delegate.Combine(SharedHooks.Handle_GlobalHitEvent_Actions, new SharedHooks.Handle_GlobalHitEvent(GlobalEventManager_HitEnemy)); GlobalEventManager.OnHitEnemy += new Manipulator(IL_OnHitEnemy); } private void IL_OnHitEnemy(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_014e: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); ILLabel val2 = default(ILLabel); if (!val.TryGotoNext(new Func<Instruction, bool>[8] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 22), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 1), (Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, typeof(CharacterBody), "get_bleedChance"), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0f), (Instruction x) => ILPatternMatchingExt.MatchCgt(x), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 22), (Instruction x) => ILPatternMatchingExt.MatchOr(x), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref val2) })) { MainPlugin.ModLogger.LogError((object)"Bleed - IL Hook Failed"); return; } val.Index += 7; val.Emit(OpCodes.Pop); val.Emit(OpCodes.Ldc_I4_0); } private static void ApplyBleed(CharacterBody attacker, GameObject victim, DamageInfo damageInfo, uint? maxStacksFromAttacker = null) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) ProcChainMask procChainMask = damageInfo.procChainMask; ((ProcChainMask)(ref procChainMask)).AddProc((ProcType)5); DotController.InflictDot(victim, damageInfo.attacker, (DotIndex)0, 3f * damageInfo.procCoefficient, 1f, maxStacksFromAttacker); } private void GlobalEventManager_HitEnemy(GameObject victim, CharacterBody attackerBody, DamageInfo damageInfo) { //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Invalid comparison between Unknown and I4 if (((ProcChainMask)(ref damageInfo.procChainMask)).HasProc((ProcType)5)) { return; } uint? maxStacksFromAttacker = null; if (Object.op_Implicit((Object)(object)damageInfo?.inflictor)) { ProjectileDamage component = damageInfo.inflictor.GetComponent<ProjectileDamage>(); if (Object.op_Implicit((Object)(object)component) && component.useDotMaxStacksFromAttacker) { maxStacksFromAttacker = component.dotMaxStacksFromAttacker; } } float num = attackerBody.bleedChance * damageInfo.procCoefficient; if ((damageInfo.damageType & 0x400) > 0) { ApplyBleed(attackerBody, victim, damageInfo, maxStacksFromAttacker); } if (!Object.op_Implicit((Object)(object)attackerBody.inventory)) { return; } if (attackerBody.inventory.GetItemCount(Items.BleedOnHitAndExplode) > 0 && damageInfo.crit) { ApplyBleed(attackerBody, victim, damageInfo, maxStacksFromAttacker); } float num2 = 1f; while (num > 0f) { if (Util.CheckRoll(num / num2, attackerBody.master)) { ApplyBleed(attackerBody, victim, damageInfo, maxStacksFromAttacker); } num -= num2 * 100f; if (HarderSuccessive) { num2 += 1f; } } } } public class Collapse { internal static bool EnableDefault = true; internal static bool HarderSuccessiveDefault = false; internal static bool Enable = EnableDefault; internal static bool HarderSuccessive = HarderSuccessiveDefault; public Collapse() { if (Enable) { Hooks(); } } private void Hooks() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown MainPlugin.ModLogger.LogInfo((object)"Applying Collapse IL modifications"); GlobalEventManager.OnHitEnemy += new Manipulator(IL_OnHitEnemy); } private void IL_OnHitEnemy(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (!val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.DLC1Content/Items", "BleedOnHitVoid") })) { MainPlugin.ModLogger.LogError((object)"Collapse - IL Hook Failed"); return; } val.Index += 13; val.Emit(OpCodes.Ldloc_1); val.Emit(OpCodes.Ldarg_2); val.Emit(OpCodes.Ldloc, 24); val.Emit(OpCodes.Ldarg_1); val.Emit(OpCodes.Ldloc_0); val.EmitDelegate<Action<CharacterBody, GameObject, int, DamageInfo, uint?>>((Action<CharacterBody, GameObject, int, DamageInfo, uint?>)delegate(CharacterBody attackerBody, GameObject victim, int stacks, DamageInfo damageInfo, uint? maxStacksFromAttacker) { float num = (float)stacks * 10f * damageInfo.procCoefficient; float num2 = 1f; while (num > 0f) { if (Util.CheckRoll(num / num2, attackerBody.master)) { ApplyCollapse(victim, damageInfo, maxStacksFromAttacker); } num -= num2 * 100f; if (HarderSuccessive) { num2 += 1f; } } }); val.Index += 1; val.Emit(OpCodes.Pop); val.Emit(OpCodes.Ldc_I4_0); } private static void ApplyCollapse(GameObject victim, DamageInfo damageInfo, uint? maxStacksFromAttacker = null) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) ProcChainMask procChainMask = damageInfo.procChainMask; ((ProcChainMask)(ref procChainMask)).AddProc((ProcType)5); DotDef dotDef = DotController.GetDotDef((DotIndex)8); DotController.InflictDot(victim, damageInfo.attacker, (DotIndex)8, dotDef.interval, 1f, maxStacksFromAttacker); } } public class Crit { internal static bool EnableDefault = true; internal static bool HarderSuccessiveDefault = false; internal static bool MultiplicativeCritDefault = true; internal static bool Enable = EnableDefault; internal static bool HarderSuccessive = HarderSuccessiveDefault; internal static bool MultiplicativeCrit = MultiplicativeCritDefault; public Crit() { if (Enable) { Hooks(); } } private void Hooks() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown MainPlugin.ModLogger.LogInfo((object)"Applying Crit IL modifications"); HealthComponent.TakeDamage += new Manipulator(IL_TakeDamage); } private void IL_TakeDamage(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (!val.TryGotoNext(new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 6), (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 1), (Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, typeof(CharacterBody), "get_critMultiplier"), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 6) })) { MainPlugin.ModLogger.LogError((object)"Crit - IL Hook Failed"); return; } val.Index += 3; val.Emit(OpCodes.Pop); val.Emit(OpCodes.Ldloc_1); val.EmitDelegate<Func<CharacterBody, float>>((Func<CharacterBody, float>)delegate(CharacterBody body) { float num = 1f; float num2 = body.crit - 100f; float num3 = body.critMultiplier; while (num2 > 0f) { if (HarderSuccessive) { num += 1f; } if (Util.CheckRoll(num2 / num, body.master)) { num3 = ((!MultiplicativeCrit) ? (num3 + body.critMultiplier) : (num3 * body.critMultiplier)); } num2 -= num * 100f; } return num3; }); } } public class GhorsTome { internal static bool EnableDefault = true; internal static bool HarderSuccessiveDefault = false; internal static bool Enable = EnableDefault; internal static bool HarderSuccessive = HarderSuccessiveDefault; public GhorsTome() { if (Enable) { Hooks(); } } private void Hooks() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown MainPlugin.ModLogger.LogInfo((object)"Applying Ghors IL modifications"); GlobalEventManager.OnCharacterDeath += new Manipulator(IL_OnCharacterDeath); } private void IL_OnCharacterDeath(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (!val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.RoR2Content/Items", "BonusGoldPackOnKill") })) { MainPlugin.ModLogger.LogError((object)"Ghors - IL Hook Failed"); return; } val.Index += 3; val.Emit(OpCodes.Ldloc, 16); val.Emit(OpCodes.Ldloc, 85); val.Emit(OpCodes.Ldloc, 6); val.Emit(OpCodes.Ldloc, 18); val.EmitDelegate<Action<CharacterMaster, int, Vector3, TeamIndex>>((Action<CharacterMaster, int, Vector3, TeamIndex>)delegate(CharacterMaster attackerMaster, int stacks, Vector3 vector, TeamIndex attackerTeamIndex) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) float num = 1f; float num2 = 4f * (float)stacks; while (num2 > 0f) { if (Util.CheckRoll(num2 / num, attackerMaster)) { GameObject val2 = Object.Instantiate<GameObject>(LegacyResourcesAPI.Load<GameObject>("Prefabs/NetworkedObjects/BonusMoneyPack"), vector, Random.rotation); TeamFilter component = val2.GetComponent<TeamFilter>(); if (Object.op_Implicit((Object)(object)component)) { component.teamIndex = attackerTeamIndex; } NetworkServer.Spawn(val2); } num2 -= num * 100f; if (HarderSuccessive) { num += 1f; } } }); val.Index += 2; val.Emit(OpCodes.Pop); val.Emit(OpCodes.Ldc_I4_0); } } public class StickyBomb { internal static bool EnableDefault = true; internal static bool HarderSuccessiveDefault = false; internal static bool SingleBombDefault = true; internal static bool Enable = EnableDefault; internal static bool HarderSuccessive = HarderSuccessiveDefault; internal static bool SingleBomb = SingleBombDefault; public StickyBomb() { if (Enable) { Hooks(); } } private void Hooks() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown MainPlugin.ModLogger.LogInfo((object)"Applying Sticky IL modifications"); GlobalEventManager.OnHitEnemy += new Manipulator(IL_OnHitEnemy); } private void IL_OnHitEnemy(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (!val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "RoR2.RoR2Content/Items", "StickyBomb") })) { MainPlugin.ModLogger.LogError((object)"Sticky - IL Hook Failed"); return; } val.Index += 3; val.Emit(OpCodes.Ldloc_1); val.Emit(OpCodes.Ldloc_2); val.Emit(OpCodes.Ldloc, 14); val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Action<CharacterBody, CharacterBody, int, DamageInfo>>((Action<CharacterBody, CharacterBody, int, DamageInfo>)delegate(CharacterBody attackerBody, CharacterBody victimBody, int stacks, DamageInfo damageInfo) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) if (stacks > 0) { bool alive = victimBody.healthComponent.alive; float num = 5f; Vector3 position = damageInfo.position; Vector3 val2 = victimBody.corePosition - position; float magnitude = ((Vector3)(ref val2)).magnitude; float num2 = 1.8f; float num3 = Util.OnHitProcDamage(damageInfo.damage, attackerBody.damage, num2); float num4 = (float)stacks * 5f * damageInfo.procCoefficient; float num5 = 1f; int num6 = 0; while (num4 > 0f) { if (Util.CheckRoll(num4 / num5, attackerBody.master)) { if (!SingleBomb) { Quaternion val3 = ((magnitude != 0f) ? Util.QuaternionSafeLookRotation(val2) : Random.rotationUniform); ProjectileManager.instance.FireProjectile(LegacyResourcesAPI.Load<GameObject>("Prefabs/Projectiles/StickyBomb"), position, val3, damageInfo.attacker, num3, 100f, damageInfo.crit, (DamageColorIndex)3, (GameObject)null, alive ? (magnitude * num) : (-1f)); } else { num6++; } } num4 -= num5 * 100f; if (HarderSuccessive) { num5 += 1f; } } if (SingleBomb && num6 > 0) { Quaternion val4 = ((magnitude != 0f) ? Util.QuaternionSafeLookRotation(val2) : Random.rotationUniform); ProjectileManager.instance.FireProjectile(LegacyResourcesAPI.Load<GameObject>("Prefabs/Projectiles/StickyBomb"), position, val4, damageInfo.attacker, (float)num6 * num3, 100f, damageInfo.crit, (DamageColorIndex)3, (GameObject)null, alive ? (magnitude * num) : (-1f)); } } }); val.Index += 1; val.Emit(OpCodes.Pop); val.Emit(OpCodes.Ldc_I4_0); } } }