The BepInEx console will not appear when launching like it does for other games on Thunderstore. This is normal (and helps prevent crashes during startup). You can turn it back on in your BepInEx.cfg file.
Decompiled source of Reconnect Catchup v1.0.0
ReconnectCatchup.dll
Decompiled 5 days agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using Microsoft.CodeAnalysis; using Photon.Pun; using Photon.Realtime; using UnityEngine; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("ReconnectCatchup")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("Reconnect Catchup")] [assembly: AssemblyTitle("ReconnectCatchup")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Ayzax.ReconnectCatchup { public struct ImprovedSpawnTarget { public Character LowestCharacter; public readonly float LowestClimbed { get { //IL_0019: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)LowestCharacter)) { return float.PositiveInfinity; } return LowestCharacter.Center.y; } } public void RegisterCharacter(Character character) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if (character.Center.y < LowestClimbed) { LowestCharacter = character; } } } public class ReconnectCatchupHandler : MonoBehaviourPunCallbacks { [CompilerGenerated] private sealed class <DoImprovedReconnect>d__3 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public Player newPlayer; public ReconnectCatchupHandler <>4__this; private Character <newCharacter>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DoImprovedReconnect>d__3(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <newCharacter>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; ReconnectCatchupHandler reconnectCatchupHandler = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; <newCharacter>5__2 = null; break; case 1: <>1__state = -1; break; } if ((Object)(object)<newCharacter>5__2 == (Object)null) { <newCharacter>5__2 = PlayerHandler.GetPlayerCharacter(newPlayer); <>2__current = null; <>1__state = 1; return true; } ImprovedSpawnTarget improvedSpawnTarget = PopulateSpawnData(<newCharacter>5__2); if ((Object)(object)improvedSpawnTarget.LowestCharacter == (Object)null) { reconnectCatchupHandler._logger.LogError((object)"No valid spawn target found!"); return false; } reconnectCatchupHandler._logger.LogInfo((object)$"Moving {<newCharacter>5__2.characterName} from [{<newCharacter>5__2.Center}] to lowest character: {improvedSpawnTarget.LowestCharacter.characterName} [{improvedSpawnTarget.LowestCharacter.Center}]"); ((MonoBehaviourPun)<newCharacter>5__2).photonView.RPC("WarpPlayerRPC", (RpcTarget)0, new object[2] { improvedSpawnTarget.LowestCharacter.Head + Vector3.up, false }); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private ManualLogSource _logger; public void InitLogger(ManualLogSource logger) { _logger = logger; } public override void OnPlayerEnteredRoom(Player newPlayer) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) Scene activeScene = SceneManager.GetActiveScene(); if (!(((Scene)(ref activeScene)).name == "Airport")) { ((MonoBehaviour)this).StartCoroutine(DoImprovedReconnect(newPlayer)); } } [IteratorStateMachine(typeof(<DoImprovedReconnect>d__3))] private IEnumerator DoImprovedReconnect(Player newPlayer) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DoImprovedReconnect>d__3(0) { <>4__this = this, newPlayer = newPlayer }; } private static ImprovedSpawnTarget PopulateSpawnData(Character newCharacter) { ImprovedSpawnTarget result = default(ImprovedSpawnTarget); foreach (Character allCharacter in Character.AllCharacters) { if (!allCharacter.data.dead && (Object)(object)allCharacter != (Object)(object)newCharacter) { result.RegisterCharacter(allCharacter); } } return result; } } [BepInProcess("PEAK.exe")] [BepInPlugin("Ayzax.ReconnectCatchup", "Reconnect Catchup", "1.0.0")] public class ReconnectCatchupPlugin : BaseUnityPlugin { internal static ManualLogSource Logger; private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Logger.LogInfo((object)"Reconnect Catchup is loaded!"); ((Component)this).gameObject.AddComponent<ReconnectCatchupHandler>().InitLogger(Logger); } } }