using System;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using IL.RoR2;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using RoR2;
using UnityEngine;
[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 = "")]
[assembly: AssemblyCompany("LevelStats")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("LevelStats")]
[assembly: AssemblyTitle("LevelStats")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace TPDespair.LevelStats;
[BepInPlugin("com.TPDespair.LevelStats", "LevelStats", "1.1.0")]
public class LevelStatsPlugin : BaseUnityPlugin
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static Func<Instruction, bool> <>9__32_1;
public static Func<Instruction, bool> <>9__32_2;
public static Func<Instruction, bool> <>9__32_3;
public static Func<Instruction, bool> <>9__32_4;
public static Func<Instruction, bool> <>9__32_5;
public static Func<Instruction, bool> <>9__32_6;
public static Func<CharacterBody, float, float> <>9__32_7;
public static Manipulator <>9__32_0;
public static Func<Instruction, bool> <>9__33_1;
public static Func<Instruction, bool> <>9__33_2;
public static Func<Instruction, bool> <>9__33_3;
public static Func<Instruction, bool> <>9__33_4;
public static Func<CharacterBody, float, float> <>9__33_5;
public static Manipulator <>9__33_0;
public static Func<Instruction, bool> <>9__34_1;
public static Func<Instruction, bool> <>9__34_2;
public static Func<Instruction, bool> <>9__34_3;
public static Func<Instruction, bool> <>9__34_4;
public static Func<CharacterBody, float, float> <>9__34_5;
public static Manipulator <>9__34_0;
public static Func<Instruction, bool> <>9__35_1;
public static Func<Instruction, bool> <>9__35_2;
public static Func<Instruction, bool> <>9__35_3;
public static Func<Instruction, bool> <>9__35_4;
public static Func<CharacterBody, float, float> <>9__35_5;
public static Manipulator <>9__35_0;
public static Func<Instruction, bool> <>9__36_1;
public static Func<Instruction, bool> <>9__36_2;
public static Func<CharacterBody, float, float, float> <>9__36_3;
public static Manipulator <>9__36_0;
public static hook_RecalculateStats <>9__37_0;
internal void <MovementSpeedHook>b__32_0(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: Unknown result type (might be due to invalid IL or missing references)
//IL_0144: Unknown result type (might be due to invalid IL or missing references)
//IL_0152: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[6]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 84),
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 85),
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 86),
(Instruction x) => ILPatternMatchingExt.MatchDiv(x),
(Instruction x) => ILPatternMatchingExt.MatchMul(x),
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 84)
}))
{
val.Index += 1;
val.Emit(OpCodes.Pop);
val.Emit(OpCodes.Ldarg, 0);
val.Emit(OpCodes.Ldloc, 85);
val.EmitDelegate<Func<CharacterBody, float, float>>((Func<CharacterBody, float, float>)delegate(CharacterBody self, float value)
{
if (IsPlayer(self))
{
value += PlayerMovSpdLevel.Value * (self.level - 1f);
}
return value;
});
val.Emit(OpCodes.Stloc, 85);
val.Emit(OpCodes.Ldloc, 84);
}
else
{
logSource.LogWarning((object)"MovementSpeedHook Failed");
}
}
internal bool <MovementSpeedHook>b__32_1(Instruction x)
{
return ILPatternMatchingExt.MatchLdloc(x, 84);
}
internal bool <MovementSpeedHook>b__32_2(Instruction x)
{
return ILPatternMatchingExt.MatchLdloc(x, 85);
}
internal bool <MovementSpeedHook>b__32_3(Instruction x)
{
return ILPatternMatchingExt.MatchLdloc(x, 86);
}
internal bool <MovementSpeedHook>b__32_4(Instruction x)
{
return ILPatternMatchingExt.MatchDiv(x);
}
internal bool <MovementSpeedHook>b__32_5(Instruction x)
{
return ILPatternMatchingExt.MatchMul(x);
}
internal bool <MovementSpeedHook>b__32_6(Instruction x)
{
return ILPatternMatchingExt.MatchStloc(x, 84);
}
internal float <MovementSpeedHook>b__32_7(CharacterBody self, float value)
{
if (IsPlayer(self))
{
value += PlayerMovSpdLevel.Value * (self.level - 1f);
}
return value;
}
internal void <AttackSpeedHook>b__33_0(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[4]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 94),
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 95),
(Instruction x) => ILPatternMatchingExt.MatchMul(x),
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 94)
}))
{
val.Emit(OpCodes.Ldarg, 0);
val.Emit(OpCodes.Ldloc, 95);
val.EmitDelegate<Func<CharacterBody, float, float>>((Func<CharacterBody, float, float>)delegate(CharacterBody self, float value)
{
if (IsPlayer(self))
{
value += PlayerAtkSpdLevel.Value * (self.level - 1f);
}
return value;
});
val.Emit(OpCodes.Stloc, 95);
}
else
{
logSource.LogWarning((object)"AttackSpeedHook Failed");
}
}
internal bool <AttackSpeedHook>b__33_1(Instruction x)
{
return ILPatternMatchingExt.MatchLdloc(x, 94);
}
internal bool <AttackSpeedHook>b__33_2(Instruction x)
{
return ILPatternMatchingExt.MatchLdloc(x, 95);
}
internal bool <AttackSpeedHook>b__33_3(Instruction x)
{
return ILPatternMatchingExt.MatchMul(x);
}
internal bool <AttackSpeedHook>b__33_4(Instruction x)
{
return ILPatternMatchingExt.MatchStloc(x, 94);
}
internal float <AttackSpeedHook>b__33_5(CharacterBody self, float value)
{
if (IsPlayer(self))
{
value += PlayerAtkSpdLevel.Value * (self.level - 1f);
}
return value;
}
internal void <DamageHook>b__34_0(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[4]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 88),
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 89),
(Instruction x) => ILPatternMatchingExt.MatchMul(x),
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 88)
}))
{
val.Emit(OpCodes.Ldarg, 0);
val.Emit(OpCodes.Ldloc, 88);
val.EmitDelegate<Func<CharacterBody, float, float>>((Func<CharacterBody, float, float>)delegate(CharacterBody self, float value)
{
if (IsPlayer(self))
{
value += PlayerDamageLevel.Value * (self.level - 1f);
}
return value;
});
val.Emit(OpCodes.Stloc, 88);
}
else
{
logSource.LogWarning((object)"DamageHook Failed");
}
}
internal bool <DamageHook>b__34_1(Instruction x)
{
return ILPatternMatchingExt.MatchLdloc(x, 88);
}
internal bool <DamageHook>b__34_2(Instruction x)
{
return ILPatternMatchingExt.MatchLdloc(x, 89);
}
internal bool <DamageHook>b__34_3(Instruction x)
{
return ILPatternMatchingExt.MatchMul(x);
}
internal bool <DamageHook>b__34_4(Instruction x)
{
return ILPatternMatchingExt.MatchStloc(x, 88);
}
internal float <DamageHook>b__34_5(CharacterBody self, float value)
{
if (IsPlayer(self))
{
value += PlayerDamageLevel.Value * (self.level - 1f);
}
return value;
}
internal void <HealthHook>b__35_0(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[4]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 70),
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 71),
(Instruction x) => ILPatternMatchingExt.MatchMul(x),
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 70)
}))
{
val.Emit(OpCodes.Ldarg, 0);
val.Emit(OpCodes.Ldloc, 70);
val.EmitDelegate<Func<CharacterBody, float, float>>((Func<CharacterBody, float, float>)delegate(CharacterBody self, float value)
{
if (IsPlayer(self))
{
value += PlayerHealthLevel.Value * (self.level - 1f);
}
return value;
});
val.Emit(OpCodes.Stloc, 70);
}
else
{
logSource.LogWarning((object)"HealthHook Failed");
}
}
internal bool <HealthHook>b__35_1(Instruction x)
{
return ILPatternMatchingExt.MatchLdloc(x, 70);
}
internal bool <HealthHook>b__35_2(Instruction x)
{
return ILPatternMatchingExt.MatchLdloc(x, 71);
}
internal bool <HealthHook>b__35_3(Instruction x)
{
return ILPatternMatchingExt.MatchMul(x);
}
internal bool <HealthHook>b__35_4(Instruction x)
{
return ILPatternMatchingExt.MatchStloc(x, 70);
}
internal float <HealthHook>b__35_5(CharacterBody self, float value)
{
if (IsPlayer(self))
{
value += PlayerHealthLevel.Value * (self.level - 1f);
}
return value;
}
internal void <RegenHook>b__36_0(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: 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_00af: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[2]
{
(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1f),
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 82)
}))
{
val.Emit(OpCodes.Ldarg, 0);
val.Emit(OpCodes.Ldloc, 76);
val.Emit(OpCodes.Ldloc, 75);
val.EmitDelegate<Func<CharacterBody, float, float, float>>((Func<CharacterBody, float, float, float>)delegate(CharacterBody self, float value, float scaling)
{
float num = 0f;
if (IsPlayer(self))
{
num += PlayerRegenLevel.Value * (self.level - 1f);
}
if (num != 0f)
{
value += num * scaling;
}
return value;
});
val.Emit(OpCodes.Stloc, 76);
}
else
{
logSource.LogWarning((object)"RegenHook Failed");
}
}
internal bool <RegenHook>b__36_1(Instruction x)
{
return ILPatternMatchingExt.MatchLdcR4(x, 1f);
}
internal bool <RegenHook>b__36_2(Instruction x)
{
return ILPatternMatchingExt.MatchStloc(x, 82);
}
internal float <RegenHook>b__36_3(CharacterBody self, float value, float scaling)
{
float num = 0f;
if (IsPlayer(self))
{
num += PlayerRegenLevel.Value * (self.level - 1f);
}
if (num != 0f)
{
value += num * scaling;
}
return value;
}
internal void <ArmorHook>b__37_0(orig_RecalculateStats orig, CharacterBody self)
{
orig.Invoke(self);
if (Object.op_Implicit((Object)(object)self) && IsPlayer(self))
{
self.armor += PlayerArmorLevel.Value * (self.level - 1f);
}
}
}
public const string ModVer = "1.1.0";
public const string ModName = "LevelStats";
public const string ModGuid = "com.TPDespair.LevelStats";
public static ManualLogSource logSource;
public static ConfigEntry<float> PlayerMovSpdLevel { get; set; }
public static ConfigEntry<float> PlayerAtkSpdLevel { get; set; }
public static ConfigEntry<float> PlayerDamageLevel { get; set; }
public static ConfigEntry<float> PlayerHealthLevel { get; set; }
public static ConfigEntry<float> PlayerRegenLevel { get; set; }
public static ConfigEntry<float> PlayerArmorLevel { get; set; }
public void Awake()
{
RoR2Application.isModded = true;
NetworkModCompatibilityHelper.networkModList = NetworkModCompatibilityHelper.networkModList.Append("com.TPDespair.LevelStats:1.1.0");
logSource = ((BaseUnityPlugin)this).Logger;
SetupConfig(((BaseUnityPlugin)this).Config);
StatHooks();
}
private static void SetupConfig(ConfigFile Config)
{
PlayerMovSpdLevel = Config.Bind<float>("PlayerStats", "PlayerMovSpdLevel", 0.015f, "Movement Speed increase granted per Level.");
PlayerAtkSpdLevel = Config.Bind<float>("PlayerStats", "PlayerAtkSpdLevel", 0.01f, "Attack Speed increase granted per Level.");
PlayerDamageLevel = Config.Bind<float>("PlayerStats", "PlayerDamageLevel", 0f, "Added Damage per Level. This is not a percent increase! Most survivors have around 12 (+2.4 per level) damage.");
PlayerHealthLevel = Config.Bind<float>("PlayerStats", "PlayerHealthLevel", 0f, "Added Health per Level. This is not a percent increase! Most survivors have around 110 (+33 per level) health.");
PlayerRegenLevel = Config.Bind<float>("PlayerStats", "PlayerRegenLevel", 0.1f, "Added Health Regeneration per Level. This is not a percent increase! Most survivors have around 1 hp/s (+0.2 hp/s per level) regeneration.");
PlayerArmorLevel = Config.Bind<float>("PlayerStats", "PlayerArmorLevel", 0f, "Added Armor per Level. This is not a percent increase! Most survivors have 0 or 20 armor.");
}
private static void StatHooks()
{
MovementSpeedHook();
AttackSpeedHook();
DamageHook();
HealthHook();
RegenHook();
ArmorHook();
}
private static bool IsPlayer(CharacterBody body)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Invalid comparison between Unknown and I4
return (int)body.teamComponent.teamIndex == 1;
}
private static void MovementSpeedHook()
{
//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__32_0;
if (obj == null)
{
Manipulator val = delegate(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: Unknown result type (might be due to invalid IL or missing references)
//IL_0144: Unknown result type (might be due to invalid IL or missing references)
//IL_0152: Unknown result type (might be due to invalid IL or missing references)
ILCursor val2 = new ILCursor(il);
if (val2.TryGotoNext(new Func<Instruction, bool>[6]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 84),
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 85),
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 86),
(Instruction x) => ILPatternMatchingExt.MatchDiv(x),
(Instruction x) => ILPatternMatchingExt.MatchMul(x),
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 84)
}))
{
val2.Index += 1;
val2.Emit(OpCodes.Pop);
val2.Emit(OpCodes.Ldarg, 0);
val2.Emit(OpCodes.Ldloc, 85);
val2.EmitDelegate<Func<CharacterBody, float, float>>((Func<CharacterBody, float, float>)delegate(CharacterBody self, float value)
{
if (IsPlayer(self))
{
value += PlayerMovSpdLevel.Value * (self.level - 1f);
}
return value;
});
val2.Emit(OpCodes.Stloc, 85);
val2.Emit(OpCodes.Ldloc, 84);
}
else
{
logSource.LogWarning((object)"MovementSpeedHook Failed");
}
};
<>c.<>9__32_0 = val;
obj = (object)val;
}
CharacterBody.RecalculateStats += (Manipulator)obj;
}
private static void AttackSpeedHook()
{
//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__33_0;
if (obj == null)
{
Manipulator val = delegate(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
ILCursor val2 = new ILCursor(il);
if (val2.TryGotoNext(new Func<Instruction, bool>[4]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 94),
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 95),
(Instruction x) => ILPatternMatchingExt.MatchMul(x),
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 94)
}))
{
val2.Emit(OpCodes.Ldarg, 0);
val2.Emit(OpCodes.Ldloc, 95);
val2.EmitDelegate<Func<CharacterBody, float, float>>((Func<CharacterBody, float, float>)delegate(CharacterBody self, float value)
{
if (IsPlayer(self))
{
value += PlayerAtkSpdLevel.Value * (self.level - 1f);
}
return value;
});
val2.Emit(OpCodes.Stloc, 95);
}
else
{
logSource.LogWarning((object)"AttackSpeedHook Failed");
}
};
<>c.<>9__33_0 = val;
obj = (object)val;
}
CharacterBody.RecalculateStats += (Manipulator)obj;
}
private static void DamageHook()
{
//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__34_0;
if (obj == null)
{
Manipulator val = delegate(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
ILCursor val2 = new ILCursor(il);
if (val2.TryGotoNext(new Func<Instruction, bool>[4]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 88),
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 89),
(Instruction x) => ILPatternMatchingExt.MatchMul(x),
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 88)
}))
{
val2.Emit(OpCodes.Ldarg, 0);
val2.Emit(OpCodes.Ldloc, 88);
val2.EmitDelegate<Func<CharacterBody, float, float>>((Func<CharacterBody, float, float>)delegate(CharacterBody self, float value)
{
if (IsPlayer(self))
{
value += PlayerDamageLevel.Value * (self.level - 1f);
}
return value;
});
val2.Emit(OpCodes.Stloc, 88);
}
else
{
logSource.LogWarning((object)"DamageHook Failed");
}
};
<>c.<>9__34_0 = val;
obj = (object)val;
}
CharacterBody.RecalculateStats += (Manipulator)obj;
}
private static void HealthHook()
{
//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__35_0;
if (obj == null)
{
Manipulator val = delegate(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
ILCursor val2 = new ILCursor(il);
if (val2.TryGotoNext(new Func<Instruction, bool>[4]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 70),
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 71),
(Instruction x) => ILPatternMatchingExt.MatchMul(x),
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 70)
}))
{
val2.Emit(OpCodes.Ldarg, 0);
val2.Emit(OpCodes.Ldloc, 70);
val2.EmitDelegate<Func<CharacterBody, float, float>>((Func<CharacterBody, float, float>)delegate(CharacterBody self, float value)
{
if (IsPlayer(self))
{
value += PlayerHealthLevel.Value * (self.level - 1f);
}
return value;
});
val2.Emit(OpCodes.Stloc, 70);
}
else
{
logSource.LogWarning((object)"HealthHook Failed");
}
};
<>c.<>9__35_0 = val;
obj = (object)val;
}
CharacterBody.RecalculateStats += (Manipulator)obj;
}
private static void RegenHook()
{
//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__36_0;
if (obj == null)
{
Manipulator val = delegate(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: 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_00af: Unknown result type (might be due to invalid IL or missing references)
ILCursor val2 = new ILCursor(il);
if (val2.TryGotoNext(new Func<Instruction, bool>[2]
{
(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 1f),
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 82)
}))
{
val2.Emit(OpCodes.Ldarg, 0);
val2.Emit(OpCodes.Ldloc, 76);
val2.Emit(OpCodes.Ldloc, 75);
val2.EmitDelegate<Func<CharacterBody, float, float, float>>((Func<CharacterBody, float, float, float>)delegate(CharacterBody self, float value, float scaling)
{
float num = 0f;
if (IsPlayer(self))
{
num += PlayerRegenLevel.Value * (self.level - 1f);
}
if (num != 0f)
{
value += num * scaling;
}
return value;
});
val2.Emit(OpCodes.Stloc, 76);
}
else
{
logSource.LogWarning((object)"RegenHook Failed");
}
};
<>c.<>9__36_0 = val;
obj = (object)val;
}
CharacterBody.RecalculateStats += (Manipulator)obj;
}
private static void ArmorHook()
{
//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__37_0;
if (obj == null)
{
hook_RecalculateStats val = delegate(orig_RecalculateStats orig, CharacterBody self)
{
orig.Invoke(self);
if (Object.op_Implicit((Object)(object)self) && IsPlayer(self))
{
self.armor += PlayerArmorLevel.Value * (self.level - 1f);
}
};
<>c.<>9__37_0 = val;
obj = (object)val;
}
CharacterBody.RecalculateStats += (hook_RecalculateStats)obj;
}
}