The BepInEx console will not appear when launching like it does for other games on Thunderstore (you can turn it back on in your BepInEx.cfg file). If your PEAK crashes on startup, add -dx12 to your launch parameters.
Decompiled source of PeakCringe FartWithReverb v0.1.1
plugins/com.github.baphometcrafts.PeakCringe.FartWithReverb.dll
Decompiled 6 days agousing System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("com.github.baphometcrafts.PeakCringe.FartWithReverb")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("0.1.1.0")] [assembly: AssemblyInformationalVersion("0.1.1")] [assembly: AssemblyProduct("com.github.baphometcrafts.PeakCringe.FartWithReverb")] [assembly: AssemblyTitle("PeakCringe FartWithReverb")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.1.1.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace BepInEx { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class BepInAutoPluginAttribute : Attribute { public BepInAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace BepInEx.Preloader.Core.Patching { [AttributeUsage(AttributeTargets.Class, Inherited = false, AllowMultiple = false)] [Conditional("CodeGeneration")] internal sealed class PatcherAutoPluginAttribute : Attribute { public PatcherAutoPluginAttribute(string? id = null, string? name = null, string? version = null) { } } } namespace PeakCringe_FartWithReverb { [BepInPlugin("com.github.baphometcrafts.PeakCringe.FartWithReverb", "PeakCringe FartWithReverb", "0.1.1")] public class Plugin : BaseUnityPlugin { internal static ManualLogSource Log; internal static AssetBundle assets; internal static AssetBundle itemAssets; internal static SFX_Instance fartWithReverbSFX = (SFX_Instance)ScriptableObject.CreateInstance("SFX_Instance"); public const string Id = "com.github.baphometcrafts.PeakCringe.FartWithReverb"; public static string Name => "PeakCringe FartWithReverb"; public static string Version => "0.1.1"; private void Awake() { Log = ((BaseUnityPlugin)this).Logger; Log.LogInfo((object)("Plugin " + Name + " is loaded!")); LoadAudioClips(); Harmony.CreateAndPatchAll(typeof(Patcher), (string)null); } private void LoadAudioClips() { string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); assets = AssetBundle.LoadFromFile(Path.Combine(directoryName, "fartwithreverb")); if ((Object)(object)assets == (Object)null) { Log.LogError((object)"Failed to load custom assets."); return; } assets.LoadAllAssets(); LoadClip(fartWithReverbSFX, "assets/audioclip/fart-with-reverb.mp3", 2000); } private void LoadClip(SFX_Instance reference, string path, int range) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown AudioClip val = assets.LoadAsset<AudioClip>(path); reference.settings = new SFX_Settings(); reference.settings.range = range; reference.settings.volume = 1f; reference.settings.pitch_Variation = 0.5f; reference.settings.spatialBlend = 0.7f; AudioClip[] clips = (AudioClip[])(object)new AudioClip[1] { val }; reference.clips = clips; } } public static class Patcher { [HarmonyPostfix] [HarmonyPatch(typeof(Character), "Awake")] public static void AwakePatch(Character __instance) { ((Component)__instance).gameObject.AddComponent<FartManager>(); Plugin.Log.LogInfo((object)("Added Component to character: " + __instance.characterName)); } } public class FartManager : MonoBehaviour { private Random random = new Random(); private Character localCharacter; private DateTime nextSlip; private int minSeconds = 300; private int maxSeconds = 600; internal static ManualLogSource Log { get; private set; } private void Awake() { Character component = ((Component)this).GetComponent<Character>(); if (component.IsLocal) { localCharacter = component; nextSlip = RandomFutureTime.GetFutureTime(random, minSeconds, maxSeconds); Plugin.Log.LogInfo((object)$"nextSlip {nextSlip}"); Plugin.Log.LogInfo((object)$"Creating SlipManager: {RuntimeHelpers.GetHashCode(this)}"); } } private void Update() { if ((Object)(object)localCharacter != (Object)null && DateTime.Compare(DateTime.Now, nextSlip) > 0) { PhotonView component = ((Component)this).GetComponent<PhotonView>(); if (!((Object)(object)component == (Object)null)) { nextSlip = RandomFutureTime.GetFutureTime(random, minSeconds, maxSeconds); component.RPC("RPCA_Slip", (RpcTarget)0, new object[1] { localCharacter.refs.view.ViewID }); Plugin.Log.LogInfo((object)$"nextSlip {nextSlip}"); } } } [PunRPC] public void RPCA_Slip(int viewID) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0080: 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) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) Character component = ((Component)PhotonView.Find(viewID)).GetComponent<Character>(); if (!((Object)component == (Object)null)) { Plugin.Log.LogInfo((object)(component.characterName + " slipped!")); Rigidbody bodypartRig = component.GetBodypartRig((BodypartType)16); Rigidbody bodypartRig2 = component.GetBodypartRig((BodypartType)13); Rigidbody bodypartRig3 = component.GetBodypartRig((BodypartType)0); Rigidbody bodypartRig4 = component.GetBodypartRig((BodypartType)4); component.RPCA_Fall(2f); bodypartRig.AddForce((component.data.lookDirection_Flat + Vector3.up) * 200f, (ForceMode)1); bodypartRig2.AddForce((component.data.lookDirection_Flat + Vector3.up) * 200f, (ForceMode)1); bodypartRig3.AddForce(Vector3.up * 1500f, (ForceMode)1); bodypartRig4.AddForce(component.data.lookDirection_Flat * -300f, (ForceMode)1); SFX_Player.instance.PlaySFX(Plugin.fartWithReverbSFX, component.Center, (Transform)null, (SFX_Settings)null, 3f, false); } } } public static class RandomFutureTime { public static DateTime GetFutureTime(Random randomInstance, int minSeconds, int maxSeconds) { DateTime dateTime = DateTime.Now.AddSeconds(minSeconds); DateTime dateTime2 = DateTime.Now.AddSeconds(maxSeconds); long ticks = (dateTime2 - dateTime).Ticks; long value = (long)(randomInstance.NextDouble() * (double)ticks); return dateTime.AddTicks(value); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }