using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Linq.Expressions; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using SomePerkMod; using UnityEngine; using UnityEngine.Audio; using UnityEngine.Events; [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("SomePerkMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("SomePerkMod")] [assembly: AssemblyTitle("SomePerkMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } public static class modpextension { public static Hand[] GetOpenHands(this ENT_Player plr) { List list = new List(); Hand[] hands = plr.hands; foreach (Hand val in hands) { if (val.IsFree() && InputManager.GetButton(val.fireButton).Pressed) { list.Add(val); } } return list.ToArray(); } public static Vector3 GetVelocity(this ENT_Player plr) { //IL_0002: 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_001e: Unknown result type (might be due to invalid IL or missing references) return (Vector3)new Traverse((object)plr).Field("vel").GetValue(); } } namespace SomePerkMod { [BepInPlugin("SomePerkMod", "SomePerkMod", "1.0.0")] public class Plugin : BaseUnityPlugin { public static ManualLogSource Logger; private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Harmony.CreateAndPatchAll(typeof(Patches), (string)null); } } public class Patches { private static AssetBundle bundle; [HarmonyPatch(typeof(CL_AssetManager), "InitializeAssetManager")] [HarmonyPostfix] [HarmonyWrapSafe] public static void AssetEntry(CL_AssetManager __instance) { if ((Object)(object)bundle == (Object)null) { string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "perkbundle1"); bundle = AssetBundle.LoadFromFile(text); } Perk[] array = bundle.LoadAllAssets(); WKAssetDatabase baseAssetDatabase = CL_AssetManager.GetBaseAssetDatabase(); Perk[] array2 = array; foreach (Perk item in array2) { if (!baseAssetDatabase.perkAssets.Contains(item)) { baseAssetDatabase.perkAssets.Add(item); } } CL_AssetManager.RefreshDatabaseList(); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "SomePerkMod"; public const string PLUGIN_NAME = "SomePerkMod"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace UnityBundleExport { public class PerkModule_Bouncy : PerkModule { public static Harmony harmony; public AudioClip launchClip; public static UnityEvent onFall = new UnityEvent(); public override void Initialize(Perk p) { //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Expected O, but got Unknown //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected O, but got Unknown //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Expected O, but got Unknown ((PerkModule)this).Initialize(p); ENT_Player player = ENT_Player.GetPlayer(); if (harmony == null) { harmony = new Harmony("module_bouncy"); harmony.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ENT_Player), "Damage", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(PerkModule_Bouncy), "DamagePrefix", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); harmony.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ENT_Player), "FallingDamage", (Type[])null, (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(PerkModule_Bouncy), "Transpiler", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null); } onFall.AddListener(new UnityAction(Fell)); } public override void OnDestroy(Perk p) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Expected O, but got Unknown ((PerkModule)this).OnDestroy(p); onFall.RemoveListener(new UnityAction(Fell)); } public static void DamagePrefix(ENT_Player __instance, ref DamageInfo info) { if (!(info.type != "falling")) { float num = Mathf.Clamp01(1f - ((GameEntity)__instance).curBuffs.GetBuff("fallDamageResist")); DamageInfo obj = info; obj.amount *= num; } } public void Fell() { //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) float buff = ((GameEntity)ENT_Player.playerObject).curBuffs.GetBuff("bounciness"); if (!(buff <= 0f)) { float currentFallDistance = ENT_Player.playerObject.GetCurrentFallDistance(); if (!ENT_Player.playerObject.IsHanging() && !(currentFallDistance < 5f)) { float num = buff * (currentFallDistance / 8f); Debug.Log((object)("applying: " + num)); AudioManager.PlaySound(launchClip, ((Component)ENT_Player.playerObject).transform.position, Mathf.Clamp01(0.5f + Mathf.Min(0f, num - 1f) * 0.1f), 1f, 1f, false, 1f, (AudioMixerGroup)null, ""); ((GameEntity)ENT_Player.playerObject).AddForce(new Vector3(0f, num), ""); } } } public static void FallingHandler() { onFall.Invoke(); } private static IEnumerable Transpiler(IEnumerable instructions) { int num = -1; Plugin.Logger.LogDebug((object)string.Join(Environment.NewLine, instructions)); List list = new List(instructions); bool flag = false; for (int i = 0; i < list.Count; i++) { if (flag && ((object)list[i]).ToString() == "stfld bool ENT_Player::falling") { Plugin.Logger.LogDebug((object)"found it"); num = i; break; } flag = ((list[i].opcode == OpCodes.Ldc_I4_0) ? true : false); } if (num > -1) { list.Insert(num, CodeInstruction.Call((Expression)(() => FallingHandler()))); } return list.AsEnumerable(); } } public class PerkModule_DisableScoreUpload : PerkModule { public static Harmony harmony; public override void Initialize(Perk p) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Expected O, but got Unknown //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Expected O, but got Unknown //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Expected O, but got Unknown ((PerkModule)this).Initialize(p); Buff item = new Buff { id = "buffDisableLeaderboard", amount = 2f, maxAmount = 2f }; BuffContainer val = new BuffContainer { multiplier = 1f, id = "cheateralert", loseOverTime = false, buffs = new List { item } }; ((GameEntity)p.player).curBuffs.AddBuff(val); if (harmony == null) { harmony = new Harmony("module_cheatperkmodule"); harmony.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(M_Gamemode), "Finish", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(PerkModule_DisableScoreUpload), "CheatFinishInject", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } public static void CheatFinishInject() { if (((GameEntity)ENT_Player.playerObject).curBuffs.GetBuff("buffDisableLeaderboard") > 0f) { WorldLoader.customSeed = true; } } } public class PerkModule_DrainOpenGrip : PerkModule { public float gripLostPerSecond = 5f; private float currentLossPS = -69420f; public float gripLossIncreasePerSecond = 0f; public bool onlyWhileFalling = false; public bool bothHandsMustBeOpen = false; public override void Initialize(Perk p) { ((PerkModule)this).Initialize(p); currentLossPS = gripLostPerSecond; } public override void Update() { if (onlyWhileFalling && (base.perk.player.IsGrounded(false) || base.perk.player.IsHanging())) { currentLossPS = Mathf.Clamp(currentLossPS - gripLossIncreasePerSecond * Time.deltaTime, gripLostPerSecond, float.PositiveInfinity); return; } Hand[] openHands = base.perk.player.GetOpenHands(); if (openHands.Length == 0 || (bothHandsMustBeOpen && openHands.Length != base.perk.player.hands.Length)) { currentLossPS = Mathf.Clamp(currentLossPS - gripLossIncreasePerSecond * Time.deltaTime, gripLostPerSecond, float.PositiveInfinity); return; } Hand[] array = openHands; foreach (Hand val in array) { val.AddGripStrength((0f - currentLossPS) * Time.deltaTime); currentLossPS += gripLossIncreasePerSecond * Time.deltaTime; if (val.GetGripStrength() < 0.1f) { val.grabWait += Time.deltaTime; } } } } public class PerkModule_ReversedReceptorsBehavior : PerkModule { public static Harmony harmony; public AnimationCurve buffCurve; public override void Initialize(Perk p) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown ((PerkModule)this).Initialize(p); ENT_Player player = ENT_Player.GetPlayer(); if (harmony == null) { harmony = new Harmony("module_reverserec"); harmony.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Hand), "GetStaminaDrainColor", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(PerkModule_ReversedReceptorsBehavior), "StamInject", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } } public override void Update() { base.perk.buff.SetMultiplier(Mathf.Clamp01(buffCurve.Evaluate(1f - base.perk.player.GetLowestGripStrength() / base.perk.player.GetCurrentGripStrengthTimer(-1)))); } public static void StamInject(ref Color __result) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) ENT_Player player = ENT_Player.GetPlayer(); if (!((Object)(object)player == (Object)null) && player.HasPerk("modex_reverserec")) { __result = Color.white; } } } public class PerkModule_WebbedFingersBehavior : PerkModule { public override void Initialize(Perk p) { ((PerkModule)this).Initialize(p); } public override void Update() { //IL_00ac: Unknown result type (might be due to invalid IL or missing references) int num = 0; Hand[] openHands = ENT_Player.GetPlayer().GetOpenHands(); foreach (Hand val in openHands) { if (!(val.GetGripStrength() < 0.1f)) { num++; } } base.perk.buff.SetMultiplier((num == base.perk.player.hands.Count()) ? 1f : 0f); base.perk.baseBuff.SetMultiplier((!base.perk.player.IsGrounded(false) && !base.perk.player.IsHanging() && Mathf.Abs(base.perk.player.GetVelocity().y) > 0.01f) ? 1f : 0f); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { internal IgnoresAccessChecksToAttribute(string assemblyName) { } } }