Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of Hypercrit2 v1.3.2
NotHypercrit.dll
Decompiled 11 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using EntityStates.Huntress.HuntressWeapon; using IL.EntityStates.Huntress.HuntressWeapon; using IL.RoR2; using IL.RoR2.Orbs; using LookingGlass.StatsDisplay; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using MysticsItems; using MysticsItems.Items; using On.EntityStates.Huntress.HuntressWeapon; using On.RoR2; using R2API; using R2API.Networking.Interfaces; using R2API.Utils; using RoR2; using RoR2.Orbs; 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.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("NotHypercrit")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+f403bef186eae2ccdf227e39efecd1a60074011d")] [assembly: AssemblyProduct("NotHypercrit")] [assembly: AssemblyTitle("NotHypercrit")] [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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 NotHypercrit { public static class BleedExtension { public static float GetBleedDamage(this CharacterBody body) { if (!Bleed.bleedDamage.ContainsKey(body)) { Bleed.bleedDamage.Add(body, 1f); } return Bleed.bleedDamage[body]; } public static CharacterBody SetBleedDamage(this CharacterBody body, float value) { if (!Bleed.bleedDamage.ContainsKey(body)) { Bleed.bleedDamage.Add(body, value); } else { Bleed.bleedDamage[body] = value; } return body; } public static float GetCollapseDamage(this CharacterBody body) { if (!Bleed.collapseDamage.ContainsKey(body)) { Bleed.collapseDamage.Add(body, 1f); } return Bleed.collapseDamage[body]; } public static CharacterBody SetCollapseDamage(this CharacterBody body, float value) { if (!Bleed.collapseDamage.ContainsKey(body)) { Bleed.collapseDamage.Add(body, value); } else { Bleed.collapseDamage[body] = value; } return body; } } public class Bleed { public class InflictHyperbleedInfo : Main.AdditionalProcInfo { public GameObject attacker; public DotIndex dotIndex; public new void Deserialize(NetworkReader reader) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) base.Deserialize(reader); dotIndex = (DotIndex)reader.ReadInt32(); } public new void Serialize(NetworkWriter writer) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Expected I4, but got Unknown base.Serialize(writer); writer.Write((int)dotIndex); } } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Action<Run> <>9__6_0; public static hook_Start <>9__6_1; public static StatHookEventHandler <>9__6_2; public static Func<Instruction, bool> <>9__6_6; public static Func<Instruction, bool> <>9__6_7; public static Func<Instruction, bool> <>9__6_8; public static Action<DamageInfo> <>9__6_9; public static Func<Instruction, bool> <>9__6_10; public static Func<Instruction, bool> <>9__6_11; public static Func<Instruction, bool> <>9__6_12; public static Action<DamageInfo> <>9__6_13; public static Manipulator <>9__6_3; public static Func<Instruction, bool> <>9__6_14; public static Func<Instruction, bool> <>9__6_15; public static Func<Instruction, bool> <>9__6_16; public static Action<OnDotInflictedServerGlobalDelegate, DotController> <>9__6_17; public static Manipulator <>9__6_4; public static Func<Instruction, bool> <>9__6_19; public static Action<DamageDealtMessage, TeamComponent> <>9__6_20; public static Manipulator <>9__6_5; public static hook_InflictDot_refInflictDotInfo <>9__7_0; public static Func<Instruction, bool> <>9__7_5; public static Func<Instruction, bool> <>9__7_6; public static Manipulator <>9__7_1; public static hook_GetLocalizedStringByToken <>9__7_2; public static hook_RecalculateStats <>9__7_7; public static Action <>9__7_3; public static Func<Instruction, bool> <>9__7_8; public static Func<Instruction, bool> <>9__7_9; public static Func<float, float> <>9__7_10; public static Manipulator <>9__7_4; internal void <Patch>b__6_0(Run run) { bleedDamage.Clear(); } internal void <Patch>b__6_1(orig_Start orig, CharacterBody self) { self.GetBleedDamage(); self.GetCollapseDamage(); orig.Invoke(self); } internal void <Patch>b__6_2(CharacterBody self, StatHookEventArgs args) { bleedDamage[self] = 1f; collapseDamage[self] = 1f; } internal void <Patch>b__6_3(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); int num = -1; if (!Main.BleedEnable.Value) { return; } val.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "get_bleedChance") }); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 5) }); val.GotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<ProcChainMask>(x, "AddProc") }); val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Action<DamageInfo>>((Action<DamageInfo>)delegate(DamageInfo info) { if (Object.op_Implicit((Object)(object)info.attacker)) { CharacterBody component2 = info.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component2)) { InflictHyperbleedInfo item2 = RollHyperbleed((DotIndex)0, component2.GetBleedDamage() - 1f, component2); inflictHyperBleedInfos.Add(item2); } } }); if (!Main.CollapseEnable.Value) { return; } val.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "BleedOnHitVoid") }); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 19) }); val.GotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<ProcChainMask>(x, "AddProc") }); val.Emit(OpCodes.Ldarg, 1); val.EmitDelegate<Action<DamageInfo>>((Action<DamageInfo>)delegate(DamageInfo info) { if (Object.op_Implicit((Object)(object)info.attacker)) { CharacterBody component = info.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { InflictHyperbleedInfo item = RollHyperbleed((DotIndex)8, component.GetCollapseDamage() - 1f, component); inflictHyperBleedInfos.Add(item); } } }); } internal bool <Patch>b__6_6(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "get_bleedChance"); } internal bool <Patch>b__6_7(Instruction x) { return ILPatternMatchingExt.MatchLdcI4(x, 5); } internal bool <Patch>b__6_8(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<ProcChainMask>(x, "AddProc"); } internal void <Patch>b__6_9(DamageInfo info) { if (Object.op_Implicit((Object)(object)info.attacker)) { CharacterBody component = info.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { InflictHyperbleedInfo item = RollHyperbleed((DotIndex)0, component.GetBleedDamage() - 1f, component); inflictHyperBleedInfos.Add(item); } } } internal bool <Patch>b__6_10(Instruction x) { return ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "BleedOnHitVoid"); } internal bool <Patch>b__6_11(Instruction x) { return ILPatternMatchingExt.MatchLdcI4(x, 19); } internal bool <Patch>b__6_12(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<ProcChainMask>(x, "AddProc"); } internal void <Patch>b__6_13(DamageInfo info) { if (Object.op_Implicit((Object)(object)info.attacker)) { CharacterBody component = info.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component)) { InflictHyperbleedInfo item = RollHyperbleed((DotIndex)8, component.GetCollapseDamage() - 1f, component); inflictHyperBleedInfos.Add(item); } } } internal void <Patch>b__6_4(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<OnDotInflictedServerGlobalDelegate>(x, "Invoke") }); val.GotoPrev(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0) }); val.Remove(); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<OnDotInflictedServerGlobalDelegate>(x, "Invoke") }); val.Remove(); val.EmitDelegate<Action<OnDotInflictedServerGlobalDelegate, DotController>>((Action<OnDotInflictedServerGlobalDelegate, DotController>)delegate(OnDotInflictedServerGlobalDelegate inflictedServerGlobal, DotController self) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 <>c__DisplayClass6_0 CS$<>8__locals0 = new <>c__DisplayClass6_0 { attacker = lastInfo.attackerObject, dotIndex = lastInfo.dotIndex }; if (Object.op_Implicit((Object)(object)CS$<>8__locals0.attacker) && (((int)CS$<>8__locals0.dotIndex == 0 && Main.BleedEnable.Value) || ((int)CS$<>8__locals0.dotIndex == 8 && Main.CollapseEnable.Value))) { InflictHyperbleedInfo inflictHyperbleedInfo = inflictHyperBleedInfos.Find((InflictHyperbleedInfo x) => (Object)(object)x.attacker == (Object)(object)CS$<>8__locals0.attacker && x.dotIndex == CS$<>8__locals0.dotIndex); if (inflictHyperbleedInfo != null) { if (inflictedServerGlobal != null) { for (int i = 0; i < inflictHyperbleedInfo.numProcs; i++) { inflictedServerGlobal.Invoke(self, ref lastInfo); } } inflictHyperBleedInfos.Remove(inflictHyperbleedInfo); } } }); } internal bool <Patch>b__6_14(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<OnDotInflictedServerGlobalDelegate>(x, "Invoke"); } internal bool <Patch>b__6_15(Instruction x) { return ILPatternMatchingExt.MatchLdarg(x, 0); } internal bool <Patch>b__6_16(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<OnDotInflictedServerGlobalDelegate>(x, "Invoke"); } internal void <Patch>b__6_17(OnDotInflictedServerGlobalDelegate inflictedServerGlobal, DotController self) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 <>c__DisplayClass6_0 CS$<>8__locals0 = new <>c__DisplayClass6_0 { attacker = lastInfo.attackerObject, dotIndex = lastInfo.dotIndex }; if (!Object.op_Implicit((Object)(object)CS$<>8__locals0.attacker) || (((int)CS$<>8__locals0.dotIndex != 0 || !Main.BleedEnable.Value) && ((int)CS$<>8__locals0.dotIndex != 8 || !Main.CollapseEnable.Value))) { return; } InflictHyperbleedInfo inflictHyperbleedInfo = inflictHyperBleedInfos.Find((InflictHyperbleedInfo x) => (Object)(object)x.attacker == (Object)(object)CS$<>8__locals0.attacker && x.dotIndex == CS$<>8__locals0.dotIndex); if (inflictHyperbleedInfo == null) { return; } if (inflictedServerGlobal != null) { for (int i = 0; i < inflictHyperbleedInfo.numProcs; i++) { inflictedServerGlobal.Invoke(self, ref lastInfo); } } inflictHyperBleedInfos.Remove(inflictHyperbleedInfo); } internal void <Patch>b__6_5(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0074: 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_0093: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<DamageNumberManager>(x, "SpawnDamageNumber") }); val.Emit(OpCodes.Pop); val.Emit(OpCodes.Pop); val.Emit(OpCodes.Pop); val.Emit(OpCodes.Pop); val.Emit(OpCodes.Pop); val.Emit(OpCodes.Pop); val.Remove(); val.Emit(OpCodes.Ldloc_0); val.Emit(OpCodes.Ldloc_2); val.EmitDelegate<Action<DamageDealtMessage, TeamComponent>>((Action<DamageDealtMessage, TeamComponent>)delegate(DamageDealtMessage msg, TeamComponent team) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Expected I4, but got F4 //IL_0268: Expected F4, but got I4 //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Invalid comparison between Unknown and I4 //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Invalid comparison between Unknown and I4 //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_025d->IL025d: Incompatible stack types: I4 vs F4 //IL_025d->IL025d: Incompatible stack types: F4 vs I4 //IL_025d->IL025d: Incompatible stack types: O vs I4 //IL_0257->IL025d: Incompatible stack types: I4 vs O //IL_0257->IL025d: Incompatible stack types: I4 vs F4 //IL_0257->IL025d: Incompatible stack types: F4 vs I4 //IL_0257->IL025d: Incompatible stack types: O vs I4 if ((int)msg.damageColorIndex == 2 && Object.op_Implicit((Object)(object)msg.victim) && Object.op_Implicit((Object)(object)msg.attacker)) { CharacterBody component = msg.attacker.GetComponent<CharacterBody>(); CharacterBody component2 = msg.victim.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2)) { float num = msg.damage / ((float)component2.GetBuffCount(Buffs.Bleeding) * 0.2f * component.baseDamage); float inverseDamage = GetInverseDamage(num / Main.Calc(Main.BleedStackMode.Value, Main.BleedStackBase.Value, Main.BleedStackMult.Value, Main.BleedStackDecay.Value, component2.GetBuffCount(Buffs.Bleeding) + 1)); if (num > 0f && inverseDamage > 0f) { float num2 = (inverseDamage - 1f) % (float)Main.BleedColor.Value / (float)(Main.BleedColor.Value - 1); Color val2 = Color.HSVToRGB(0f, 71f / 120f, 0.75f - 0.5f * num2); if ((int)team.teamIndex == -1) { val2 *= Color.gray; } if ((int)team.teamIndex == 2) { val2 *= new Color(0.5568628f, 0.2941177f, 0.6039216f); } ParticleSystem ps = DamageNumberManager.instance.ps; EmitParams val3 = default(EmitParams); ((EmitParams)(ref val3)).position = msg.position; ((EmitParams)(ref val3)).startColor = Color32.op_Implicit(val2); ((EmitParams)(ref val3)).applyShapeToPosition = true; ps.Emit(val3, 1); DamageNumberManager.instance.ps.GetCustomParticleData(DamageNumberManager.instance.customData, (ParticleSystemCustomData)0); DamageNumberManager.instance.customData[DamageNumberManager.instance.customData.Count - 1] = new Vector4(1f, 0f, msg.damage, msg.crit ? 1f : 0f); DamageNumberManager.instance.ps.SetCustomParticleData(DamageNumberManager.instance.customData, (ParticleSystemCustomData)0); return; } } } object obj = DamageNumberManager.instance; float num3 = msg.damage; Vector3 position = msg.position; int num4 = (msg.crit ? 1 : 0); int num5; if (Object.op_Implicit((Object)(object)team)) { obj = team.teamIndex; num3 = num4; num4 = (int)num3; num5 = (int)obj; } else { num5 = -1; obj = num5; num3 = num4; num4 = (int)num3; num5 = (int)obj; } ((DamageNumberManager)num5).SpawnDamageNumber((float)num4, position, (byte)(int)num3 != 0, (TeamIndex)obj, msg.damageColorIndex); }); } internal bool <Patch>b__6_19(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<DamageNumberManager>(x, "SpawnDamageNumber"); } internal void <Patch>b__6_20(DamageDealtMessage msg, TeamComponent team) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Expected I4, but got F4 //IL_0268: Expected F4, but got I4 //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Invalid comparison between Unknown and I4 //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Invalid comparison between Unknown and I4 //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_025d->IL025d: Incompatible stack types: I4 vs F4 //IL_025d->IL025d: Incompatible stack types: F4 vs I4 //IL_025d->IL025d: Incompatible stack types: O vs I4 //IL_0257->IL025d: Incompatible stack types: I4 vs O //IL_0257->IL025d: Incompatible stack types: I4 vs F4 //IL_0257->IL025d: Incompatible stack types: F4 vs I4 //IL_0257->IL025d: Incompatible stack types: O vs I4 if ((int)msg.damageColorIndex == 2 && Object.op_Implicit((Object)(object)msg.victim) && Object.op_Implicit((Object)(object)msg.attacker)) { CharacterBody component = msg.attacker.GetComponent<CharacterBody>(); CharacterBody component2 = msg.victim.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2)) { float num = msg.damage / ((float)component2.GetBuffCount(Buffs.Bleeding) * 0.2f * component.baseDamage); float inverseDamage = GetInverseDamage(num / Main.Calc(Main.BleedStackMode.Value, Main.BleedStackBase.Value, Main.BleedStackMult.Value, Main.BleedStackDecay.Value, component2.GetBuffCount(Buffs.Bleeding) + 1)); if (num > 0f && inverseDamage > 0f) { float num2 = (inverseDamage - 1f) % (float)Main.BleedColor.Value / (float)(Main.BleedColor.Value - 1); Color val = Color.HSVToRGB(0f, 71f / 120f, 0.75f - 0.5f * num2); if ((int)team.teamIndex == -1) { val *= Color.gray; } if ((int)team.teamIndex == 2) { val *= new Color(0.5568628f, 0.2941177f, 0.6039216f); } ParticleSystem ps = DamageNumberManager.instance.ps; EmitParams val2 = default(EmitParams); ((EmitParams)(ref val2)).position = msg.position; ((EmitParams)(ref val2)).startColor = Color32.op_Implicit(val); ((EmitParams)(ref val2)).applyShapeToPosition = true; ps.Emit(val2, 1); DamageNumberManager.instance.ps.GetCustomParticleData(DamageNumberManager.instance.customData, (ParticleSystemCustomData)0); DamageNumberManager.instance.customData[DamageNumberManager.instance.customData.Count - 1] = new Vector4(1f, 0f, msg.damage, msg.crit ? 1f : 0f); DamageNumberManager.instance.ps.SetCustomParticleData(DamageNumberManager.instance.customData, (ParticleSystemCustomData)0); return; } } } object obj = DamageNumberManager.instance; float num3 = msg.damage; Vector3 position = msg.position; int num4 = (msg.crit ? 1 : 0); int num5; if (Object.op_Implicit((Object)(object)team)) { obj = team.teamIndex; num3 = num4; num4 = (int)num3; num5 = (int)obj; } else { num5 = -1; obj = num5; num3 = num4; num4 = (int)num3; num5 = (int)obj; } ((DamageNumberManager)num5).SpawnDamageNumber((float)num4, position, (byte)(int)num3 != 0, (TeamIndex)obj, msg.damageColorIndex); } internal void <PatchStack>b__7_0(orig_InflictDot_refInflictDotInfo orig, ref InflictDotInfo info) { //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Invalid comparison between Unknown and I4 //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Invalid comparison between Unknown and I4 //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Invalid comparison between Unknown and I4 if (NetworkServer.active) { GameObject attackerObject = info.attackerObject; DotIndex dotIndex = info.dotIndex; if (Object.op_Implicit((Object)(object)attackerObject)) { if (((int)dotIndex == 0 && Main.BleedEnable.Value) || ((int)dotIndex == 8 && Main.CollapseEnable.Value)) { info.damageMultiplier *= HyperbleedMultiplier(attackerObject, dotIndex); } if ((Object)(object)info.victimObject != (Object)null) { CharacterBody component = info.victimObject.GetComponent<CharacterBody>(); if ((Object)(object)component != (Object)null) { if ((int)info.dotIndex == 0) { info.damageMultiplier *= Main.Calc(Main.BleedStackMode.Value, Main.BleedStackBase.Value, Main.BleedStackMult.Value, Main.BleedStackDecay.Value, component.GetBuffCount(Buffs.Bleeding) + 1); } else if ((int)info.dotIndex == 8) { info.damageMultiplier *= Main.Calc(Main.CollapseStackMode.Value, Main.CollapseStackBase.Value, Main.CollapseStackMult.Value, Main.CollapseStackDecay.Value, component.GetBuffCount(Buffs.Fracture) + 1); } } } } } lastInfo = info; orig.Invoke(ref info); } internal void <PatchStack>b__7_1(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); if (val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "BleedOnHitAndExplode"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<Inventory>(x, "GetItemCount") })) { val.Index += 2; val.Emit(OpCodes.Pop); val.Emit(OpCodes.Ldc_I4, 0); } } internal bool <PatchStack>b__7_5(Instruction x) { return ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "BleedOnHitAndExplode"); } internal bool <PatchStack>b__7_6(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<Inventory>(x, "GetItemCount"); } internal string <PatchStack>b__7_2(orig_GetLocalizedStringByToken orig, Language self, string token) { if (token == "ITEM_BLEEDONHITANDEXPLODE_DESC") { string text = "Gain <style=cIsDamage>5%</style> critical chance. Gain <style=cIsDamage>Bleed chance</style> equal to your <style=cIsDamage>Critical chance</style>. <style=cIsDamage>Bleeding</style> enemies <style=cIsDamage>explode</style> on death for <style=cIsDamage>400%</style> <style=cStack>(+400% per stack)</style> damage"; if (!Main.Mods("Hayaku.VanillaRebalance")) { text += ", plus an additional <style=cIsDamage>15%</style> <style=cStack>(+15% per stack)</style> of their maximum health"; } return text + "."; } return orig.Invoke(self, token); } internal void <PatchStack>b__7_3() { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown object obj = <>9__7_7; if (obj == null) { hook_RecalculateStats val = delegate(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (!((Object)(object)self == (Object)null) && !((Object)(object)self.inventory == (Object)null)) { if (Main.LamerShatterspleen.Value && self.inventory.GetItemCount(Items.BleedOnHitAndExplode) > 0) { self.bleedChance += self.crit; } if (Main.HyperbolicBleed.Value) { self.bleedChance = 100f - 10000f / (100f + 1.111111f * self.bleedChance); } } }; <>9__7_7 = val; obj = (object)val; } CharacterBody.RecalculateStats += (hook_RecalculateStats)obj; } internal void <PatchStack>b__7_7(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (!((Object)(object)self == (Object)null) && !((Object)(object)self.inventory == (Object)null)) { if (Main.LamerShatterspleen.Value && self.inventory.GetItemCount(Items.BleedOnHitAndExplode) > 0) { self.bleedChance += self.crit; } if (Main.HyperbolicBleed.Value) { self.bleedChance = 100f - 10000f / (100f + 1.111111f * self.bleedChance); } } } internal void <PatchStack>b__7_4(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); val.GotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 24), (Instruction x) => ILPatternMatchingExt.MatchConvR4(x) }); val.Index += 2; val.EmitDelegate<Func<float, float>>((Func<float, float>)((float chance) => 10f - 10f / (1f + 0.011111f * chance))); } internal bool <PatchStack>b__7_8(Instruction x) { return ILPatternMatchingExt.MatchLdloc(x, 24); } internal bool <PatchStack>b__7_9(Instruction x) { return ILPatternMatchingExt.MatchConvR4(x); } internal float <PatchStack>b__7_10(float chance) { return 10f - 10f / (1f + 0.011111f * chance); } } [CompilerGenerated] private sealed class <>c__DisplayClass6_0 { public GameObject attacker; public DotIndex dotIndex; internal bool <Patch>b__18(InflictHyperbleedInfo x) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) return (Object)(object)x.attacker == (Object)(object)attacker && x.dotIndex == dotIndex; } } public static List<InflictHyperbleedInfo> inflictHyperBleedInfos = new List<InflictHyperbleedInfo>(); public static InflictHyperbleedInfo lastNetworkedBleedInfo = null; public static Dictionary<CharacterBody, float> bleedDamage = new Dictionary<CharacterBody, float>(); public static Dictionary<CharacterBody, float> collapseDamage = new Dictionary<CharacterBody, float>(); public static InflictDotInfo lastInfo; public static void Patch() { //IL_004a: 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) //IL_0055: Expected O, but got Unknown //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Expected O, but got Unknown //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Expected O, but got Unknown //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Expected O, but got Unknown Main.Log.LogDebug((object)"The Spirit of TheMysticSword Burns Alight..."); Run.onRunStartGlobal += delegate { bleedDamage.Clear(); }; object obj = <>c.<>9__6_1; if (obj == null) { hook_Start val = delegate(orig_Start orig, CharacterBody self) { self.GetBleedDamage(); self.GetCollapseDamage(); orig.Invoke(self); }; <>c.<>9__6_1 = val; obj = (object)val; } CharacterBody.Start += (hook_Start)obj; object obj2 = <>c.<>9__6_2; if (obj2 == null) { StatHookEventHandler val2 = delegate(CharacterBody self, StatHookEventArgs args) { bleedDamage[self] = 1f; collapseDamage[self] = 1f; }; <>c.<>9__6_2 = val2; obj2 = (object)val2; } RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj2; object obj3 = <>c.<>9__6_3; if (obj3 == null) { Manipulator val3 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) ILCursor val10 = new ILCursor(il); int num6 = -1; if (Main.BleedEnable.Value) { val10.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "get_bleedChance") }); val10.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 5) }); val10.GotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<ProcChainMask>(x, "AddProc") }); val10.Emit(OpCodes.Ldarg_1); val10.EmitDelegate<Action<DamageInfo>>((Action<DamageInfo>)delegate(DamageInfo info) { if (Object.op_Implicit((Object)(object)info.attacker)) { CharacterBody component4 = info.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component4)) { InflictHyperbleedInfo item2 = RollHyperbleed((DotIndex)0, component4.GetBleedDamage() - 1f, component4); inflictHyperBleedInfos.Add(item2); } } }); if (Main.CollapseEnable.Value) { val10.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "BleedOnHitVoid") }); val10.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 19) }); val10.GotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<ProcChainMask>(x, "AddProc") }); val10.Emit(OpCodes.Ldarg, 1); val10.EmitDelegate<Action<DamageInfo>>((Action<DamageInfo>)delegate(DamageInfo info) { if (Object.op_Implicit((Object)(object)info.attacker)) { CharacterBody component3 = info.attacker.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component3)) { InflictHyperbleedInfo item = RollHyperbleed((DotIndex)8, component3.GetCollapseDamage() - 1f, component3); inflictHyperBleedInfos.Add(item); } } }); } } }; <>c.<>9__6_3 = val3; obj3 = (object)val3; } GlobalEventManager.ProcessHitEnemy += (Manipulator)obj3; object obj4 = <>c.<>9__6_4; if (obj4 == null) { Manipulator val4 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val9 = new ILCursor(il); val9.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<OnDotInflictedServerGlobalDelegate>(x, "Invoke") }); val9.GotoPrev(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0) }); val9.Remove(); val9.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<OnDotInflictedServerGlobalDelegate>(x, "Invoke") }); val9.Remove(); val9.EmitDelegate<Action<OnDotInflictedServerGlobalDelegate, DotController>>((Action<OnDotInflictedServerGlobalDelegate, DotController>)delegate(OnDotInflictedServerGlobalDelegate inflictedServerGlobal, DotController self) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: 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_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Invalid comparison between Unknown and I4 GameObject attacker = lastInfo.attackerObject; DotIndex dotIndex = lastInfo.dotIndex; if (Object.op_Implicit((Object)(object)attacker) && (((int)dotIndex == 0 && Main.BleedEnable.Value) || ((int)dotIndex == 8 && Main.CollapseEnable.Value))) { InflictHyperbleedInfo inflictHyperbleedInfo = inflictHyperBleedInfos.Find((InflictHyperbleedInfo x) => (Object)(object)x.attacker == (Object)(object)attacker && x.dotIndex == dotIndex); if (inflictHyperbleedInfo != null) { if (inflictedServerGlobal != null) { for (int i = 0; i < inflictHyperbleedInfo.numProcs; i++) { inflictedServerGlobal.Invoke(self, ref lastInfo); } } inflictHyperBleedInfos.Remove(inflictHyperbleedInfo); } } }); }; <>c.<>9__6_4 = val4; obj4 = (object)val4; } DotController.InflictDot_refInflictDotInfo += (Manipulator)obj4; if (!Main.BleedEnable.Value || Main.BleedColor.Value <= 1) { return; } object obj5 = <>c.<>9__6_5; if (obj5 == null) { Manipulator val5 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0074: 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_0093: Unknown result type (might be due to invalid IL or missing references) ILCursor val6 = new ILCursor(il); val6.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<DamageNumberManager>(x, "SpawnDamageNumber") }); val6.Emit(OpCodes.Pop); val6.Emit(OpCodes.Pop); val6.Emit(OpCodes.Pop); val6.Emit(OpCodes.Pop); val6.Emit(OpCodes.Pop); val6.Emit(OpCodes.Pop); val6.Remove(); val6.Emit(OpCodes.Ldloc_0); val6.Emit(OpCodes.Ldloc_2); val6.EmitDelegate<Action<DamageDealtMessage, TeamComponent>>((Action<DamageDealtMessage, TeamComponent>)delegate(DamageDealtMessage msg, TeamComponent team) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Expected I4, but got F4 //IL_0268: Expected F4, but got I4 //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Invalid comparison between Unknown and I4 //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Invalid comparison between Unknown and I4 //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_025d->IL025d: Incompatible stack types: I4 vs F4 //IL_025d->IL025d: Incompatible stack types: F4 vs I4 //IL_025d->IL025d: Incompatible stack types: O vs I4 //IL_0257->IL025d: Incompatible stack types: I4 vs O //IL_0257->IL025d: Incompatible stack types: I4 vs F4 //IL_0257->IL025d: Incompatible stack types: F4 vs I4 //IL_0257->IL025d: Incompatible stack types: O vs I4 if ((int)msg.damageColorIndex == 2 && Object.op_Implicit((Object)(object)msg.victim) && Object.op_Implicit((Object)(object)msg.attacker)) { CharacterBody component = msg.attacker.GetComponent<CharacterBody>(); CharacterBody component2 = msg.victim.GetComponent<CharacterBody>(); if (Object.op_Implicit((Object)(object)component) && Object.op_Implicit((Object)(object)component2)) { float num = msg.damage / ((float)component2.GetBuffCount(Buffs.Bleeding) * 0.2f * component.baseDamage); float inverseDamage = GetInverseDamage(num / Main.Calc(Main.BleedStackMode.Value, Main.BleedStackBase.Value, Main.BleedStackMult.Value, Main.BleedStackDecay.Value, component2.GetBuffCount(Buffs.Bleeding) + 1)); if (num > 0f && inverseDamage > 0f) { float num2 = (inverseDamage - 1f) % (float)Main.BleedColor.Value / (float)(Main.BleedColor.Value - 1); Color val7 = Color.HSVToRGB(0f, 71f / 120f, 0.75f - 0.5f * num2); if ((int)team.teamIndex == -1) { val7 *= Color.gray; } if ((int)team.teamIndex == 2) { val7 *= new Color(0.5568628f, 0.2941177f, 0.6039216f); } ParticleSystem ps = DamageNumberManager.instance.ps; EmitParams val8 = default(EmitParams); ((EmitParams)(ref val8)).position = msg.position; ((EmitParams)(ref val8)).startColor = Color32.op_Implicit(val7); ((EmitParams)(ref val8)).applyShapeToPosition = true; ps.Emit(val8, 1); DamageNumberManager.instance.ps.GetCustomParticleData(DamageNumberManager.instance.customData, (ParticleSystemCustomData)0); DamageNumberManager.instance.customData[DamageNumberManager.instance.customData.Count - 1] = new Vector4(1f, 0f, msg.damage, msg.crit ? 1f : 0f); DamageNumberManager.instance.ps.SetCustomParticleData(DamageNumberManager.instance.customData, (ParticleSystemCustomData)0); return; } } } object obj6 = DamageNumberManager.instance; float num3 = msg.damage; Vector3 position = msg.position; int num4 = (msg.crit ? 1 : 0); int num5; if (Object.op_Implicit((Object)(object)team)) { obj6 = team.teamIndex; num3 = num4; num4 = (int)num3; num5 = (int)obj6; } else { num5 = -1; obj6 = num5; num3 = num4; num4 = (int)num3; num5 = (int)obj6; } ((DamageNumberManager)num5).SpawnDamageNumber((float)num4, position, (byte)(int)num3 != 0, (TeamIndex)obj6, msg.damageColorIndex); }); }; <>c.<>9__6_5 = val5; obj5 = (object)val5; } HealthComponent.HandleDamageDealt += (Manipulator)obj5; } public static void PatchStack() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Expected O, but got Unknown object obj = <>c.<>9__7_0; if (obj == null) { hook_InflictDot_refInflictDotInfo val = delegate(orig_InflictDot_refInflictDotInfo orig, ref InflictDotInfo info) { //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Invalid comparison between Unknown and I4 //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Invalid comparison between Unknown and I4 //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Invalid comparison between Unknown and I4 if (NetworkServer.active) { GameObject attackerObject = info.attackerObject; DotIndex dotIndex = info.dotIndex; if (Object.op_Implicit((Object)(object)attackerObject)) { if (((int)dotIndex == 0 && Main.BleedEnable.Value) || ((int)dotIndex == 8 && Main.CollapseEnable.Value)) { info.damageMultiplier *= HyperbleedMultiplier(attackerObject, dotIndex); } if ((Object)(object)info.victimObject != (Object)null) { CharacterBody component = info.victimObject.GetComponent<CharacterBody>(); if ((Object)(object)component != (Object)null) { if ((int)info.dotIndex == 0) { info.damageMultiplier *= Main.Calc(Main.BleedStackMode.Value, Main.BleedStackBase.Value, Main.BleedStackMult.Value, Main.BleedStackDecay.Value, component.GetBuffCount(Buffs.Bleeding) + 1); } else if ((int)info.dotIndex == 8) { info.damageMultiplier *= Main.Calc(Main.CollapseStackMode.Value, Main.CollapseStackBase.Value, Main.CollapseStackMult.Value, Main.CollapseStackDecay.Value, component.GetBuffCount(Buffs.Fracture) + 1); } } } } } lastInfo = info; orig.Invoke(ref info); }; <>c.<>9__7_0 = val; obj = (object)val; } DotController.InflictDot_refInflictDotInfo += (hook_InflictDot_refInflictDotInfo)obj; if (Main.LamerShatterspleen.Value) { object obj2 = <>c.<>9__7_1; if (obj2 == null) { Manipulator val2 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) ILCursor val7 = new ILCursor(il); if (val7.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "BleedOnHitAndExplode"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<Inventory>(x, "GetItemCount") })) { val7.Index += 2; val7.Emit(OpCodes.Pop); val7.Emit(OpCodes.Ldc_I4, 0); } }; <>c.<>9__7_1 = val2; obj2 = (object)val2; } GlobalEventManager.ProcessHitEnemy += (Manipulator)obj2; object obj3 = <>c.<>9__7_2; if (obj3 == null) { hook_GetLocalizedStringByToken val3 = delegate(orig_GetLocalizedStringByToken orig, Language self, string token) { if (token == "ITEM_BLEEDONHITANDEXPLODE_DESC") { string text = "Gain <style=cIsDamage>5%</style> critical chance. Gain <style=cIsDamage>Bleed chance</style> equal to your <style=cIsDamage>Critical chance</style>. <style=cIsDamage>Bleeding</style> enemies <style=cIsDamage>explode</style> on death for <style=cIsDamage>400%</style> <style=cStack>(+400% per stack)</style> damage"; if (!Main.Mods("Hayaku.VanillaRebalance")) { text += ", plus an additional <style=cIsDamage>15%</style> <style=cStack>(+15% per stack)</style> of their maximum health"; } return text + "."; } return orig.Invoke(self, token); }; <>c.<>9__7_2 = val3; obj3 = (object)val3; } Language.GetLocalizedStringByToken += (hook_GetLocalizedStringByToken)obj3; } RoR2Application.onLoad = (Action)Delegate.Combine(RoR2Application.onLoad, (Action)delegate { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown object obj5 = <>c.<>9__7_7; if (obj5 == null) { hook_RecalculateStats val6 = delegate(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (!((Object)(object)self == (Object)null) && !((Object)(object)self.inventory == (Object)null)) { if (Main.LamerShatterspleen.Value && self.inventory.GetItemCount(Items.BleedOnHitAndExplode) > 0) { self.bleedChance += self.crit; } if (Main.HyperbolicBleed.Value) { self.bleedChance = 100f - 10000f / (100f + 1.111111f * self.bleedChance); } } }; <>c.<>9__7_7 = val6; obj5 = (object)val6; } CharacterBody.RecalculateStats += (hook_RecalculateStats)obj5; }); if (!Main.HyperbolicCollapse.Value) { return; } object obj4 = <>c.<>9__7_4; if (obj4 == null) { Manipulator val4 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val5 = new ILCursor(il); val5.GotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 24), (Instruction x) => ILPatternMatchingExt.MatchConvR4(x) }); val5.Index += 2; val5.EmitDelegate<Func<float, float>>((Func<float, float>)((float chance) => 10f - 10f / (1f + 0.011111f * chance))); }; <>c.<>9__7_4 = val4; obj4 = (object)val4; } GlobalEventManager.ProcessHitEnemy += (Manipulator)obj4; } public static float HyperbleedMultiplier(GameObject attacker, DotIndex dotIndex) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) InflictHyperbleedInfo inflictHyperbleedInfo = inflictHyperBleedInfos.FirstOrDefault((InflictHyperbleedInfo x) => (Object)(object)x.attacker == (Object)(object)attacker && x.dotIndex == dotIndex); if (inflictHyperbleedInfo != null && inflictHyperbleedInfo != null) { return inflictHyperbleedInfo.damageMult; } return 1f; } public static InflictHyperbleedInfo RollHyperbleed(DotIndex dotIndex, float damage, CharacterBody body, bool forceSingleBleed = false) { //IL_0022: 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_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Invalid comparison between Unknown and I4 //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Invalid comparison between Unknown and I4 //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Invalid comparison between Unknown and I4 //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Invalid comparison between Unknown and I4 //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Invalid comparison between Unknown and I4 InflictHyperbleedInfo inflictHyperbleedInfo = new InflictHyperbleedInfo(); if (Object.op_Implicit((Object)(object)body)) { inflictHyperbleedInfo.attacker = ((Component)body).gameObject; inflictHyperbleedInfo.dotIndex = dotIndex; inflictHyperbleedInfo.totalChance = body.bleedChance; float effectiveCount = GetEffectiveCount(body.bleedChance, body, (int)dotIndex == 8, forceSingleBleed); inflictHyperbleedInfo.num = ((((int)dotIndex == 0) ? Main.BleedFraction.Value : Main.CollapseFraction.Value) ? ((int)effectiveCount) : (Mathf.FloorToInt(effectiveCount) + (Util.CheckRoll(effectiveCount % 1f * 100f, body.master) ? 1 : 0))); if (inflictHyperbleedInfo.num == 0) { inflictHyperbleedInfo.damageMult = 1f; } else if ((int)dotIndex == 0) { inflictHyperbleedInfo.damageMult = Main.Calc(Main.BleedMode.Value, Main.BleedBase.Value + damage, Main.BleedMult.Value + (Main.BleedDamageBonus.Value ? damage : 0f), Main.BleedDecay.Value, effectiveCount); } else if ((int)dotIndex == 8) { inflictHyperbleedInfo.damageMult = Main.Calc(Main.CollapseMode.Value, Main.CollapseBase.Value + damage, Main.CollapseMult.Value + (Main.CollapseDamageBonus.Value ? damage : 0f), Main.CollapseDecay.Value, effectiveCount); } float num = 0f; if (inflictHyperbleedInfo.num != 0) { if ((int)dotIndex == 0) { num = Main.Calc(Main.BleedProcMode.Value, Main.BleedProcBase.Value, Main.BleedProcMult.Value, Main.BleedProcDecay.Value, effectiveCount); } else if ((int)dotIndex == 8) { num = Main.Calc(Main.CollapseProcMode.Value, Main.CollapseProcBase.Value, Main.CollapseProcMult.Value, Main.CollapseProcDecay.Value, effectiveCount); } } inflictHyperbleedInfo.numProcs = (int)num + (Util.CheckRoll(num % 1f * 100f, 0f, (CharacterMaster)null) ? 1 : 0); } return inflictHyperbleedInfo; } public static float GetDamage(float chance, float damage, CharacterBody body, bool collapse = false) { if (!collapse) { return Main.Calc(Main.BleedMode.Value, Main.BleedBase.Value + damage, Main.BleedMult.Value + (Main.CritDamageBonus.Value ? damage : 0f), Main.BleedDecay.Value, Mathf.Max(1f, GetEffectiveCount(chance + (100f - chance % 100f), body))); } return Main.Calc(Main.CollapseMode.Value, Main.CollapseBase.Value + damage, Main.CollapseMult.Value + (Main.CollapseDamageBonus.Value ? damage : 0f), Main.CollapseDecay.Value, Mathf.Max(1f, GetEffectiveCount(chance + (100f - chance % 100f), body, collapse: true))); } public static float GetEffectiveCount(InflictHyperbleedInfo aci) { if (Main.BleedFraction.Value) { float num = aci.totalChance / 100f; if (num < 1f) { num = 0f; } return num; } return aci.num; } public static float GetEffectiveCount(float chance, CharacterBody body, bool collapse = false, bool forceSingleBleed = false) { //IL_00ca: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Max(0f, (chance - (float)(forceSingleBleed ? 100 : 0)) / 100f); if ((collapse ? Main.CollapseCap.Value : Main.BleedCap.Value) >= 0f) { num = Mathf.Min(num, collapse ? Main.CollapseCap.Value : Main.BleedCap.Value); } if (((Main.BleedFraction.Value && !collapse) || (Main.CollapseFraction.Value && collapse)) && Main.Mods("com.themysticsword.mysticsitems") && (Object)(object)((body != null) ? body.inventory : null) != (Object)null && num > 0f) { num += 0.01f * (float)body.inventory.GetItemCount(ItemCatalog.FindItemIndex("MysticsItems_ScratchTicket")); } if (num <= 0f) { return 0f; } if (!(collapse ? Main.CollapseFraction.Value : Main.BleedFraction.Value)) { return Mathf.FloorToInt(num) + (Util.CheckRoll(num % 1f * 100f, body.master) ? 1 : 0); } return num; } public static float GetInverseDamage(float mult) { switch (Main.BleedMode.Value) { case Main.CritStackingMode.Linear: if (Main.BleedMult.Value == 0f) { return 0f; } return (mult - Main.BleedBase.Value) / Main.BleedMult.Value + 1f; case Main.CritStackingMode.Exponential: if (Main.BleedBase.Value == 0f || Main.BleedMult.Value == 1f || Main.BleedMult.Value <= 0f) { return 0f; } return Mathf.Log(mult / Main.BleedBase.Value, Main.BleedMult.Value) + 1f; case Main.CritStackingMode.Hyperbolic: if (Main.BleedBase.Value == mult || Main.BleedMult.Value * Main.BleedDecay.Value / (mult - Main.BleedBase.Value) - Main.BleedDecay.Value == 0f) { return 0f; } return (Main.BleedMult.Value - Main.BleedDecay.Value) / (Main.BleedMult.Value * Main.BleedDecay.Value / (mult - Main.BleedBase.Value) - Main.BleedDecay.Value); case Main.CritStackingMode.Asymptotic: if (Main.BleedMult.Value == 0f) { return 0f; } return (0f - Mathf.Log(1f - (mult - Main.BleedBase.Value) / Main.BleedMult.Value, 2f)) * Main.BleedDecay.Value + 1f; default: Main.Log.LogError((object)"Invalid Mode??"); return 0f; } } } public class Crit { [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Func<Instruction, bool> <>9__3_9; public static Func<Instruction, bool> <>9__3_10; public static Func<DamageInfo, DamageInfo> <>9__3_11; public static Func<Instruction, bool> <>9__3_12; public static Func<float, HealthComponent, DamageInfo, float> <>9__3_13; public static Manipulator <>9__3_0; public static Func<Instruction, bool> <>9__3_15; public static Action<DamageDealtMessage, DamageReport> <>9__3_16; public static Manipulator <>9__3_1; public static hook_Serialize <>9__3_2; public static hook_Deserialize <>9__3_3; public static hook_OnCrit <>9__3_4; public static Func<Instruction, bool> <>9__3_17; public static Func<Color, Color> <>9__3_18; public static Manipulator <>9__3_5; public static hook_OnEnter <>9__3_6; public static Func<Instruction, bool> <>9__3_19; public static Action<GenericDamageOrb, FireSeekingArrow> <>9__3_20; public static Manipulator <>9__3_7; public static Func<Instruction, bool> <>9__3_21; public static Action<DamageInfo, GenericDamageOrb> <>9__3_22; public static Manipulator <>9__3_8; public static hook_RecalculateStats <>9__4_0; public static StatHookEventHandler <>9__5_0; public static Func<float, string> <>9__5_3; public static Func<float, string> <>9__5_4; public static hook_GetLocalizedStringByToken <>9__5_1; public static Func<ItemIndex, bool> <>9__6_2; public static hook_RecalculateStats <>9__6_0; public static hook_GetLocalizedStringByToken <>9__6_1; internal void <Patch>b__3_0(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); ILLabel val2 = default(ILLabel); val.GotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "crit"), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref val2) }); val.EmitDelegate<Func<DamageInfo, DamageInfo>>((Func<DamageInfo, DamageInfo>)delegate(DamageInfo x) { info = x; return x; }); val.GotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "get_critMultiplier") }); val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Func<float, HealthComponent, DamageInfo, float>>((Func<float, HealthComponent, DamageInfo, float>)delegate(float orig, HealthComponent self, DamageInfo info) { if (!Object.op_Implicit((Object)(object)self)) { return orig; } CharacterBody component = info.attacker.GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { return orig; } Main.AdditionalProcInfo value = null; if (!critInfoAttachments.TryGetValue(info, out value)) { value = RollHypercrit(orig - 2f, component); critInfoAttachments.Add(info, value); } return Mathf.Max(orig, value.damageMult); }); } internal bool <Patch>b__3_9(Instruction x) { return ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "crit"); } internal bool <Patch>b__3_10(Instruction x) { ILLabel val = default(ILLabel); return ILPatternMatchingExt.MatchBrfalse(x, ref val); } internal DamageInfo <Patch>b__3_11(DamageInfo x) { info = x; return x; } internal bool <Patch>b__3_12(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "get_critMultiplier"); } internal float <Patch>b__3_13(float orig, HealthComponent self, DamageInfo info) { if (!Object.op_Implicit((Object)(object)self)) { return orig; } CharacterBody component = info.attacker.GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { return orig; } Main.AdditionalProcInfo value = null; if (!critInfoAttachments.TryGetValue(info, out value)) { value = RollHypercrit(orig - 2f, component); critInfoAttachments.Add(info, value); } return Mathf.Max(orig, value.damageMult); } internal void <Patch>b__3_1(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) <>c__DisplayClass3_0 CS$<>8__locals0 = new <>c__DisplayClass3_0(); ILCursor val = new ILCursor(il); CS$<>8__locals0.message = -1; val.GotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref CS$<>8__locals0.message), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<NetworkServer>(x, "SendToAll") }); int index = val.Index; val.Index = index + 1; val.Emit(OpCodes.Ldloc, CS$<>8__locals0.message); val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<DamageDealtMessage, DamageReport>>((Action<DamageDealtMessage, DamageReport>)delegate(DamageDealtMessage msg, DamageReport report) { TryPassHypercrit(report.damageInfo, msg); }); } internal bool <Patch>b__3_15(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<NetworkServer>(x, "SendToAll"); } internal void <Patch>b__3_16(DamageDealtMessage msg, DamageReport report) { TryPassHypercrit(report.damageInfo, msg); } internal void <Patch>b__3_2(orig_Serialize orig, DamageDealtMessage self, NetworkWriter writer) { orig.Invoke(self, writer); if (!critInfoAttachments.TryGetValue(self, out var value)) { value = new Main.AdditionalProcInfo(); } value.Serialize(writer); } internal void <Patch>b__3_3(orig_Deserialize orig, DamageDealtMessage self, NetworkReader reader) { orig.Invoke(self, reader); Main.AdditionalProcInfo additionalProcInfo = new Main.AdditionalProcInfo(); additionalProcInfo.Deserialize(reader); critInfoAttachments.Add(self, additionalProcInfo); lastNetworkedCritInfo = additionalProcInfo; } internal void <Patch>b__3_4(orig_OnCrit orig, GlobalEventManager self, CharacterBody body, DamageInfo damageInfo, CharacterMaster master, float procCoefficient, ProcChainMask procChainMask) { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) critInfoAttachments.TryGetValue(damageInfo, out var value); if (value != null && value.numProcs > 1) { int numProcs = value.numProcs; value.numProcs = 0; for (int i = 0; i < numProcs; i++) { orig.Invoke(self, body, damageInfo, master, procCoefficient, procChainMask); } } else { orig.Invoke(self, body, damageInfo, master, procCoefficient, procChainMask); } } internal void <Patch>b__3_5(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val = new ILCursor(il); val.GotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, typeof(DamageColor), "FindColor") }); val.EmitDelegate<Func<Color, Color>>((Func<Color, Color>)delegate(Color origColor) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_000e: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0033: 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_0078: Unknown result type (might be due to invalid IL or missing references) if (Crit.lastNetworkedCritInfo == null) { return origColor; } Main.AdditionalProcInfo lastNetworkedCritInfo = Crit.lastNetworkedCritInfo; Crit.lastNetworkedCritInfo = null; float effectiveCount = GetEffectiveCount(lastNetworkedCritInfo); if (effectiveCount == 0f) { return origColor; } float num = 1f / 6f - (effectiveCount - 1f) / (float)Main.CritColor.Value; return Color.HSVToRGB((num % 1f + 1f) % 1f, 1f, 1f); }); } internal bool <Patch>b__3_17(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt(x, typeof(DamageColor), "FindColor"); } internal Color <Patch>b__3_18(Color origColor) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_000e: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0033: 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_0078: Unknown result type (might be due to invalid IL or missing references) if (Crit.lastNetworkedCritInfo == null) { return origColor; } Main.AdditionalProcInfo lastNetworkedCritInfo = Crit.lastNetworkedCritInfo; Crit.lastNetworkedCritInfo = null; float effectiveCount = GetEffectiveCount(lastNetworkedCritInfo); if (effectiveCount == 0f) { return origColor; } float num = 1f / 6f - (effectiveCount - 1f) / (float)Main.CritColor.Value; return Color.HSVToRGB((num % 1f + 1f) % 1f, 1f, 1f); } internal void <Patch>b__3_6(orig_OnEnter orig, FireFlurrySeekingArrow self) { orig.Invoke(self); Main.AdditionalProcInfo additionalProcInfo = RollHypercrit(((EntityState)self).characterBody.critMultiplier - 2f, ((EntityState)self).characterBody); if (additionalProcInfo.num > 1) { additionalProcInfo.damageMult *= 6f / (float)(3 + 3 * additionalProcInfo.num); } critInfoAttachments.Add(self, additionalProcInfo); ((FireSeekingArrow)self).isCrit = additionalProcInfo.num > 0; ((FireSeekingArrow)self).maxArrowCount = 3 + additionalProcInfo.num * 3; ((FireSeekingArrow)self).arrowReloadDuration = ((FireSeekingArrow)self).baseArrowReloadDuration * (3f / (float)((FireSeekingArrow)self).maxArrowCount) / ((BaseState)self).attackSpeedStat; } internal void <Patch>b__3_7(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); val.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 0) }); val.Emit(OpCodes.Dup); val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<GenericDamageOrb, FireSeekingArrow>>((Action<GenericDamageOrb, FireSeekingArrow>)delegate(GenericDamageOrb orb, FireSeekingArrow self) { TryPassHypercrit(self, orb); }); } internal bool <Patch>b__3_19(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, 0); } internal void <Patch>b__3_20(GenericDamageOrb orb, FireSeekingArrow self) { TryPassHypercrit(self, orb); } internal void <Patch>b__3_8(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) ILCursor val = new ILCursor(il); val.GotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchNewobj<DamageInfo>(x) }); val.Emit(OpCodes.Dup); val.Emit(OpCodes.Ldarg_0); val.EmitDelegate<Action<DamageInfo, GenericDamageOrb>>((Action<DamageInfo, GenericDamageOrb>)delegate(DamageInfo di, GenericDamageOrb orb) { TryPassHypercrit(orb, di); }); } internal bool <Patch>b__3_21(Instruction x) { return ILPatternMatchingExt.MatchNewobj<DamageInfo>(x); } internal void <Patch>b__3_22(DamageInfo di, GenericDamageOrb orb) { TryPassHypercrit(orb, di); } internal void <PatchHyperbolic>b__4_0(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (!((Object)(object)self == (Object)null) && !((Object)(object)self.inventory == (Object)null) && Main.HyperbolicCrit.Value) { self.crit = 100f - 10000f / (100f + 1.111111f * self.crit); } } internal void <LaserScopeRework>b__5_0(CharacterBody self, StatHookEventArgs args) { if (!((Object)(object)self == (Object)null) && !((Object)(object)self.inventory == (Object)null)) { int itemCount = self.inventory.GetItemCount(Items.CritDamage); if (itemCount > 0) { args.critDamageMultAdd += (Main.LaserScopeDamage.Value + (float)(itemCount - 1) * Main.LaserScopeDamageStack.Value) / 100f - (float)itemCount; args.critAdd += Main.LaserScope.Value + (float)(itemCount - 1) * Main.LaserScopeStack.Value; } } } internal string <LaserScopeRework>b__5_1(orig_GetLocalizedStringByToken orig, Language self, string token) { if (token == "ITEM_CRITDAMAGE_DESC") { return ((Main.LaserScope.Value != 0f || Main.LaserScopeStack.Value != 0f) ? ("Gain " + <LaserScopeRework>g__s|5_2(Main.LaserScope.Value, Main.LaserScopeStack.Value, (float f) => f + "%") + " chance to <style=cIsDamage>Critically Strike</style>. ") : "") + ((Main.LaserScopeDamage.Value != 0f || Main.LaserScopeDamageStack.Value != 0f) ? ("<style=cIsDamage>Critical Strikes</style> deal an additional " + <LaserScopeRework>g__s|5_2(Main.LaserScopeDamage.Value, Main.LaserScopeDamageStack.Value, (float f) => f + "%") + ".") : ""); } return orig.Invoke(self, token); } internal string <LaserScopeRework>b__5_3(float f) { return f + "%"; } internal string <LaserScopeRework>b__5_4(float f) { return f + "%"; } internal bool <MoonglassesRework>b__6_2(ItemIndex x) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) return ((Object)ItemCatalog.GetItemDef(x)).name == "MysticsItems_Moonglasses"; } internal void <MoonglassesRework>b__6_0(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (!((Object)(object)((self != null) ? self.inventory : null) != (Object)null)) { return; } int itemCount = self.inventory.GetItemCount(Items.MysticsItems_Moonglasses); if (itemCount != 0) { self.crit *= Mathf.Pow(2f, (float)itemCount); self.crit -= Main.Moonglasses.Value * (float)itemCount; if (self.crit < 0f && self.inventory.GetItemCount(Items.ConvertCritChanceToCritDamage) > 0) { Chat.AddMessage("Hypercrit makes crit chance past 100 give a chance to do a hit that is your crit damage +100%. So in a scenario where your crit is 101% and crit damage is x2, mean your actual crit damage will be x2 in 100% cases and x3 in 1% cases. So to put it simply from x2 to x3.\r\nNow negative crit would work like this. Let's say you have -50% chance and x3.5 crit damage. Obviously no way for you to proc crits randomly, but could give a change to deal \"negative crit\" in other ways, that is -100% from you crit damage for every -100% crit chance past 0. So your crit damage range would be from x2.5 to x3.5.\r\nAt the least I was hoping that negative would work with survivors that can't have chance and instead get it converted to crit damage. Like railgunner."); self.master.TrueKill(); } self.crit = Mathf.Max(0f, self.crit); } } internal string <MoonglassesRework>b__6_1(orig_GetLocalizedStringByToken orig, Language self, string token) { if (token == "ITEM_MYSTICSITEMS_MOONGLASSES_PICKUP") { return orig.Invoke(self, "ITEM_HYPERCRIT_MOONGLASSES_PICKUP"); } if (token == "ITEM_MYSTICSITEMS_MOONGLASSES_DESC") { return orig.Invoke(self, "ITEM_HYPERCRIT_MOONGLASSES_DESC"); } return orig.Invoke(self, token); } } [CompilerGenerated] private sealed class <>c__DisplayClass3_0 { public int message; internal bool <Patch>b__14(Instruction x) { return ILPatternMatchingExt.MatchLdloc(x, ref message); } } public static ConditionalWeakTable<object, Main.AdditionalProcInfo> critInfoAttachments = new ConditionalWeakTable<object, Main.AdditionalProcInfo>(); public static Main.AdditionalProcInfo lastNetworkedCritInfo = null; public static DamageInfo info; public static void Patch() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_004a: 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) //IL_0055: Expected O, but got Unknown //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Expected O, but got Unknown //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Expected O, but got Unknown //IL_00de: 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) //IL_00e9: Expected O, but got Unknown //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Expected O, but got Unknown //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Expected O, but got Unknown //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Expected O, but got Unknown Main.Log.LogDebug((object)"The Spirit of ThinkInvis Embraces You..."); object obj = <>c.<>9__3_0; if (obj == null) { Manipulator val = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) ILCursor val14 = new ILCursor(il); ILLabel val15 = default(ILLabel); val14.GotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "crit"), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref val15) }); val14.EmitDelegate<Func<DamageInfo, DamageInfo>>((Func<DamageInfo, DamageInfo>)delegate(DamageInfo x) { info = x; return x; }); val14.GotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<CharacterBody>(x, "get_critMultiplier") }); val14.Emit(OpCodes.Ldarg_0); val14.Emit(OpCodes.Ldarg_1); val14.EmitDelegate<Func<float, HealthComponent, DamageInfo, float>>((Func<float, HealthComponent, DamageInfo, float>)delegate(float orig, HealthComponent self, DamageInfo info) { if (!Object.op_Implicit((Object)(object)self)) { return orig; } CharacterBody component = info.attacker.GetComponent<CharacterBody>(); if (!Object.op_Implicit((Object)(object)component)) { return orig; } Main.AdditionalProcInfo value3 = null; if (!critInfoAttachments.TryGetValue(info, out value3)) { value3 = RollHypercrit(orig - 2f, component); critInfoAttachments.Add(info, value3); } return Mathf.Max(orig, value3.damageMult); }); }; <>c.<>9__3_0 = val; obj = (object)val; } HealthComponent.TakeDamageProcess += (Manipulator)obj; object obj2 = <>c.<>9__3_1; if (obj2 == null) { Manipulator val2 = delegate(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) ILCursor val13 = new ILCursor(il); int message = -1; val13.GotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, ref message), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<NetworkServer>(x, "SendToAll") }); int index = val13.Index; val13.Index = index + 1; val13.Emit(OpCodes.Ldloc, message); val13.Emit(OpCodes.Ldarg_0); val13.EmitDelegate<Action<DamageDealtMessage, DamageReport>>((Action<DamageDealtMessage, DamageReport>)delegate(DamageDealtMessage msg, DamageReport report) { TryPassHypercrit(report.damageInfo, msg); }); }; <>c.<>9__3_1 = val2; obj2 = (object)val2; } HealthComponent.SendDamageDealt += (Manipulator)obj2; object obj3 = <>c.<>9__3_2; if (obj3 == null) { hook_Serialize val3 = delegate(orig_Serialize orig, DamageDealtMessage self, NetworkWriter writer) { orig.Invoke(self, writer); if (!critInfoAttachments.TryGetValue(self, out var value2)) { value2 = new Main.AdditionalProcInfo(); } value2.Serialize(writer); }; <>c.<>9__3_2 = val3; obj3 = (object)val3; } DamageDealtMessage.Serialize += (hook_Serialize)obj3; object obj4 = <>c.<>9__3_3; if (obj4 == null) { hook_Deserialize val4 = delegate(orig_Deserialize orig, DamageDealtMessage self, NetworkReader reader) { orig.Invoke(self, reader); Main.AdditionalProcInfo additionalProcInfo2 = new Main.AdditionalProcInfo(); additionalProcInfo2.Deserialize(reader); critInfoAttachments.Add(self, additionalProcInfo2); lastNetworkedCritInfo = additionalProcInfo2; }; <>c.<>9__3_3 = val4; obj4 = (object)val4; } DamageDealtMessage.Deserialize += (hook_Deserialize)obj4; object obj5 = <>c.<>9__3_4; if (obj5 == null) { hook_OnCrit val5 = delegate(orig_OnCrit orig, GlobalEventManager self, CharacterBody body, DamageInfo damageInfo, CharacterMaster master, float procCoefficient, ProcChainMask procChainMask) { //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) critInfoAttachments.TryGetValue(damageInfo, out var value); if (value != null && value.numProcs > 1) { int numProcs = value.numProcs; value.numProcs = 0; for (int i = 0; i < numProcs; i++) { orig.Invoke(self, body, damageInfo, master, procCoefficient, procChainMask); } } else { orig.Invoke(self, body, damageInfo, master, procCoefficient, procChainMask); } }; <>c.<>9__3_4 = val5; obj5 = (object)val5; } GlobalEventManager.OnCrit += (hook_OnCrit)obj5; object obj6 = <>c.<>9__3_5; if (obj6 == null) { Manipulator val6 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown ILCursor val12 = new ILCursor(il); val12.GotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt(x, typeof(DamageColor), "FindColor") }); val12.EmitDelegate<Func<Color, Color>>((Func<Color, Color>)delegate(Color origColor) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_000e: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0033: 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_0078: Unknown result type (might be due to invalid IL or missing references) if (lastNetworkedCritInfo == null) { return origColor; } Main.AdditionalProcInfo aci = lastNetworkedCritInfo; lastNetworkedCritInfo = null; float effectiveCount = GetEffectiveCount(aci); if (effectiveCount == 0f) { return origColor; } float num = 1f / 6f - (effectiveCount - 1f) / (float)Main.CritColor.Value; return Color.HSVToRGB((num % 1f + 1f) % 1f, 1f, 1f); }); }; <>c.<>9__3_5 = val6; obj6 = (object)val6; } DamageNumberManager.SpawnDamageNumber += (Manipulator)obj6; if (!Main.Flurry.Value) { return; } object obj7 = <>c.<>9__3_6; if (obj7 == null) { hook_OnEnter val7 = delegate(orig_OnEnter orig, FireFlurrySeekingArrow self) { orig.Invoke(self); Main.AdditionalProcInfo additionalProcInfo = RollHypercrit(((EntityState)self).characterBody.critMultiplier - 2f, ((EntityState)self).characterBody); if (additionalProcInfo.num > 1) { additionalProcInfo.damageMult *= 6f / (float)(3 + 3 * additionalProcInfo.num); } critInfoAttachments.Add(self, additionalProcInfo); ((FireSeekingArrow)self).isCrit = additionalProcInfo.num > 0; ((FireSeekingArrow)self).maxArrowCount = 3 + additionalProcInfo.num * 3; ((FireSeekingArrow)self).arrowReloadDuration = ((FireSeekingArrow)self).baseArrowReloadDuration * (3f / (float)((FireSeekingArrow)self).maxArrowCount) / ((BaseState)self).attackSpeedStat; }; <>c.<>9__3_6 = val7; obj7 = (object)val7; } FireFlurrySeekingArrow.OnEnter += (hook_OnEnter)obj7; object obj8 = <>c.<>9__3_7; if (obj8 == null) { Manipulator val8 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) ILCursor val11 = new ILCursor(il); val11.GotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, 0) }); val11.Emit(OpCodes.Dup); val11.Emit(OpCodes.Ldarg_0); val11.EmitDelegate<Action<GenericDamageOrb, FireSeekingArrow>>((Action<GenericDamageOrb, FireSeekingArrow>)delegate(GenericDamageOrb orb, FireSeekingArrow self) { TryPassHypercrit(self, orb); }); }; <>c.<>9__3_7 = val8; obj8 = (object)val8; } FireSeekingArrow.FireOrbArrow += (Manipulator)obj8; object obj9 = <>c.<>9__3_8; if (obj9 == null) { Manipulator val9 = delegate(ILContext il) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) ILCursor val10 = new ILCursor(il); val10.GotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchNewobj<DamageInfo>(x) }); val10.Emit(OpCodes.Dup); val10.Emit(OpCodes.Ldarg_0); val10.EmitDelegate<Action<DamageInfo, GenericDamageOrb>>((Action<DamageInfo, GenericDamageOrb>)delegate(DamageInfo di, GenericDamageOrb orb) { TryPassHypercrit(orb, di); }); }; <>c.<>9__3_8 = val9; obj9 = (object)val9; } GenericDamageOrb.OnArrival += (Manipulator)obj9; } public static void PatchHyperbolic() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown object obj = <>c.<>9__4_0; if (obj == null) { hook_RecalculateStats val = delegate(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if (!((Object)(object)self == (Object)null) && !((Object)(object)self.inventory == (Object)null) && Main.HyperbolicCrit.Value) { self.crit = 100f - 10000f / (100f + 1.111111f * self.crit); } }; <>c.<>9__4_0 = val; obj = (object)val; } CharacterBody.RecalculateStats += (hook_RecalculateStats)obj; } public static void LaserScopeRework() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Expected O, but got Unknown //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Expected O, but got Unknown object obj = <>c.<>9__5_0; if (obj == null) { StatHookEventHandler val = delegate(CharacterBody self, StatHookEventArgs args) { if (!((Object)(object)self == (Object)null) && !((Object)(object)self.inventory == (Object)null)) { int itemCount = self.inventory.GetItemCount(Items.CritDamage); if (itemCount > 0) { args.critDamageMultAdd += (Main.LaserScopeDamage.Value + (float)(itemCount - 1) * Main.LaserScopeDamageStack.Value) / 100f - (float)itemCount; args.critAdd += Main.LaserScope.Value + (float)(itemCount - 1) * Main.LaserScopeStack.Value; } } }; <>c.<>9__5_0 = val; obj = (object)val; } RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj; object obj2 = <>c.<>9__5_1; if (obj2 == null) { hook_GetLocalizedStringByToken val2 = (orig_GetLocalizedStringByToken orig, Language self, string token) => (token == "ITEM_CRITDAMAGE_DESC") ? (((Main.LaserScope.Value != 0f || Main.LaserScopeStack.Value != 0f) ? ("Gain " + s(Main.LaserScope.Value, Main.LaserScopeStack.Value, (float f) => f + "%") + " chance to <style=cIsDamage>Critically Strike</style>. ") : "") + ((Main.LaserScopeDamage.Value != 0f || Main.LaserScopeDamageStack.Value != 0f) ? ("<style=cIsDamage>Critical Strikes</style> deal an additional " + s(Main.LaserScopeDamage.Value, Main.LaserScopeDamageStack.Value, (float f) => f + "%") + ".") : "")) : orig.Invoke(self, token); <>c.<>9__5_1 = val2; obj2 = (object)val2; } Language.GetLocalizedStringByToken += (hook_GetLocalizedStringByToken)obj2; static string s(float first, float stack, Func<float, string> fn) { string text = "<style=cIsDamage>" + fn(first) + "</style>"; if (stack != 0f) { text = text + "<style=cStack>(" + ((stack > 0f) ? "+" : "-") + fn(stack) + " per stack)</style>"; } return text; } } public static void MoonglassesRework() { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown if (General.disabledItems.Keys.Any((ItemIndex x) => ((Object)ItemCatalog.GetItemDef(x)).name == "MysticsItems_Moonglasses")) { return; } object obj = <>c.<>9__6_0; if (obj == null) { hook_RecalculateStats val = delegate(orig_RecalculateStats orig, CharacterBody self) { orig.Invoke(self); if ((Object)(object)((self != null) ? self.inventory : null) != (Object)null) { int itemCount = self.inventory.GetItemCount(Items.MysticsItems_Moonglasses); if (itemCount != 0) { self.crit *= Mathf.Pow(2f, (float)itemCount); self.crit -= Main.Moonglasses.Value * (float)itemCount; if (self.crit < 0f && self.inventory.GetItemCount(Items.ConvertCritChanceToCritDamage) > 0) { Chat.AddMessage("Hypercrit makes crit chance past 100 give a chance to do a hit that is your crit damage +100%. So in a scenario where your crit is 101% and crit damage is x2, mean your actual crit damage will be x2 in 100% cases and x3 in 1% cases. So to put it simply from x2 to x3.\r\nNow negative crit would work like this. Let's say you have -50% chance and x3.5 crit damage. Obviously no way for you to proc crits randomly, but could give a change to deal \"negative crit\" in other ways, that is -100% from you crit damage for every -100% crit chance past 0. So your crit damage range would be from x2.5 to x3.5.\r\nAt the least I was hoping that negative would work with survivors that can't have chance and instead get it converted to crit damage. Like railgunner."); self.master.TrueKill(); } self.crit = Mathf.Max(0f, self.crit); } } }; <>c.<>9__6_0 = val; obj = (object)val; } CharacterBody.RecalculateStats += (hook_RecalculateStats)obj; object obj2 = <>c.<>9__6_1; if (obj2 == null) { hook_GetLocalizedStringByToken val2 = delegate(orig_GetLocalizedStringByToken orig, Language self, string token) { if (token == "ITEM_MYSTICSITEMS_MOONGLASSES_PICKUP") { return orig.Invoke(self, "ITEM_HYPERCRIT_MOONGLASSES_PICKUP"); } return (token == "ITEM_MYSTICSITEMS_MOONGLASSES_DESC") ? orig.Invoke(self, "ITEM_HYPERCRIT_MOONGLASSES_DESC") : orig.Invoke(self, token); }; <>c.<>9__6_1 = val2; obj2 = (object)val2; } Language.GetLocalizedStringByToken += (hook_GetLocalizedStringByToken)obj2; LanguageAPI.Add("ITEM_HYPERCRIT_MOONGLASSES_PICKUP", "Increase Critical Strike damage... <color=#FF7F7F>BUT reduce Critical Strike chance.</color>"); LanguageAPI.Add("ITEM_HYPERCRIT_MOONGLASSES_DESC", "Increase Critical Strike damage by <style=cIsDamage>{CritDamageIncrease}% <style=cStack>(+{CritDamageIncreasePerStack}% per stack)</style></style>. <style=cIsUtility>reduce Critical Strike chance by {0}% <style=cStack>(+{0}% per stack)</style> for each stack.</style>".Replace("{0}", Main.Moonglasses.Value.ToString()).Replace("{CritDamageIncrease}", ((object)Moonglasses.critDamageIncrease).ToString()).Replace("{CritDamageIncreasePerStack}", ((object)Moonglasses.critDamageIncreasePerStack).ToString())); } public static bool TryGetHypercrit(object target, ref Main.AdditionalProcInfo aci) { return critInfoAttachments.TryGetValue(target, out aci); } private static bool TryPassHypercrit(object from, object to) { Main.AdditionalProcInfo value; bool flag = critInfoAttachments.TryGetValue(from, out value); if (flag) { critInfoAttachments.Add(to, value); } return flag; } private static bool TryPassHypercrit(object from, object to, out Main.AdditionalProcInfo aci) { bool flag = critInfoAttachments.TryGetValue(from, out aci); if (flag) { critInfoAttachments.Add(to, aci); } return flag; } public static Main.AdditionalProcInfo RollHypercrit(float damage, CharacterBody body) { Main.AdditionalProcInfo additionalProcInfo = new Main.AdditionalProcInfo(); if (Object.op_Implicit((Object)(object)body)) { additionalProcInfo.totalChance = body.crit; float effectiveCount = GetEffectiveCount(body.crit, body); additionalProcInfo.num = (Main.CritFraction.Value ? (Mathf.FloorToInt(effectiveCount) + (Util.CheckRoll(effectiveCount % 1f * 100f, body.master) ? 1 : 0)) : ((int)effectiveCount)); if (additionalProcInfo.num == 0) { additionalProcInfo.damageMult = 1f; } else { additionalProcInfo.damageMult = Main.Calc(Main.CritMode.Value, Main.CritBase.Value + damage, Main.CritMult.Value + (Main.CritDamageBonus.Value ? damage : 0f), Main.CritDecay.Value, effectiveCount); } float num = 0f; if (additionalProcInfo.num != 0) { num = Main.Calc(Main.CritProcMode.Value, Main.CritProcBase.Value, Main.CritProcMult.Value, Main.CritProcDecay.Value, effectiveCount); } additionalProcInfo.numProcs = (int)num + (Util.CheckRoll(num % 1f * 100f, 0f, (CharacterMaster)null) ? 1 : 0); } return additionalProcInfo; } public static float GetDamage(float chance, float damage, CharacterBody body) { return Main.Calc(Main.CritMode.Value, Main.CritBase.Value + damage, Main.CritMult.Value + (Main.CritDamageBonus.Value ? damage : 0f), Main.CritDecay.Value, Mathf.Max(1f, GetEffectiveCount(chance + (100f - chance % 100f), body))); } public static float GetEffectiveCount(Main.AdditionalProcInfo aci) { if (Main.CritFraction.Value) { float num = aci.totalChance / 100f; if (num < 1f) { num = 0f; } return num; } return aci.num; } public static float GetEffectiveCount(float chance, CharacterBody body, bool forceSingleCrit = false) { //IL_009b: Unknown result type (might be due to invalid IL or missing references) float num = Mathf.Max(0f, (chance - (float)(forceSingleCrit ? 100 : 0)) / 100f); if (Main.CritCap.Value >= 0f) { num = Mathf.Min(num, Main.CritCap.Value); } if (Main.CritFraction.Value && Main.Mods("com.themysticsword.mysticsitems") && (Object)(object)((body != null) ? body.inventory : null) != (Object)null && num > 0f) { num += 0.01f * (float)body.inventory.GetItemCount(ItemCatalog.FindItemIndex("MysticsItems_ScratchTicket")); } if (num <= 0f) { return 0f; } if (!Main.CritFraction.Value) { return Mathf.FloorToInt(num) + (Util.CheckRoll(num % 1f * 100f, body.master) ? 1 : 0); } return num; } [CompilerGenerated] internal static string <LaserScopeRework>g__s|5_2(float first, float stack, Func<float, string> fn) { string text = "<style=cIsDamage>" + fn(first) + "</style>"; if (stack != 0f) { text = text + "<style=cStack>(" + ((stack > 0f) ? "+" : "-") + fn(stack) + " per stac