Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of RealerMysticsRisky2Utils v2.0.23
MysticsRisky2Utils.dll
Decompiled 5 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; 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 System.Text; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using EntityStates; using HG; using HG.Coroutines; using IL.RoR2; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using MonoMod.RuntimeDetour; using MysticsRisky2Utils.BaseAssetTypes; using MysticsRisky2Utils.ContentManagement; using MysticsRisky2Utils.SoftDependencies; using On.RoR2; using On.RoR2.UI.LogBook; using R2API; using R2API.Networking; using R2API.Networking.Interfaces; using R2API.Utils; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.Hologram; using RoR2.Navigation; using RoR2.Networking; using RoR2.Orbs; using RoR2.UI; using RoR2.UI.LogBook; using TMPro; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.UI; [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("MysticsRisky2Utils")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+461e952c7eb95bbee6cec8fcd50fe1440c38dc77")] [assembly: AssemblyProduct("MysticsRisky2Utils")] [assembly: AssemblyTitle("MysticsRisky2Utils")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] 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; } } } namespace MysticsRisky2Utils { public static class BrotherInfection { private static GameObject _white; private static GameObject _green; private static GameObject _red; private static GameObject _blue; public static GameObject white { get { //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) if ((Object)(object)_white == (Object)null) { _white = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Brother/ItemInfection, White.prefab").WaitForCompletion(); } return _white; } } public static GameObject green { get { //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) if ((Object)(object)_green == (Object)null) { _green = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Brother/ItemInfection, Green.prefab").WaitForCompletion(); } return _green; } } public static GameObject red { get { //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) if ((Object)(object)_red == (Object)null) { _red = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Brother/ItemInfection, Red.prefab").WaitForCompletion(); } return _red; } } public static GameObject blue { get { //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) if ((Object)(object)_blue == (Object)null) { _blue = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Brother/ItemInfection, Blue.prefab").WaitForCompletion(); } return _blue; } } } public static class CharacterModelMaterialOverrides { private class MysticsRisky2UtilsCharacterModelMaterialOverridesComponent : MonoBehaviour { public List<string> activeOverrides = new List<string>(); } public delegate void MaterialOverrideHandler(CharacterModel characterModel, ref Material material, ref bool ignoreOverlays); public struct MaterialOverrideInfo { public string key; public MaterialOverrideHandler handler; } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_Awake <>9__0_0; public static Func<Instruction, bool> <>9__0_4; public static Func<Instruction, bool> <>9__0_5; public static Func<Instruction, bool> <>9__0_6; public static Manipulator <>9__0_1; public static Func<Instruction, bool> <>9__0_11; public static Func<Instruction, bool> <>9__0_13; public static Action<CharacterModel, ItemDisplay> <>9__0_10; public static Manipulator <>9__0_2; internal void <Init>b__0_0(orig_Awake orig, CharacterModel self) { orig.Invoke(self); ((Component)self).gameObject.AddComponent<MysticsRisky2UtilsCharacterModelMaterialOverridesComponent>(); } internal void <Init>b__0_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_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) <>c__DisplayClass0_0 CS$<>8__locals0 = new <>c__DisplayClass0_0(); ILCursor val = new ILCursor(il); CS$<>8__locals0.ignoreOverlaysPos = 0; ILLabel val2 = default(ILLabel); if (!val.TryGotoNext((MoveType)1, new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ref CS$<>8__locals0.ignoreOverlaysPos), (Instruction x) => ILPatternMatchingExt.MatchBrtrue(x, ref val2), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<CharacterModel>(x, "activeOverlayCount") })) { return; } <>c__DisplayClass0_1 CS$<>8__locals1 = new <>c__DisplayClass0_1(); val.Emit(OpCodes.Ldarg, 0); val.Emit(OpCodes.Ldloc, 0); val.Emit(OpCodes.Ldarg, CS$<>8__locals0.ignoreOverlaysPos); CS$<>8__locals1.ignoreOverlays2 = false; val.EmitDelegate<Func<CharacterModel, Material, bool, Material>>((Func<CharacterModel, Material, bool, Material>)delegate(CharacterModel characterModel, Material material, bool ignoreOverlays) { <>c__DisplayClass0_2 CS$<>8__locals2 = new <>c__DisplayClass0_2 { component = ((Component)characterModel).GetComponent<MysticsRisky2UtilsCharacterModelMaterialOverridesComponent>() }; if (Object.op_Implicit((Object)(object)CS$<>8__locals2.component)) { MaterialOverrideInfo materialOverrideInfo = materialOverrides.FirstOrDefault((MaterialOverrideInfo x) => CS$<>8__locals2.component.activeOverrides.Contains(x.key)); if (!materialOverrideInfo.Equals(default(MaterialOverrideInfo))) { materialOverrideInfo.handler(characterModel, ref material, ref ignoreOverlays); } } CS$<>8__locals1.ignoreOverlays2 = ignoreOverlays; return material; }); val.Emit(OpCodes.Stloc, 0); val.EmitDelegate<Func<bool>>((Func<bool>)(() => CS$<>8__locals1.ignoreOverlays2)); val.Emit(OpCodes.Starg, CS$<>8__locals0.ignoreOverlaysPos); } internal bool <Init>b__0_4(Instruction x) { ILLabel val = default(ILLabel); return ILPatternMatchingExt.MatchBrtrue(x, ref val); } internal bool <Init>b__0_5(Instruction x) { return ILPatternMatchingExt.MatchLdarg(x, 0); } internal bool <Init>b__0_6(Instruction x) { return ILPatternMatchingExt.MatchLdfld<CharacterModel>(x, "activeOverlayCount"); } internal void <Init>b__0_2(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_008d: 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) <>c__DisplayClass0_3 CS$<>8__locals0 = new <>c__DisplayClass0_3(); ILCursor val = new ILCursor(il); CS$<>8__locals0.itemDisplayPos = 0; if (!val.TryGotoNext((MoveType)1, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<ParentedPrefabDisplay>(x, "get_itemDisplay"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref CS$<>8__locals0.itemDisplayPos) }) || !val.TryGotoNext((MoveType)1, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<ItemDisplay>(x, "SetVisibilityLevel") })) { return; } val.Emit(OpCodes.Ldarg, 0); val.Emit(OpCodes.Ldloc, CS$<>8__locals0.itemDisplayPos); val.EmitDelegate<Action<CharacterModel, ItemDisplay>>((Action<CharacterModel, ItemDisplay>)delegate(CharacterModel characterModel, ItemDisplay itemDisplay) { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) <>c__DisplayClass0_4 CS$<>8__locals1 = new <>c__DisplayClass0_4 { component = ((Component)characterModel).GetComponent<MysticsRisky2UtilsCharacterModelMaterialOverridesComponent>() }; if (Object.op_Implicit((Object)(object)CS$<>8__locals1.component)) { MaterialOverrideInfo materialOverrideInfo = materialOverrides.FirstOrDefault((MaterialOverrideInfo x) => CS$<>8__locals1.component.activeOverrides.Contains(x.key)); if (!materialOverrideInfo.Equals(default(MaterialOverrideInfo))) { Material material = null; bool ignoreOverlays = false; materialOverrideInfo.handler(characterModel, ref material, ref ignoreOverlays); RendererInfo[] rendererInfos = itemDisplay.rendererInfos; foreach (RendererInfo val2 in rendererInfos) { val2.renderer.material = material; } } } }); } internal bool <Init>b__0_11(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<ParentedPrefabDisplay>(x, "get_itemDisplay"); } internal bool <Init>b__0_13(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<ItemDisplay>(x, "SetVisibilityLevel"); } internal void <Init>b__0_10(CharacterModel characterModel, ItemDisplay itemDisplay) { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) <>c__DisplayClass0_4 CS$<>8__locals0 = new <>c__DisplayClass0_4 { component = ((Component)characterModel).GetComponent<MysticsRisky2UtilsCharacterModelMaterialOverridesComponent>() }; if (!Object.op_Implicit((Object)(object)CS$<>8__locals0.component)) { return; } MaterialOverrideInfo materialOverrideInfo = materialOverrides.FirstOrDefault((MaterialOverrideInfo x) => CS$<>8__locals0.component.activeOverrides.Contains(x.key)); if (!materialOverrideInfo.Equals(default(MaterialOverrideInfo))) { Material material = null; bool ignoreOverlays = false; materialOverrideInfo.handler(characterModel, ref material, ref ignoreOverlays); RendererInfo[] rendererInfos = itemDisplay.rendererInfos; foreach (RendererInfo val in rendererInfos) { val.renderer.material = material; } } } } [CompilerGenerated] private sealed class <>c__DisplayClass0_0 { public int ignoreOverlaysPos; internal bool <Init>b__3(Instruction x) { return ILPatternMatchingExt.MatchLdarg(x, ref ignoreOverlaysPos); } } [CompilerGenerated] private sealed class <>c__DisplayClass0_1 { public bool ignoreOverlays2; internal Material <Init>b__7(CharacterModel characterModel, Material material, bool ignoreOverlays) { <>c__DisplayClass0_2 CS$<>8__locals0 = new <>c__DisplayClass0_2 { component = ((Component)characterModel).GetComponent<MysticsRisky2UtilsCharacterModelMaterialOverridesComponent>() }; if (Object.op_Implicit((Object)(object)CS$<>8__locals0.component)) { MaterialOverrideInfo materialOverrideInfo = materialOverrides.FirstOrDefault((MaterialOverrideInfo x) => CS$<>8__locals0.component.activeOverrides.Contains(x.key)); if (!materialOverrideInfo.Equals(default(MaterialOverrideInfo))) { materialOverrideInfo.handler(characterModel, ref material, ref ignoreOverlays); } } ignoreOverlays2 = ignoreOverlays; return material; } internal bool <Init>b__8() { return ignoreOverlays2; } } [CompilerGenerated] private sealed class <>c__DisplayClass0_2 { public MysticsRisky2UtilsCharacterModelMaterialOverridesComponent component; internal bool <Init>b__9(MaterialOverrideInfo x) { return component.activeOverrides.Contains(x.key); } } [CompilerGenerated] private sealed class <>c__DisplayClass0_3 { public int itemDisplayPos; internal bool <Init>b__12(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, ref itemDisplayPos); } } [CompilerGenerated] private sealed class <>c__DisplayClass0_4 { public MysticsRisky2UtilsCharacterModelMaterialOverridesComponent component; internal bool <Init>b__14(MaterialOverrideInfo x) { return component.activeOverrides.Contains(x.key); } } public static List<MaterialOverrideInfo> materialOverrides = new List<MaterialOverrideInfo>(); internal static void Init() { //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 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown object obj = <>c.<>9__0_0; if (obj == null) { hook_Awake val = delegate(orig_Awake orig, CharacterModel self) { orig.Invoke(self); ((Component)self).gameObject.AddComponent<MysticsRisky2UtilsCharacterModelMaterialOverridesComponent>(); }; <>c.<>9__0_0 = val; obj = (object)val; } CharacterModel.Awake += (hook_Awake)obj; object obj2 = <>c.<>9__0_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_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) ILCursor val6 = new ILCursor(il); int ignoreOverlaysPos = 0; ILLabel val7 = default(ILLabel); if (val6.TryGotoNext((MoveType)1, new Func<Instruction, bool>[4] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, ref ignoreOverlaysPos), (Instruction x) => ILPatternMatchingExt.MatchBrtrue(x, ref val7), (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<CharacterModel>(x, "activeOverlayCount") })) { val6.Emit(OpCodes.Ldarg, 0); val6.Emit(OpCodes.Ldloc, 0); val6.Emit(OpCodes.Ldarg, ignoreOverlaysPos); bool ignoreOverlays3 = false; val6.EmitDelegate<Func<CharacterModel, Material, bool, Material>>((Func<CharacterModel, Material, bool, Material>)delegate(CharacterModel characterModel, Material material, bool ignoreOverlays) { MysticsRisky2UtilsCharacterModelMaterialOverridesComponent component2 = ((Component)characterModel).GetComponent<MysticsRisky2UtilsCharacterModelMaterialOverridesComponent>(); if (Object.op_Implicit((Object)(object)component2)) { MaterialOverrideInfo materialOverrideInfo2 = materialOverrides.FirstOrDefault((MaterialOverrideInfo x) => component2.activeOverrides.Contains(x.key)); if (!materialOverrideInfo2.Equals(default(MaterialOverrideInfo))) { materialOverrideInfo2.handler(characterModel, ref material, ref ignoreOverlays); } } ignoreOverlays3 = ignoreOverlays; return material; }); val6.Emit(OpCodes.Stloc, 0); val6.EmitDelegate<Func<bool>>((Func<bool>)(() => ignoreOverlays3)); val6.Emit(OpCodes.Starg, ignoreOverlaysPos); } }; <>c.<>9__0_1 = val2; obj2 = (object)val2; } CharacterModel.UpdateRendererMaterials += (Manipulator)obj2; object obj3 = <>c.<>9__0_2; if (obj3 == null) { Manipulator val3 = 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_008d: 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) ILCursor val4 = new ILCursor(il); int itemDisplayPos = 0; if (val4.TryGotoNext((MoveType)1, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<ParentedPrefabDisplay>(x, "get_itemDisplay"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref itemDisplayPos) }) && val4.TryGotoNext((MoveType)1, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<ItemDisplay>(x, "SetVisibilityLevel") })) { val4.Emit(OpCodes.Ldarg, 0); val4.Emit(OpCodes.Ldloc, itemDisplayPos); val4.EmitDelegate<Action<CharacterModel, ItemDisplay>>((Action<CharacterModel, ItemDisplay>)delegate(CharacterModel characterModel, ItemDisplay itemDisplay) { //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) MysticsRisky2UtilsCharacterModelMaterialOverridesComponent component = ((Component)characterModel).GetComponent<MysticsRisky2UtilsCharacterModelMaterialOverridesComponent>(); if (Object.op_Implicit((Object)(object)component)) { MaterialOverrideInfo materialOverrideInfo = materialOverrides.FirstOrDefault((MaterialOverrideInfo x) => component.activeOverrides.Contains(x.key)); if (!materialOverrideInfo.Equals(default(MaterialOverrideInfo))) { Material material2 = null; bool ignoreOverlays2 = false; materialOverrideInfo.handler(characterModel, ref material2, ref ignoreOverlays2); RendererInfo[] rendererInfos = itemDisplay.rendererInfos; foreach (RendererInfo val5 in rendererInfos) { val5.renderer.material = material2; } } } }); } }; <>c.<>9__0_2 = val3; obj3 = (object)val3; } CharacterModel.UpdateMaterials += (Manipulator)obj3; } public static void SetOverrideActive(CharacterModel model, string key, bool active) { //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_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) MysticsRisky2UtilsCharacterModelMaterialOverridesComponent component = ((Component)model).GetComponent<MysticsRisky2UtilsCharacterModelMaterialOverridesComponent>(); if (!Object.op_Implicit((Object)(object)component)) { return; } bool flag = component.activeOverrides.Contains(key); if (flag == active) { return; } if (flag) { component.activeOverrides.Remove(key); } else { component.activeOverrides.Add(key); } model.materialsDirty = true; foreach (ParentedPrefabDisplay parentedPrefabDisplay in model.parentedPrefabDisplays) { ParentedPrefabDisplay current = parentedPrefabDisplay; ItemDisplay itemDisplay = ((ParentedPrefabDisplay)(ref current)).itemDisplay; VisibilityLevel visibilityLevel = itemDisplay.visibilityLevel; itemDisplay.visibilityLevel = (VisibilityLevel)(-1); itemDisplay.SetVisibilityLevel(visibilityLevel); } } public static void AddOverride(string key, MaterialOverrideHandler handler) { materialOverrides.Add(new MaterialOverrideInfo { key = key, handler = handler }); } } [Obsolete("for EliteVariety support, dont use this (use R2API instead)")] public class CharacterStats { public delegate float StatModifierApplyTimes(MysticsRisky2UtilsPlugin.GenericCharacterInfo genericCharacterInfo); public delegate bool StatModifierShouldApply(MysticsRisky2UtilsPlugin.GenericCharacterInfo genericCharacterInfo); public struct StatModifier { public float multiplier; public float flat; public StatModifierApplyTimes times; } public struct FlatStatModifier { public float amount; public StatModifierApplyTimes times; } public struct BoolStatModifier { public StatModifierShouldApply shouldApply; } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static StatHookEventHandler <>9__17_0; internal void <Init>b__17_0(CharacterBody self, StatHookEventArgs args) { MysticsRisky2UtilsPlugin.GenericCharacterInfo genericCharacterInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(self); AddStatModifier(genericCharacterInfo, levelModifiers, ref args.levelFlatAdd); AddStatModifier(genericCharacterInfo, healthModifiers, ref args.baseHealthAdd, ref args.healthMultAdd); AddStatModifier(genericCharacterInfo, shieldModifiers, ref args.baseShieldAdd, ref args.shieldMultAdd); AddStatModifier(genericCharacterInfo, regenModifiers, ref args.baseRegenAdd); AddStatModifier(genericCharacterInfo, cursePenaltyModifiers, ref args.baseCurseAdd); AddStatModifier(genericCharacterInfo, damageModifiers, ref args.baseDamageAdd, ref args.damageMultAdd); AddStatModifier(genericCharacterInfo, attackSpeedModifiers, ref args.baseAttackSpeedAdd, ref args.attackSpeedMultAdd); AddStatModifier(genericCharacterInfo, moveSpeedModifiers, ref args.baseMoveSpeedAdd, ref args.moveSpeedMultAdd); AddStatModifier(genericCharacterInfo, cooldownModifiers, ref args.cooldownReductionAdd, ref args.cooldownMultAdd); AddStatModifier(genericCharacterInfo, critModifiers, ref args.critAdd); AddStatModifier(genericCharacterInfo, armorModifiers, ref args.armorAdd); foreach (BoolStatModifier rootMovementModifier in rootMovementModifiers) { if (rootMovementModifier.shouldApply(genericCharacterInfo)) { self.moveSpeed = 0f; self.acceleration = 80f; } } } } public static List<FlatStatModifier> levelModifiers = new List<FlatStatModifier>(); public static List<StatModifier> healthModifiers = new List<StatModifier>(); public static List<StatModifier> shieldModifiers = new List<StatModifier>(); public static List<FlatStatModifier> regenModifiers = new List<FlatStatModifier>(); public static List<StatModifier> moveSpeedModifiers = new List<StatModifier>(); public static List<BoolStatModifier> rootMovementModifiers = new List<BoolStatModifier>(); public static List<StatModifier> damageModifiers = new List<StatModifier>(); public static List<StatModifier> attackSpeedModifiers = new List<StatModifier>(); public static List<FlatStatModifier> critModifiers = new List<FlatStatModifier>(); public static List<FlatStatModifier> armorModifiers = new List<FlatStatModifier>(); public static List<StatModifier> cooldownModifiers = new List<StatModifier>(); public static List<FlatStatModifier> cursePenaltyModifiers = new List<FlatStatModifier>(); public static void Init() { //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__17_0; if (obj == null) { StatHookEventHandler val = delegate(CharacterBody self, StatHookEventArgs args) { MysticsRisky2UtilsPlugin.GenericCharacterInfo genericCharacterInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(self); AddStatModifier(genericCharacterInfo, levelModifiers, ref args.levelFlatAdd); AddStatModifier(genericCharacterInfo, healthModifiers, ref args.baseHealthAdd, ref args.healthMultAdd); AddStatModifier(genericCharacterInfo, shieldModifiers, ref args.baseShieldAdd, ref args.shieldMultAdd); AddStatModifier(genericCharacterInfo, regenModifiers, ref args.baseRegenAdd); AddStatModifier(genericCharacterInfo, cursePenaltyModifiers, ref args.baseCurseAdd); AddStatModifier(genericCharacterInfo, damageModifiers, ref args.baseDamageAdd, ref args.damageMultAdd); AddStatModifier(genericCharacterInfo, attackSpeedModifiers, ref args.baseAttackSpeedAdd, ref args.attackSpeedMultAdd); AddStatModifier(genericCharacterInfo, moveSpeedModifiers, ref args.baseMoveSpeedAdd, ref args.moveSpeedMultAdd); AddStatModifier(genericCharacterInfo, cooldownModifiers, ref args.cooldownReductionAdd, ref args.cooldownMultAdd); AddStatModifier(genericCharacterInfo, critModifiers, ref args.critAdd); AddStatModifier(genericCharacterInfo, armorModifiers, ref args.armorAdd); foreach (BoolStatModifier rootMovementModifier in rootMovementModifiers) { if (rootMovementModifier.shouldApply(genericCharacterInfo)) { self.moveSpeed = 0f; self.acceleration = 80f; } } }; <>c.<>9__17_0 = val; obj = (object)val; } RecalculateStatsAPI.GetStatCoefficients += (StatHookEventHandler)obj; } public static void AddStatModifier(MysticsRisky2UtilsPlugin.GenericCharacterInfo info, List<StatModifier> list, ref float flat, ref float mult) { foreach (StatModifier item in list) { if (item.times(info) != 0f) { if (item.flat != 0f) { flat += item.flat * item.times(info); } if (item.multiplier != 0f) { mult += item.multiplier * item.times(info); } } } } public static void AddStatModifier(MysticsRisky2UtilsPlugin.GenericCharacterInfo info, List<FlatStatModifier> list, ref float flat) { foreach (FlatStatModifier item in list) { if (item.amount != 0f && item.times(info) != 0f) { flat += item.amount * item.times(info); } } } } public static class ChildLocatorAdditions { public struct Addition { public string modelName; public string transformLocation; public string childName; } public static List<Addition> list = new List<Addition>(); internal static void Init() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown CharacterModel.Awake += new hook_Awake(CharacterModel_Awake); } private static void CharacterModel_Awake(orig_Awake orig, CharacterModel self) { //IL_00e8: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (!Object.op_Implicit((Object)(object)self.childLocator)) { return; } foreach (Addition addition in list.FindAll((Addition x) => x.modelName == Utils.TrimCloneFromString(((Object)((Component)self).gameObject).name))) { if (!self.childLocator.transformPairs.Any((NameTransformPair x) => x.name == addition.childName)) { Transform val = ((Component)self).transform.Find(addition.transformLocation); if (Object.op_Implicit((Object)(object)val)) { ref NameTransformPair[] transformPairs = ref self.childLocator.transformPairs; NameTransformPair val2 = new NameTransformPair { name = addition.childName, transform = val }; ArrayUtils.ArrayAppend<NameTransformPair>(ref transformPairs, ref val2); } } } } } public static class ConfigOptions { public abstract class ConfigurableValue { public static List<ConfigurableValue> instancesList = new List<ConfigurableValue>(); public List<string> stringsToAffect = new List<string>(); public string key = ""; public string id = ""; public static ConfigurableValue<T> Create<T>(ConfigFile configFile, string section, string key, T defaultValue, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useDefaultValueConfigEntry = null, bool restartRequired = false, Action<T> onChanged = null) { return new ConfigurableValue<T>(configFile, section, key, defaultValue, description, stringsToAffect, useDefaultValueConfigEntry, restartRequired, onChanged); } public static ConfigurableValue<int> CreateInt(string modGUID, string modName, ConfigFile configFile, string section, string key, int defaultValue, int min = 0, int max = 1000, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useDefaultValueConfigEntry = null, bool restartRequired = false, Action<int> onChanged = null) { ConfigurableValue<int> configurableValue = Create(configFile, section, key, defaultValue, description, stringsToAffect, useDefaultValueConfigEntry, restartRequired, onChanged); if (SoftDependencyManager.RiskOfOptionsDependency.enabled) { SoftDependencyManager.RiskOfOptionsDependency.AddOptionInt(modGUID, modName, configurableValue.bepinexConfigEntry, min, max, restartRequired); } return configurableValue; } public static ConfigurableValue<float> CreateFloat(string modGUID, string modName, ConfigFile configFile, string section, string key, float defaultValue, float min = 0f, float max = 1000f, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useDefaultValueConfigEntry = null, bool restartRequired = false, Action<float> onChanged = null) { ConfigurableValue<float> configurableValue = Create(configFile, section, key, defaultValue, description, stringsToAffect, useDefaultValueConfigEntry, restartRequired, onChanged); if (SoftDependencyManager.RiskOfOptionsDependency.enabled) { SoftDependencyManager.RiskOfOptionsDependency.AddOptionFloat(modGUID, modName, configurableValue.bepinexConfigEntry, min, max, restartRequired); } return configurableValue; } public static ConfigurableValue<bool> CreateBool(string modGUID, string modName, ConfigFile configFile, string section, string key, bool defaultValue, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useDefaultValueConfigEntry = null, bool restartRequired = false, Action<bool> onChanged = null) { ConfigurableValue<bool> configurableValue = Create(configFile, section, key, defaultValue, description, stringsToAffect, useDefaultValueConfigEntry, restartRequired, onChanged); if (SoftDependencyManager.RiskOfOptionsDependency.enabled) { SoftDependencyManager.RiskOfOptionsDependency.AddOptionBool(modGUID, modName, configurableValue.bepinexConfigEntry, restartRequired); } return configurableValue; } public static ConfigurableValue<string> CreateString(string modGUID, string modName, ConfigFile configFile, string section, string key, string defaultValue, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useDefaultValueConfigEntry = null, bool restartRequired = false, Action<string> onChanged = null) { ConfigurableValue<string> configurableValue = Create(configFile, section, key, defaultValue, description, stringsToAffect, useDefaultValueConfigEntry, restartRequired, onChanged); if (SoftDependencyManager.RiskOfOptionsDependency.enabled) { SoftDependencyManager.RiskOfOptionsDependency.AddOptionString(modGUID, modName, configurableValue.bepinexConfigEntry, restartRequired); } return configurableValue; } } public class ConfigurableValue<T> : ConfigurableValue { public ConfigEntry<T> bepinexConfigEntry; private ConfigEntry<bool> useDefaultValueConfigEntry; private T defaultValue; public T Value { get { if (useDefaultValueConfigEntry != null && useDefaultValueConfigEntry.Value) { return defaultValue; } return bepinexConfigEntry.Value; } } public ConfigurableValue(ConfigFile configFile, string section, string key, T defaultValue, string description = "", List<string> stringsToAffect = null, ConfigEntry<bool> useDefaultValueConfigEntry = null, bool restartRequired = false, Action<T> onChanged = null) { ConfigurableValue<T> configurableValue = this; id = Path.GetFileNameWithoutExtension(configFile.ConfigFilePath) + "." + section + "." + key; ConfigurableValue configurableValue2 = ConfigurableValue.instancesList.FirstOrDefault((ConfigurableValue x) => x.id == configurableValue.id); if (configurableValue2 != null) { ConfigurableValue<T> configurableValue3 = configurableValue2 as ConfigurableValue<T>; bepinexConfigEntry = configurableValue3.bepinexConfigEntry; this.useDefaultValueConfigEntry = useDefaultValueConfigEntry; } else { bepinexConfigEntry = configFile.Bind<T>(section, key, defaultValue, description); ConfigurableValue.instancesList.Add(this); } this.useDefaultValueConfigEntry = useDefaultValueConfigEntry; base.key = key; this.defaultValue = defaultValue; if (stringsToAffect != null) { base.stringsToAffect = stringsToAffect; } else { base.stringsToAffect = new List<string>(); } if (onChanged != null) { bepinexConfigEntry.SettingChanged += delegate { onChanged(configurableValue.Value); reloadLogbook = true; }; onChanged(Value); reloadLogbook = true; } } public override string ToString() { return Convert.ToString(Value, CultureInfo.InvariantCulture); } public static implicit operator T(ConfigurableValue<T> configurableValue) { return configurableValue.Value; } } private static bool reloadLogbook; internal static void Init() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown LogBookController.Awake += new hook_Awake(LogBookController_Awake); Language.GetLocalizedStringByToken += new hook_GetLocalizedStringByToken(Language_GetLocalizedStringByToken); } private static void LogBookController_Awake(orig_Awake orig, LogBookController self) { orig.Invoke(self); if (reloadLogbook) { reloadLogbook = false; LogBookController.BuildStaticData(); } } private static string Language_GetLocalizedStringByToken(orig_GetLocalizedStringByToken orig, Language self, string token) { string text = orig.Invoke(self, token); foreach (ConfigurableValue item in ConfigurableValue.instancesList.FindAll((ConfigurableValue x) => x.stringsToAffect.Contains(token))) { text = text.Replace("{" + item.key + "}", item.ToString()); } return text; } } public static class CostTypeCreation { public struct CustomCostTypeInfo { public CostTypeDef costTypeDef; public Action<CostTypeIndex> onRegister; public CostTypeIndex index; } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static Action<List<CostTypeDef>> <>9__0_0; public static hook_Register <>9__0_1; internal void <Init>b__0_0(List<CostTypeDef> list) { foreach (CustomCostTypeInfo customCostType in customCostTypes) { list.Add(customCostType.costTypeDef); } } internal void <Init>b__0_1(orig_Register orig, CostTypeIndex costType, CostTypeDef costTypeDef) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0059: 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) <>c__DisplayClass0_0 CS$<>8__locals0 = new <>c__DisplayClass0_0 { costTypeDef = costTypeDef }; orig.Invoke(costType, CS$<>8__locals0.costTypeDef); CustomCostTypeInfo customCostTypeInfo = customCostTypes.FirstOrDefault((CustomCostTypeInfo x) => x.costTypeDef == CS$<>8__locals0.costTypeDef); if (!customCostTypeInfo.Equals(default(CustomCostTypeInfo))) { customCostTypeInfo.index = costType; if (customCostTypeInfo.onRegister != null) { customCostTypeInfo.onRegister(customCostTypeInfo.index); } } } } [CompilerGenerated] private sealed class <>c__DisplayClass0_0 { public CostTypeDef costTypeDef; internal bool <Init>b__2(CustomCostTypeInfo x) { return x.costTypeDef == costTypeDef; } } public static List<CustomCostTypeInfo> customCostTypes = new List<CustomCostTypeInfo>(); internal static void Init() { //IL_003f: 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_004a: Expected O, but got Unknown CostTypeCatalog.modHelper.getAdditionalEntries += delegate(List<CostTypeDef> list) { foreach (CustomCostTypeInfo customCostType in customCostTypes) { list.Add(customCostType.costTypeDef); } }; object obj = <>c.<>9__0_1; if (obj == null) { hook_Register val = delegate(orig_Register orig, CostTypeIndex costType, CostTypeDef costTypeDef) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0059: 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) orig.Invoke(costType, costTypeDef); CustomCostTypeInfo customCostTypeInfo = customCostTypes.FirstOrDefault((CustomCostTypeInfo x) => x.costTypeDef == costTypeDef); if (!customCostTypeInfo.Equals(default(CustomCostTypeInfo))) { customCostTypeInfo.index = costType; if (customCostTypeInfo.onRegister != null) { customCostTypeInfo.onRegister(customCostTypeInfo.index); } } }; <>c.<>9__0_1 = val; obj = (object)val; } CostTypeCatalog.Register += (hook_Register)obj; } public static void CreateCostType(CustomCostTypeInfo customCostType) { customCostTypes.Add(customCostType); } } public static class CustomTempVFXManagement { public struct VFXInfo { public GameObject prefab; public string child; public Func<CharacterBody, bool> condition; public Func<CharacterBody, float> radius; } public class MysticsRisky2UtilsTempVFX : MonoBehaviour { public enum VisualState { Enter, Exit } public Transform parentTransform; public bool rotateWithParent = false; public HealthComponent healthComponent; public GameObject[] enterObjects = (GameObject[])(object)new GameObject[0]; public MonoBehaviour[] enterBehaviours = (MonoBehaviour[])(object)new MonoBehaviour[0]; public GameObject[] exitObjects = (GameObject[])(object)new GameObject[0]; public MonoBehaviour[] exitBehaviours = (MonoBehaviour[])(object)new MonoBehaviour[0]; public VisualState visualState; public VisualState prevVisualState; public float radius; private Transform cachedTransform; public void Awake() { cachedTransform = ((Component)this).transform; } public void Start() { RebuildVisuals(); } public void Update() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)healthComponent) || !healthComponent.alive) { visualState = VisualState.Exit; } if (Object.op_Implicit((Object)(object)parentTransform)) { cachedTransform.position = parentTransform.position; if (rotateWithParent) { cachedTransform.rotation = parentTransform.rotation; } cachedTransform.localScale = Vector3.one * radius; if (visualState != prevVisualState) { prevVisualState = visualState; RebuildVisuals(); } } else { Object.Destroy((Object)(object)((Component)this).gameObject); } } public void RebuildVisuals() { bool flag = visualState == VisualState.Enter; GameObject[] array = enterObjects; foreach (GameObject val in array) { val.SetActive(flag); } MonoBehaviour[] array2 = enterBehaviours; foreach (MonoBehaviour val2 in array2) { ((Behaviour)val2).enabled = flag; } GameObject[] array3 = exitObjects; foreach (GameObject val3 in array3) { val3.SetActive(!flag); } MonoBehaviour[] array4 = exitBehaviours; foreach (MonoBehaviour val4 in array4) { ((Behaviour)val4).enabled = !flag; } } } public class MysticsRisky2UtilsCharacterCustomTempVFXHolder : MonoBehaviour { public CharacterBody characterBody; public Dictionary<GameObject, MysticsRisky2UtilsTempVFX> dictionary = new Dictionary<GameObject, MysticsRisky2UtilsTempVFX>(); public static Dictionary<CharacterBody, MysticsRisky2UtilsCharacterCustomTempVFXHolder> bodyToVFXHolder = new Dictionary<CharacterBody, MysticsRisky2UtilsCharacterCustomTempVFXHolder>(); public void Awake() { characterBody = ((Component)this).GetComponent<CharacterBody>(); bodyToVFXHolder[characterBody] = this; foreach (VFXInfo item in allVFX) { dictionary.Add(item.prefab, null); } } public void OnDestroy() { if (bodyToVFXHolder.ContainsKey(characterBody)) { bodyToVFXHolder.Remove(characterBody); } } } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_Awake <>9__4_0; public static hook_UpdateAllTemporaryVisualEffects <>9__4_1; internal void <Init>b__4_0(orig_Awake orig, CharacterBody self) { orig.Invoke(self); ((Component)self).gameObject.AddComponent<MysticsRisky2UtilsCharacterCustomTempVFXHolder>(); } internal void <Init>b__4_1(orig_UpdateAllTemporaryVisualEffects orig, CharacterBody self) { //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (!MysticsRisky2UtilsCharacterCustomTempVFXHolder.bodyToVFXHolder.TryGetValue(self, out var value)) { return; } foreach (VFXInfo item in allVFX) { bool flag = item.condition(self); MysticsRisky2UtilsTempVFX mysticsRisky2UtilsTempVFX = value.dictionary[item.prefab]; if (flag) { if (!Object.op_Implicit((Object)(object)mysticsRisky2UtilsTempVFX)) { GameObject val = Object.Instantiate<GameObject>(item.prefab, self.corePosition, Quaternion.identity); mysticsRisky2UtilsTempVFX = val.GetComponent<MysticsRisky2UtilsTempVFX>(); value.dictionary[item.prefab] = mysticsRisky2UtilsTempVFX; mysticsRisky2UtilsTempVFX.parentTransform = self.coreTransform; mysticsRisky2UtilsTempVFX.visualState = MysticsRisky2UtilsTempVFX.VisualState.Enter; mysticsRisky2UtilsTempVFX.healthComponent = self.healthComponent; mysticsRisky2UtilsTempVFX.radius = item.radius(self); LocalCameraEffect component = val.GetComponent<LocalCameraEffect>(); if (Object.op_Implicit((Object)(object)component)) { component.targetCharacter = ((Component)self).gameObject; } if (string.IsNullOrEmpty(item.child)) { continue; } ModelLocator modelLocator = self.modelLocator; if (!Object.op_Implicit((Object)(object)modelLocator)) { continue; } Transform modelTransform = modelLocator.modelTransform; if (!Object.op_Implicit((Object)(object)modelTransform)) { continue; } ChildLocator component2 = ((Component)modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component2)) { Transform val2 = component2.FindChild(item.child); if (Object.op_Implicit((Object)(object)val2)) { mysticsRisky2UtilsTempVFX.parentTransform = val2; break; } } } else { mysticsRisky2UtilsTempVFX.visualState = MysticsRisky2UtilsTempVFX.VisualState.Enter; } } else if (Object.op_Implicit((Object)(object)mysticsRisky2UtilsTempVFX)) { mysticsRisky2UtilsTempVFX.visualState = MysticsRisky2UtilsTempVFX.VisualState.Exit; } } } } public static List<VFXInfo> allVFX = new List<VFXInfo>(); public static float DefaultRadiusCall(CharacterBody body) { return body.radius; } public static float DefaultBestFitRadiusCall(CharacterBody body) { return body.bestFitRadius; } internal static void Init() { //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__4_0; if (obj == null) { hook_Awake val = delegate(orig_Awake orig, CharacterBody self) { orig.Invoke(self); ((Component)self).gameObject.AddComponent<MysticsRisky2UtilsCharacterCustomTempVFXHolder>(); }; <>c.<>9__4_0 = val; obj = (object)val; } CharacterBody.Awake += (hook_Awake)obj; object obj2 = <>c.<>9__4_1; if (obj2 == null) { hook_UpdateAllTemporaryVisualEffects val2 = delegate(orig_UpdateAllTemporaryVisualEffects orig, CharacterBody self) { //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (MysticsRisky2UtilsCharacterCustomTempVFXHolder.bodyToVFXHolder.TryGetValue(self, out var value)) { foreach (VFXInfo item in allVFX) { bool flag = item.condition(self); MysticsRisky2UtilsTempVFX mysticsRisky2UtilsTempVFX = value.dictionary[item.prefab]; if (flag) { if (!Object.op_Implicit((Object)(object)mysticsRisky2UtilsTempVFX)) { GameObject val3 = Object.Instantiate<GameObject>(item.prefab, self.corePosition, Quaternion.identity); mysticsRisky2UtilsTempVFX = val3.GetComponent<MysticsRisky2UtilsTempVFX>(); value.dictionary[item.prefab] = mysticsRisky2UtilsTempVFX; mysticsRisky2UtilsTempVFX.parentTransform = self.coreTransform; mysticsRisky2UtilsTempVFX.visualState = MysticsRisky2UtilsTempVFX.VisualState.Enter; mysticsRisky2UtilsTempVFX.healthComponent = self.healthComponent; mysticsRisky2UtilsTempVFX.radius = item.radius(self); LocalCameraEffect component = val3.GetComponent<LocalCameraEffect>(); if (Object.op_Implicit((Object)(object)component)) { component.targetCharacter = ((Component)self).gameObject; } if (!string.IsNullOrEmpty(item.child)) { ModelLocator modelLocator = self.modelLocator; if (Object.op_Implicit((Object)(object)modelLocator)) { Transform modelTransform = modelLocator.modelTransform; if (Object.op_Implicit((Object)(object)modelTransform)) { ChildLocator component2 = ((Component)modelTransform).GetComponent<ChildLocator>(); if (Object.op_Implicit((Object)(object)component2)) { Transform val4 = component2.FindChild(item.child); if (Object.op_Implicit((Object)(object)val4)) { mysticsRisky2UtilsTempVFX.parentTransform = val4; break; } } } } } } else { mysticsRisky2UtilsTempVFX.visualState = MysticsRisky2UtilsTempVFX.VisualState.Enter; } } else if (Object.op_Implicit((Object)(object)mysticsRisky2UtilsTempVFX)) { mysticsRisky2UtilsTempVFX.visualState = MysticsRisky2UtilsTempVFX.VisualState.Exit; } } } }; <>c.<>9__4_1 = val2; obj2 = (object)val2; } CharacterBody.UpdateAllTemporaryVisualEffects += (hook_UpdateAllTemporaryVisualEffects)obj2; } } public static class DamageColorAPI { public static List<DamageColorIndex> registeredColorIndicies = new List<DamageColorIndex>(); internal static void Init() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown DamageColor.FindColor += new hook_FindColor(DamageColor_FindColor); } private static Color DamageColor_FindColor(orig_FindColor orig, DamageColorIndex colorIndex) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0015: 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_0028: Unknown result type (might be due to invalid IL or missing references) if (registeredColorIndicies.Contains(colorIndex)) { return DamageColor.colors[colorIndex]; } return orig.Invoke(colorIndex); } public static DamageColorIndex RegisterDamageColor(Color color) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) int num = DamageColor.colors.Length; DamageColorIndex val = (DamageColorIndex)(byte)num; ArrayUtils.ArrayAppend<Color>(ref DamageColor.colors, ref color); registeredColorIndicies.Add(val); return val; } } public static class EliteDisplays { private static GameObject _fireHorn; private static GameObject _lightningHorn; private static GameObject _iceCrown; private static GameObject _poisonCrown; private static GameObject _hauntedCrown; private static GameObject _lunarEye; public static GameObject fireHorn { get { //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) if ((Object)(object)_fireHorn == (Object)null) { _fireHorn = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/EliteFire/DisplayEliteHorn.prefab").WaitForCompletion(); } return _fireHorn; } } public static GameObject lightningHorn { get { //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) if ((Object)(object)_lightningHorn == (Object)null) { _lightningHorn = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/EliteLightning/DisplayEliteRhinoHorn.prefab").WaitForCompletion(); } return _lightningHorn; } } public static GameObject iceCrown { get { //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) if ((Object)(object)_iceCrown == (Object)null) { _iceCrown = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/EliteIce/DisplayEliteIceCrown.prefab").WaitForCompletion(); } return _iceCrown; } } public static GameObject poisonCrown { get { //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) if ((Object)(object)_poisonCrown == (Object)null) { _poisonCrown = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ElitePoison/DisplayEliteUrchinCrown.prefab").WaitForCompletion(); } return _poisonCrown; } } public static GameObject hauntedCrown { get { //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) if ((Object)(object)_hauntedCrown == (Object)null) { _hauntedCrown = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/EliteHaunted/DisplayEliteStealthCrown.prefab").WaitForCompletion(); } return _hauntedCrown; } } public static GameObject lunarEye { get { //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) if ((Object)(object)_lunarEye == (Object)null) { _lunarEye = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/EliteLunar/DisplayEliteLunar,Eye.prefab").WaitForCompletion(); } return _lunarEye; } } } internal static class GenericChildLocatorAdditions { public static void Init() { ChildLocatorAdditions.list.Add(new ChildLocatorAdditions.Addition { modelName = "mdlRoboBallMini", transformLocation = "RoboBallMiniArmature/ROOT", childName = "ROOT" }); ChildLocatorAdditions.list.Add(new ChildLocatorAdditions.Addition { modelName = "mdlTreebot", transformLocation = "TreebotArmature/ROOT/Base/PlatformBase/ArmPlatformBase/Antennae.1/Antennae.005/Antennae.003/Antennae.007/Antennae.002/Antennae.006/Antennae.004", childName = "MR2UAntennae4" }); ChildLocatorAdditions.list.Add(new ChildLocatorAdditions.Addition { modelName = "mdlClayBruiser", transformLocation = "ClayBruiserArmature/ROOT/base/stomach/chest", childName = "Chest" }); ChildLocatorAdditions.list.Add(new ChildLocatorAdditions.Addition { modelName = "mdlRoboBallBoss", transformLocation = "RoboBallBossArmature/ROOT/Shell", childName = "Shell" }); ChildLocatorAdditions.list.Add(new ChildLocatorAdditions.Addition { modelName = "mdlGravekeeper", transformLocation = "GravekeeperArmature/ROOT/JarBase", childName = "JarBase" }); ChildLocatorAdditions.list.Add(new ChildLocatorAdditions.Addition { modelName = "mdlGrandparent", transformLocation = "GrandparentArmature/ROOT/base/stomach/chest", childName = "Chest" }); } } public class GenericGameEvents { public struct OnTakeDamageEventInfo { public float damageTaken; } public delegate void DamageAttackerVictimEventHandler(DamageInfo damageInfo, MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo, MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo); public delegate void DamageAttackerEventHandler(DamageInfo damageInfo, MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo); public delegate void DamageModifierEventHandler(DamageInfo damageInfo, MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo, MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo, ref float damage); public delegate void DamageExecutionEventHandler(DamageInfo damageInfo, MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo, MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo, float damage, ref float executionThreshold, ref GameObject executionEffectPrefab, ref bool forceExecution); public delegate void DamageVictimEventHandler(DamageInfo damageInfo, MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo); public delegate void DamageReportEventHandler(DamageReport damageReport); public delegate void SceneRNGEventHandler(Xoroshiro128Plus rng); public delegate void InteractionEventHandler(Interactor interactor, IInteractable interactable, GameObject interactableObject, bool canProc); public delegate void PlayerCharacterDeathEventHandler(DamageReport damageReport, ref string deathQuote); public class MysticsRisky2UtilsDamageEvents : MonoBehaviour, IOnIncomingDamageServerReceiver, IOnTakeDamageServerReceiver { public HealthComponent healthComponent; public CharacterBody victimBody; public void Start() { healthComponent = ((Component)this).GetComponent<HealthComponent>(); if (!Object.op_Implicit((Object)(object)healthComponent)) { Object.Destroy((Object)(object)this); } else { victimBody = healthComponent.body; } } public void OnIncomingDamageServer(DamageInfo damageInfo) { MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo = default(MysticsRisky2UtilsPlugin.GenericCharacterInfo); if (Object.op_Implicit((Object)(object)damageInfo.attacker)) { attackerInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(damageInfo.attacker.GetComponent<CharacterBody>()); } MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(victimBody); if (GenericGameEvents.BeforeTakeDamage != null) { GenericGameEvents.BeforeTakeDamage(damageInfo, attackerInfo, victimInfo); } } public void OnTakeDamageServer(DamageReport damageReport) { if (Object.op_Implicit((Object)(object)victimBody) && GenericGameEvents.OnTakeDamage != null) { GenericGameEvents.OnTakeDamage(damageReport); } } } [Serializable] [CompilerGenerated] private sealed class <>c { public static readonly <>c <>9 = new <>c(); public static hook_Awake <>9__44_0; public static hook_OnHitEnemy <>9__44_1; public static hook_OnHitAll <>9__44_2; public static Func<Instruction, bool> <>9__44_10; public static Func<Instruction, bool> <>9__44_11; public static Func<Instruction, bool> <>9__44_12; public static Func<Instruction, bool> <>9__44_14; public static Func<Instruction, bool> <>9__44_16; public static Func<Instruction, bool> <>9__44_17; public static Func<HealthComponent, DamageInfo, float, float> <>9__44_7; public static Func<Instruction, bool> <>9__44_19; public static Func<HealthComponent, DamageInfo, float, float> <>9__44_8; public static Func<Instruction, bool> <>9__44_20; public static Func<Instruction, bool> <>9__44_21; public static Func<Instruction, bool> <>9__44_22; public static Func<Instruction, bool> <>9__44_23; public static Func<Instruction, bool> <>9__44_25; public static Func<Instruction, bool> <>9__44_26; public static Func<Instruction, bool> <>9__44_27; public static Func<HealthComponent, DamageInfo, float, float> <>9__44_9; public static Func<Instruction, bool> <>9__44_28; public static Func<Instruction, bool> <>9__44_29; public static Func<Instruction, bool> <>9__44_30; public static Func<Instruction, bool> <>9__44_31; public static Func<Instruction, bool> <>9__44_33; public static Func<Instruction, bool> <>9__44_35; public static Func<Instruction, bool> <>9__44_37; public static Func<Instruction, bool> <>9__44_38; public static Manipulator <>9__44_3; public static Func<Instruction, bool> <>9__44_44; public static Func<Instruction, bool> <>9__44_45; public static Func<Instruction, bool> <>9__44_46; public static Action<Xoroshiro128Plus> <>9__44_43; public static Manipulator <>9__44_4; public static Action<Interactor, IInteractable, GameObject> <>9__44_5; public static Func<Instruction, bool> <>9__44_49; public static Func<Instruction, bool> <>9__44_51; public static Func<string, DamageReport, string> <>9__44_48; public static Manipulator <>9__44_6; internal void <Init>b__44_0(orig_Awake orig, HealthComponent self) { ((Component)self).gameObject.AddComponent<MysticsRisky2UtilsDamageEvents>(); orig.Invoke(self); } internal void <Init>b__44_1(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim) { orig.Invoke(self, damageInfo, victim); if (Object.op_Implicit((Object)(object)damageInfo.attacker)) { CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); CharacterBody body = (Object.op_Implicit((Object)(object)victim) ? victim.GetComponent<CharacterBody>() : null); MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(component); MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body); if (GenericGameEvents.OnHitEnemy != null) { GenericGameEvents.OnHitEnemy(damageInfo, attackerInfo, victimInfo); } } } internal void <Init>b__44_2(orig_OnHitAll orig, GlobalEventManager self, DamageInfo damageInfo, GameObject hitObject) { orig.Invoke(self, damageInfo, hitObject); if (Object.op_Implicit((Object)(object)damageInfo.attacker)) { CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>(); MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(component); if (GenericGameEvents.OnHitAll != null) { GenericGameEvents.OnHitAll(damageInfo, attackerInfo); } } } internal void <Init>b__44_3(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0170: 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_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_0225: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_03ac: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: Unknown result type (might be due to invalid IL or missing references) //IL_03c4: Unknown result type (might be due to invalid IL or missing references) //IL_03fc: Unknown result type (might be due to invalid IL or missing references) //IL_05e7: Unknown result type (might be due to invalid IL or missing references) //IL_05f3: Unknown result type (might be due to invalid IL or missing references) //IL_05ff: Unknown result type (might be due to invalid IL or missing references) //IL_0611: Unknown result type (might be due to invalid IL or missing references) //IL_0623: Unknown result type (might be due to invalid IL or missing references) //IL_0635: Unknown result type (might be due to invalid IL or missing references) //IL_068b: Unknown result type (might be due to invalid IL or missing references) //IL_06b1: Unknown result type (might be due to invalid IL or missing references) //IL_06d7: Unknown result type (might be due to invalid IL or missing references) <>c__DisplayClass44_0 CS$<>8__locals0 = new <>c__DisplayClass44_0(); ILCursor val = new ILCursor(il); CS$<>8__locals0.bypassArmorFlagPosition = 5; CS$<>8__locals0.damagePosition = 7; CS$<>8__locals0.executionThresholdPosition = 59; CS$<>8__locals0.executionEffectPosition = 11; CS$<>8__locals0.forceExecutionPosition = 9; if (val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "damageType"), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 2) }) && val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCgtUn(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref CS$<>8__locals0.bypassArmorFlagPosition) }) && val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "damage"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref CS$<>8__locals0.damagePosition) })) { ILLabel val3 = default(ILLabel); if (val.TryGotoNext((MoveType)1, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "crit"), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref val3) })) { val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldarg_1); val.Emit(OpCodes.Ldloc, CS$<>8__locals0.damagePosition); val.EmitDelegate<Func<HealthComponent, DamageInfo, float, float>>((Func<HealthComponent, DamageInfo, float, float>)delegate(HealthComponent healthComponent, DamageInfo damageInfo, float damage) { CharacterBody body7 = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); CharacterBody body8 = healthComponent.body; MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo4 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body7); MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo4 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body8); if (GenericGameEvents.OnApplyDamageIncreaseModifiers != null) { GenericGameEvents.OnApplyDamageIncreaseModifiers(damageInfo, attackerInfo4, victimInfo4, ref damage); } return damage; }); val.Emit(OpCodes.Stloc, CS$<>8__locals0.damagePosition); } else { ErrorHookFailed("on apply damage increase modifiers"); } ILLabel val2 = default(ILLabel); if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, CS$<>8__locals0.bypassArmorFlagPosition), (Instruction x) => ILPatternMatchingExt.MatchBrtrue(x, ref val2) })) { val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldarg_1); val.Emit(OpCodes.Ldloc, CS$<>8__locals0.damagePosition); val.EmitDelegate<Func<HealthComponent, DamageInfo, float, float>>((Func<HealthComponent, DamageInfo, float, float>)delegate(HealthComponent healthComponent, DamageInfo damageInfo, float damage) { CharacterBody body5 = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); CharacterBody body6 = healthComponent.body; MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo3 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body5); MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo3 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body6); if (GenericGameEvents.OnApplyDamageReductionModifiers != null) { GenericGameEvents.OnApplyDamageReductionModifiers(damageInfo, attackerInfo3, victimInfo3, ref damage); } return damage; }); val.Emit(OpCodes.Stloc, CS$<>8__locals0.damagePosition); } else { ErrorHookFailed("on apply damage reduction modifiers"); } if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<HealthComponent>(x, "get_fullHealth"), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.1f), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, CS$<>8__locals0.damagePosition) }) && val.TryGotoPrev((MoveType)1, new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<HealthComponent>(x, "body"), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "LunarShell") })) { val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldarg_1); val.Emit(OpCodes.Ldloc, CS$<>8__locals0.damagePosition); val.EmitDelegate<Func<HealthComponent, DamageInfo, float, float>>((Func<HealthComponent, DamageInfo, float, float>)delegate(HealthComponent healthComponent, DamageInfo damageInfo, float damage) { CharacterBody body3 = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); CharacterBody body4 = healthComponent.body; MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo2 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body3); MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo2 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body4); if (GenericGameEvents.OnApplyDamageCapModifiers != null) { GenericGameEvents.OnApplyDamageCapModifiers(damageInfo, attackerInfo2, victimInfo2, ref damage); } return damage; }); val.Emit(OpCodes.Stloc, CS$<>8__locals0.damagePosition); } else { ErrorHookFailed("on apply damage cap modifiers"); } if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<CharacterBody>(x, "bodyFlags"), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 16) }) && val.TryGotoPrev((MoveType)2, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<CharacterBody>(x, "bodyFlags"), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 2048) }) && val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref CS$<>8__locals0.forceExecutionPosition) }) && val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, float.NegativeInfinity), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref CS$<>8__locals0.executionThresholdPosition) }) && val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld<FrozenState>(x, "executeEffectPrefab"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref CS$<>8__locals0.executionEffectPosition) }) && val.TryGotoPrev((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<HealthComponent>(x, "get_isInFrozenState") }) && val.TryGotoPrev((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0) })) { <>c__DisplayClass44_1 CS$<>8__locals1 = new <>c__DisplayClass44_1(); val.MoveAfterLabels(); val.Emit(OpCodes.Ldarg_0); val.Emit(OpCodes.Ldarg_1); val.Emit(OpCodes.Ldloc, CS$<>8__locals0.damagePosition); val.Emit(OpCodes.Ldloc, CS$<>8__locals0.executionThresholdPosition); val.Emit(OpCodes.Ldloc, CS$<>8__locals0.executionEffectPosition); val.Emit(OpCodes.Ldloc, CS$<>8__locals0.forceExecutionPosition); CS$<>8__locals1.newExecutionThreshold = 0f; CS$<>8__locals1.newExecutionEffectPrefab = null; CS$<>8__locals1.newForceExecution = false; val.EmitDelegate<Action<HealthComponent, DamageInfo, float, float, GameObject, bool>>((Action<HealthComponent, DamageInfo, float, float, GameObject, bool>)delegate(HealthComponent healthComponent, DamageInfo damageInfo, float damage, float executionThreshold, GameObject executionEffectPrefab, bool forceExecution) { CS$<>8__locals1.newExecutionThreshold = executionThreshold; CS$<>8__locals1.newExecutionEffectPrefab = executionEffectPrefab; CS$<>8__locals1.newForceExecution = forceExecution; CharacterBody body = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); CharacterBody body2 = healthComponent.body; MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body); MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body2); if (GenericGameEvents.OnApplyDamageExecutions != null) { GenericGameEvents.OnApplyDamageExecutions(damageInfo, attackerInfo, victimInfo, damage, ref executionThreshold, ref executionEffectPrefab, ref forceExecution); } }); val.EmitDelegate<Func<float>>((Func<float>)(() => CS$<>8__locals1.newExecutionThreshold)); val.Emit(OpCodes.Stloc, CS$<>8__locals0.executionThresholdPosition); val.EmitDelegate<Func<GameObject>>((Func<GameObject>)(() => CS$<>8__locals1.newExecutionEffectPrefab)); val.Emit(OpCodes.Stloc, CS$<>8__locals0.executionEffectPosition); val.EmitDelegate<Func<bool>>((Func<bool>)(() => CS$<>8__locals1.newForceExecution)); val.Emit(OpCodes.Stloc, CS$<>8__locals0.forceExecutionPosition); } else { ErrorHookFailed("on apply damage executions"); } } else { ErrorHookFailed("get HealthComponent local variable positions"); } } internal bool <Init>b__44_10(Instruction x) { return ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "damageType"); } internal bool <Init>b__44_11(Instruction x) { return ILPatternMatchingExt.MatchLdcI4(x, 2); } internal bool <Init>b__44_12(Instruction x) { return ILPatternMatchingExt.MatchCgtUn(x); } internal bool <Init>b__44_14(Instruction x) { return ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "damage"); } internal bool <Init>b__44_16(Instruction x) { return ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "crit"); } internal bool <Init>b__44_17(Instruction x) { ILLabel val = default(ILLabel); return ILPatternMatchingExt.MatchBrfalse(x, ref val); } internal float <Init>b__44_7(HealthComponent healthComponent, DamageInfo damageInfo, float damage) { CharacterBody body = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); CharacterBody body2 = healthComponent.body; MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body); MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body2); if (GenericGameEvents.OnApplyDamageIncreaseModifiers != null) { GenericGameEvents.OnApplyDamageIncreaseModifiers(damageInfo, attackerInfo, victimInfo, ref damage); } return damage; } internal bool <Init>b__44_19(Instruction x) { ILLabel val = default(ILLabel); return ILPatternMatchingExt.MatchBrtrue(x, ref val); } internal float <Init>b__44_8(HealthComponent healthComponent, DamageInfo damageInfo, float damage) { CharacterBody body = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); CharacterBody body2 = healthComponent.body; MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body); MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body2); if (GenericGameEvents.OnApplyDamageReductionModifiers != null) { GenericGameEvents.OnApplyDamageReductionModifiers(damageInfo, attackerInfo, victimInfo, ref damage); } return damage; } internal bool <Init>b__44_20(Instruction x) { return ILPatternMatchingExt.MatchLdarg(x, 0); } internal bool <Init>b__44_21(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<HealthComponent>(x, "get_fullHealth"); } internal bool <Init>b__44_22(Instruction x) { return ILPatternMatchingExt.MatchLdcR4(x, 0.1f); } internal bool <Init>b__44_23(Instruction x) { return ILPatternMatchingExt.MatchMul(x); } internal bool <Init>b__44_25(Instruction x) { return ILPatternMatchingExt.MatchLdarg(x, 0); } internal bool <Init>b__44_26(Instruction x) { return ILPatternMatchingExt.MatchLdfld<HealthComponent>(x, "body"); } internal bool <Init>b__44_27(Instruction x) { return ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "LunarShell"); } internal float <Init>b__44_9(HealthComponent healthComponent, DamageInfo damageInfo, float damage) { CharacterBody body = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); CharacterBody body2 = healthComponent.body; MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body); MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body2); if (GenericGameEvents.OnApplyDamageCapModifiers != null) { GenericGameEvents.OnApplyDamageCapModifiers(damageInfo, attackerInfo, victimInfo, ref damage); } return damage; } internal bool <Init>b__44_28(Instruction x) { return ILPatternMatchingExt.MatchLdfld<CharacterBody>(x, "bodyFlags"); } internal bool <Init>b__44_29(Instruction x) { return ILPatternMatchingExt.MatchLdcI4(x, 16); } internal bool <Init>b__44_30(Instruction x) { return ILPatternMatchingExt.MatchLdfld<CharacterBody>(x, "bodyFlags"); } internal bool <Init>b__44_31(Instruction x) { return ILPatternMatchingExt.MatchLdcI4(x, 2048); } internal bool <Init>b__44_33(Instruction x) { return ILPatternMatchingExt.MatchLdcR4(x, float.NegativeInfinity); } internal bool <Init>b__44_35(Instruction x) { return ILPatternMatchingExt.MatchLdsfld<FrozenState>(x, "executeEffectPrefab"); } internal bool <Init>b__44_37(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<HealthComponent>(x, "get_isInFrozenState"); } internal bool <Init>b__44_38(Instruction x) { return ILPatternMatchingExt.MatchLdarg(x, 0); } internal void <Init>b__44_4(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_00bc: Unknown result type (might be due to invalid IL or missing references) <>c__DisplayClass44_2 CS$<>8__locals0 = new <>c__DisplayClass44_2(); ILCursor val = new ILCursor(il); CS$<>8__locals0.rngPos = -1; if (val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<SceneInfo>(x, "get_instance"), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<SceneInfo>(x, "get_countsAsStage") }) && val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<SceneDirector>(x, "rng") }) && val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref CS$<>8__locals0.rngPos) })) { val.Emit(OpCodes.Ldloc, CS$<>8__locals0.rngPos); val.EmitDelegate<Action<Xoroshiro128Plus>>((Action<Xoroshiro128Plus>)delegate(Xoroshiro128Plus xoroshiro128Plus) { if (SceneInfo.instance.countsAsStage && GenericGameEvents.OnPopulateScene != null) { GenericGameEvents.OnPopulateScene(xoroshiro128Plus); } }); } else { ErrorHookFailed("on populate scene"); } } internal bool <Init>b__44_44(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<SceneInfo>(x, "get_instance"); } internal bool <Init>b__44_45(Instruction x) { return ILPatternMatchingExt.MatchCallOrCallvirt<SceneInfo>(x, "get_countsAsStage"); } internal bool <Init>b__44_46(Instruction x) { return ILPatternMatchingExt.MatchLdfld<SceneDirector>(x, "rng"); } internal void <Init>b__44_43(Xoroshiro128Plus xoroshiro128Plus) { if (SceneInfo.instance.countsAsStage && GenericGameEvents.OnPopulateScene != null) { GenericGameEvents.OnPopulateScene(xoroshiro128Plus); } } internal void <Init>b__44_5(Interactor interactor, IInteractable interactable, GameObject interactableObject) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown MonoBehaviour val = (MonoBehaviour)interactable; bool canProc = !Object.op_Implicit((Object)(object)((Component)val).GetComponent<GenericPickupController>()) && !Object.op_Implicit((Object)(object)((Component)val).GetComponent<VehicleSeat>()) && !Object.op_Implicit((Object)(object)((Component)val).GetComponent<NetworkUIPromptController>()); InteractionProcFilter component = interactableObject.GetComponent<InteractionProcFilter>(); if (Object.op_Implicit((Object)(object)component)) { canProc = component.shouldAllowOnInteractionBeginProc; } if (GenericGameEvents.OnInteractionBegin != null) { GenericGameEvents.OnInteractionBegin(interactor, interactable, interactableObject, canProc); } } internal void <Init>b__44_6(ILContext il) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) <>c__DisplayClass44_3 CS$<>8__locals0 = new <>c__DisplayClass44_3(); ILCursor val = new ILCursor(il); CS$<>8__locals0.deathQuotePos = -1; if (val.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "PLAYER_DEATH_QUOTE_VOIDDEATH"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref CS$<>8__locals0.deathQuotePos) }) && val.TryGotoNext(new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchLdsfld<GlobalEventManager>(x, "standardDeathQuoteTokens") }) && val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1] { (Instruction x) => ILPatternMatchingExt.MatchStloc(x, CS$<>8__locals0.deathQuotePos) })) { val.Emit(OpCodes.Ldarg_1); val.EmitDelegate<Func<string, DamageReport, string>>((Func<string, DamageReport, string>)delegate(string deathQuote, DamageReport damageReport) { if (GenericGameEvents.OnPlayerCharacterDeath != null) { GenericGameEvents.OnPlayerCharacterDeath(damageReport, ref deathQuote); } return deathQuote; }); } else { ErrorHookFailed("on player character death"); } } internal bool <Init>b__44_49(Instruction x) { return ILPatternMatchingExt.MatchLdstr(x, "PLAYER_DEATH_QUOTE_VOIDDEATH"); } internal bool <Init>b__44_51(Instruction x) { return ILPatternMatchingExt.MatchLdsfld<GlobalEventManager>(x, "standardDeathQuoteTokens"); } internal string <Init>b__44_48(string deathQuote, DamageReport damageReport) { if (GenericGameEvents.OnPlayerCharacterDeath != null) { GenericGameEvents.OnPlayerCharacterDeath(damageReport, ref deathQuote); } return deathQuote; } } [CompilerGenerated] private sealed class <>c__DisplayClass44_0 { public int bypassArmorFlagPosition; public int damagePosition; public int forceExecutionPosition; public int executionThresholdPosition; public int executionEffectPosition; internal bool <Init>b__13(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, ref bypassArmorFlagPosition); } internal bool <Init>b__15(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, ref damagePosition); } internal bool <Init>b__18(Instruction x) { return ILPatternMatchingExt.MatchLdloc(x, bypassArmorFlagPosition); } internal bool <Init>b__24(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, damagePosition); } internal bool <Init>b__32(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, ref forceExecutionPosition); } internal bool <Init>b__34(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, ref executionThresholdPosition); } internal bool <Init>b__36(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, ref executionEffectPosition); } } [CompilerGenerated] private sealed class <>c__DisplayClass44_1 { public float newExecutionThreshold; public GameObject newExecutionEffectPrefab; public bool newForceExecution; internal void <Init>b__39(HealthComponent healthComponent, DamageInfo damageInfo, float damage, float executionThreshold, GameObject executionEffectPrefab, bool forceExecution) { newExecutionThreshold = executionThreshold; newExecutionEffectPrefab = executionEffectPrefab; newForceExecution = forceExecution; CharacterBody body = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); CharacterBody body2 = healthComponent.body; MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body); MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body2); if (GenericGameEvents.OnApplyDamageExecutions != null) { GenericGameEvents.OnApplyDamageExecutions(damageInfo, attackerInfo, victimInfo, damage, ref executionThreshold, ref executionEffectPrefab, ref forceExecution); } } internal float <Init>b__40() { return newExecutionThreshold; } internal GameObject <Init>b__41() { return newExecutionEffectPrefab; } internal bool <Init>b__42() { return newForceExecution; } } [CompilerGenerated] private sealed class <>c__DisplayClass44_2 { public int rngPos; internal bool <Init>b__47(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, ref rngPos); } } [CompilerGenerated] private sealed class <>c__DisplayClass44_3 { public int deathQuotePos; internal bool <Init>b__50(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, ref deathQuotePos); } internal bool <Init>b__52(Instruction x) { return ILPatternMatchingExt.MatchStloc(x, deathQuotePos); } } public static event DamageAttackerVictimEventHandler OnHitEnemy; public static event DamageAttackerEventHandler OnHitAll; public static event DamageAttackerVictimEventHandler BeforeTakeDamage; public static event DamageModifierEventHandler OnApplyDamageIncreaseModifiers; public static event DamageModifierEventHandler OnApplyDamageReductionModifiers; public static event DamageModifierEventHandler OnApplyDamageCapModifiers; public static event DamageExecutionEventHandler OnApplyDamageExecutions; public static event DamageReportEventHandler OnTakeDamage; public static event SceneRNGEventHandler OnPopulateScene; public static event InteractionEventHandler OnInteractionBegin; public static event PlayerCharacterDeathEventHandler OnPlayerCharacterDeath; internal static void ErrorHookFailed(string name) { MysticsRisky2UtilsPlugin.logger.LogError((object)("generic game event '" + name + "' hook failed")); } internal static void Init() { //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 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Expected O, but got Unknown object obj = <>c.<>9__44_0; if (obj == null) { hook_Awake val = delegate(orig_Awake orig, HealthComponent self) { ((Component)self).gameObject.AddComponent<MysticsRisky2UtilsDamageEvents>(); orig.Invoke(self); }; <>c.<>9__44_0 = val; obj = (object)val; } HealthComponent.Awake += (hook_Awake)obj; object obj2 = <>c.<>9__44_1; if (obj2 == null) { hook_OnHitEnemy val2 = delegate(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim) { orig.Invoke(self, damageInfo, victim); if (Object.op_Implicit((Object)(object)damageInfo.attacker)) { CharacterBody component3 = damageInfo.attacker.GetComponent<CharacterBody>(); CharacterBody body9 = (Object.op_Implicit((Object)(object)victim) ? victim.GetComponent<CharacterBody>() : null); MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo6 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(component3); MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo5 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body9); if (GenericGameEvents.OnHitEnemy != null) { GenericGameEvents.OnHitEnemy(damageInfo, attackerInfo6, victimInfo5); } } }; <>c.<>9__44_1 = val2; obj2 = (object)val2; } GlobalEventManager.OnHitEnemy += (hook_OnHitEnemy)obj2; object obj3 = <>c.<>9__44_2; if (obj3 == null) { hook_OnHitAll val3 = delegate(orig_OnHitAll orig, GlobalEventManager self, DamageInfo damageInfo, GameObject hitObject) { orig.Invoke(self, damageInfo, hitObject); if (Object.op_Implicit((Object)(object)damageInfo.attacker)) { CharacterBody component2 = damageInfo.attacker.GetComponent<CharacterBody>(); MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo5 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(component2); if (GenericGameEvents.OnHitAll != null) { GenericGameEvents.OnHitAll(damageInfo, attackerInfo5); } } }; <>c.<>9__44_2 = val3; obj3 = (object)val3; } GlobalEventManager.OnHitAll += (hook_OnHitAll)obj3; object obj4 = <>c.<>9__44_3; if (obj4 == null) { Manipulator val4 = 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_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0170: 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_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_0225: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_03ac: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: Unknown result type (might be due to invalid IL or missing references) //IL_03c4: Unknown result type (might be due to invalid IL or missing references) //IL_03fc: Unknown result type (might be due to invalid IL or missing references) //IL_05e7: Unknown result type (might be due to invalid IL or missing references) //IL_05f3: Unknown result type (might be due to invalid IL or missing references) //IL_05ff: Unknown result type (might be due to invalid IL or missing references) //IL_0611: Unknown result type (might be due to invalid IL or missing references) //IL_0623: Unknown result type (might be due to invalid IL or missing references) //IL_0635: Unknown result type (might be due to invalid IL or missing references) //IL_068b: Unknown result type (might be due to invalid IL or missing references) //IL_06b1: Unknown result type (might be due to invalid IL or missing references) //IL_06d7: Unknown result type (might be due to invalid IL or missing references) ILCursor val10 = new ILCursor(il); int bypassArmorFlagPosition = 5; int damagePosition = 7; int executionThresholdPosition = 59; int executionEffectPosition = 11; int forceExecutionPosition = 9; if (val10.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "damageType"), (Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 2) }) && val10.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchCgtUn(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref bypassArmorFlagPosition) }) && val10.TryGotoNext(new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "damage"), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, ref damagePosition) })) { ILLabel val12 = default(ILLabel); if (val10.TryGotoNext((MoveType)1, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdfld<DamageInfo>(x, "crit"), (Instruction x) => ILPatternMatchingExt.MatchBrfalse(x, ref val12) })) { val10.Emit(OpCodes.Ldarg_0); val10.Emit(OpCodes.Ldarg_1); val10.Emit(OpCodes.Ldloc, damagePosition); val10.EmitDelegate<Func<HealthComponent, DamageInfo, float, float>>((Func<HealthComponent, DamageInfo, float, float>)delegate(HealthComponent healthComponent, DamageInfo damageInfo, float damage) { CharacterBody body7 = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); CharacterBody body8 = healthComponent.body; MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo4 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body7); MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo4 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body8); if (GenericGameEvents.OnApplyDamageIncreaseModifiers != null) { GenericGameEvents.OnApplyDamageIncreaseModifiers(damageInfo, attackerInfo4, victimInfo4, ref damage); } return damage; }); val10.Emit(OpCodes.Stloc, damagePosition); } else { ErrorHookFailed("on apply damage increase modifiers"); } ILLabel val11 = default(ILLabel); if (val10.TryGotoNext((MoveType)2, new Func<Instruction, bool>[2] { (Instruction x) => ILPatternMatchingExt.MatchLdloc(x, bypassArmorFlagPosition), (Instruction x) => ILPatternMatchingExt.MatchBrtrue(x, ref val11) })) { val10.Emit(OpCodes.Ldarg_0); val10.Emit(OpCodes.Ldarg_1); val10.Emit(OpCodes.Ldloc, damagePosition); val10.EmitDelegate<Func<HealthComponent, DamageInfo, float, float>>((Func<HealthComponent, DamageInfo, float, float>)delegate(HealthComponent healthComponent, DamageInfo damageInfo, float damage) { CharacterBody body5 = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); CharacterBody body6 = healthComponent.body; MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo3 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body5); MysticsRisky2UtilsPlugin.GenericCharacterInfo victimInfo3 = new MysticsRisky2UtilsPlugin.GenericCharacterInfo(body6); if (GenericGameEvents.OnApplyDamageReductionModifiers != null) { GenericGameEvents.OnApplyDamageReductionModifiers(damageInfo, attackerInfo3, victimInfo3, ref damage); } return damage; }); val10.Emit(OpCodes.Stloc, damagePosition); } else { ErrorHookFailed("on apply damage reduction modifiers"); } if (val10.TryGotoNext((MoveType)2, new Func<Instruction, bool>[5] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchCallOrCallvirt<HealthComponent>(x, "get_fullHealth"), (Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.1f), (Instruction x) => ILPatternMatchingExt.MatchMul(x), (Instruction x) => ILPatternMatchingExt.MatchStloc(x, damagePosition) }) && val10.TryGotoPrev((MoveType)1, new Func<Instruction, bool>[3] { (Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0), (Instruction x) => ILPatternMatchingExt.MatchLdfld<HealthComponent>(x, "body"), (Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "LunarShell") })) { val10.Emit(OpCodes.Ldarg_0); val10.Emit(OpCodes.Ldarg_1); val10.Emit(OpCodes.Ldloc, damagePosition); val10.EmitDelegate<Func<HealthComponent, DamageInfo, float, float>>((Func<HealthComponent, DamageInfo, float, float>)delegate(HealthComponent healthComponent, DamageInfo damageInfo, float damage) { CharacterBody body3 = (Object.op_Implicit((Object)(object)damageInfo.attacker) ? damageInfo.attacker.GetComponent<CharacterBody>() : null); CharacterBody body4 = healthComponent.body; MysticsRisky2UtilsPlugin.GenericCharacterInfo attackerInfo2 = new MysticsRisky2UtilsPlugin.Gene