using 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);
}
}
}