using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LethalSleep.NetcodePatcher;
using LethalSleep.Resources;
using TMPro;
using Unity.Netcode;
using UnityEngine;
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: AssemblyTitle("LethalSleep")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LethalSleep")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("DF90D888-BF76-42FA-A222-388AA13A161B")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: NetcodePatchedAssembly]
internal class <Module>
{
static <Module>()
{
}
}
namespace LethalSleep
{
public static class BedWorker
{
public const int INTERACT_LAYER = 9;
public static readonly Vector3[] SleepingPositions = (Vector3[])(object)new Vector3[4]
{
new Vector3(-2.069098f, -0.7690924f, -0.5f),
new Vector3(-2.069098f, -0.7690924f, 0.5f),
new Vector3(-2.069098f, -0.7690924f, 1.5f),
new Vector3(-2.069098f, -0.7690924f, 2.5f)
};
public static readonly Vector3[] WakeUpPositions = (Vector3[])(object)new Vector3[4]
{
new Vector3(-0.4752663f, 1.189903f, -0.09496737f),
new Vector3(0.488894f, 1.189903f, -0.09496737f),
new Vector3(0.488894f, -1.074116f, -0.09496817f),
new Vector3(-0.4752663f, -1.074116f, -0.09496817f)
};
private static InteractTrigger _sleepTrigger;
private static PlaceableShipObject _bed;
public static readonly Dictionary<int, int> SleepingPlayers = new Dictionary<int, int>();
public static readonly List<Transform> SleepingSlots = new List<Transform>();
public static readonly Dictionary<int, Vector3> WakePlayerPos = new Dictionary<int, Vector3>();
private static int _currentSlot;
public static void ConfigureBed(GameObject bed)
{
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Expected O, but got Unknown
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: Unknown result type (might be due to invalid IL or missing references)
PluginLogger.Debug("Configuring bed");
GameObject gameObject = ((Component)bed.transform.GetChild(0)).gameObject;
gameObject.tag = "InteractTrigger";
gameObject.layer = 9;
((Renderer)gameObject.GetComponent<MeshRenderer>()).enabled = false;
_bed = bed.GetComponentInChildren<PlaceableShipObject>();
int num = 0;
Vector3[] sleepingPositions = SleepingPositions;
foreach (Vector3 localPosition in sleepingPositions)
{
GameObject val = new GameObject("SleepingSlot " + num);
val.transform.SetParent(bed.transform);
val.transform.localPosition = localPosition;
val.transform.localRotation = Quaternion.Euler(0f, 180f, 90f);
SleepingSlots.Add(val.transform);
num++;
}
InteractTrigger trigger = gameObject.AddComponent<InteractTrigger>();
SetupTrigger(trigger);
}
private static void SetupTrigger(InteractTrigger trigger)
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Expected O, but got Unknown
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Expected O, but got Unknown
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Expected O, but got Unknown
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Expected O, but got Unknown
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Expected O, but got Unknown
if ((Object)(object)trigger == (Object)null)
{
PluginLogger.Error("InteractTrigger is null");
return;
}
trigger.holdingInteractEvent = new InteractEventFloat();
trigger.onInteract = new InteractEvent();
trigger.onInteractEarly = new InteractEvent();
trigger.onInteractEarlyOtherClients = new InteractEvent();
trigger.onStopInteract = new InteractEvent();
trigger.onCancelAnimation = new InteractEvent();
trigger.hoverTip = "Sleep";
trigger.hoverIcon = Assets.SleepIcon;
trigger.disabledHoverTip = "Not enough space to sleep";
trigger.interactable = true;
trigger.oneHandedItemAllowed = true;
trigger.twoHandedItemAllowed = false;
trigger.holdInteraction = true;
trigger.timeToHold = 0.5f;
trigger.timeToHoldSpeedMultiplier = 1f;
trigger.hidePlayerItem = true;
((UnityEvent<PlayerControllerB>)(object)trigger.onInteract).AddListener((UnityAction<PlayerControllerB>)OnPlayerInteract);
_sleepTrigger = trigger;
}
public static void Update()
{
_bed.inUse = SleepingPlayers.Count > 0;
_sleepTrigger.interactable = EnoughSpaceToSleep();
if (SleepingPlayers.Count >= SleepingPositions.Length)
{
return;
}
for (int i = 0; i < SleepingSlots.Count; i++)
{
if (!SleepingPlayers.ContainsValue(i))
{
_sleepTrigger.playerPositionNode = SleepingSlots[i];
_currentSlot = i;
break;
}
}
}
public static Vector3 GetWakeUpPosition(int playerId)
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: 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_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: 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_0075: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
if (!WakePlayerPos.ContainsKey(playerId))
{
return StartOfRound.Instance.playerSpawnPositions[0].position;
}
Vector3 val = WakePlayerPos[playerId] + new Vector3(0f, 0f, 2f);
Bounds bounds = StartOfRound.Instance.shipInnerRoomBounds.bounds;
return (!((Bounds)(ref bounds)).Contains(val)) ? StartOfRound.Instance.playerSpawnPositions[0].position : val;
}
public static bool EnoughSpaceToSleep()
{
return SleepingPlayers.Count < SleepingPositions.Length;
}
private static void OnPlayerInteract(PlayerControllerB player)
{
if (!EnoughSpaceToSleep())
{
Update();
}
else
{
Networker.Instance.PlayerSleepServerRpc((int)player.playerClientId);
}
}
public static void Sleep(PlayerControllerB player)
{
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
if (!Plugin.DisabledByError)
{
SleepingPlayers.Add((int)player.playerClientId, _currentSlot);
if (!WakePlayerPos.ContainsKey((int)player.playerClientId))
{
WakePlayerPos.Add((int)player.playerClientId, ((Component)player).transform.position);
}
player.inSpecialInteractAnimation = true;
player.disableSyncInAnimation = true;
Update();
}
}
public static void WakeUp(PlayerControllerB player)
{
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
if (SleepingPlayers.ContainsKey((int)player.playerClientId))
{
SleepingPlayers.Remove((int)player.playerClientId);
}
player.inSpecialInteractAnimation = false;
player.disableSyncInAnimation = false;
((Component)player).transform.SetParent(player.playersManager.elevatorTransform);
((Component)player).transform.localPosition = Vector3.zero;
Vector3 wakeUpPosition = GetWakeUpPosition((int)player.playerClientId);
WakePlayerPos.Remove((int)player.playerClientId);
((Component)player).transform.position = wakeUpPosition;
Update();
}
}
[HarmonyPatch]
public class Networker : NetworkBehaviour
{
public static Networker Instance;
[ServerRpc(RequireOwnership = false)]
public void PlayerSleepServerRpc(int playerId)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: 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_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
{
ServerRpcParams val = default(ServerRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1658776184u, val, (RpcDelivery)0);
BytePacker.WriteValueBitPacked(val2, playerId);
((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1658776184u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
{
PlayerSleepClientRpc(playerId);
}
}
}
[ClientRpc]
public void PlayerSleepClientRpc(int playerId)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: 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_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3940410982u, val, (RpcDelivery)0);
BytePacker.WriteValueBitPacked(val2, playerId);
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3940410982u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
{
PlayerControllerB val3 = StartOfRound.Instance.allPlayerScripts[playerId];
if (!val3.isPlayerDead && val3.isPlayerControlled)
{
BedWorker.Sleep(val3);
}
}
}
[ServerRpc(RequireOwnership = false)]
public void PlayerWakeUpServerRpc(int playerId)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: 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_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
{
ServerRpcParams val = default(ServerRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1962355180u, val, (RpcDelivery)0);
BytePacker.WriteValueBitPacked(val2, playerId);
((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1962355180u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
{
PlayerWakeUpClientRpc(playerId);
}
}
}
[ClientRpc]
public void PlayerWakeUpClientRpc(int playerId)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: 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_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2037218156u, val, (RpcDelivery)0);
BytePacker.WriteValueBitPacked(val2, playerId);
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2037218156u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
{
PlayerControllerB val3 = StartOfRound.Instance.allPlayerScripts[playerId];
if (!val3.isPlayerDead && val3.isPlayerControlled)
{
BedWorker.WakeUp(val3);
}
}
}
public override void OnNetworkSpawn()
{
if ((Object)(object)NetworkManager.Singleton != (Object)null && (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer))
{
Networker instance = Instance;
if (instance != null)
{
((Component)instance).gameObject.GetComponent<NetworkObject>().Despawn(true);
}
}
Instance = this;
((NetworkBehaviour)this).OnNetworkSpawn();
}
[HarmonyPatch(typeof(StartOfRound), "Awake")]
[HarmonyPostfix]
private static void SpawnNetHandler()
{
//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)
if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer)
{
GameObject val = Object.Instantiate<GameObject>(Assets.NetworkPrefab, Vector3.zero, Quaternion.identity);
val.GetComponent<NetworkObject>().Spawn(false);
}
}
[HarmonyPatch(typeof(GameNetworkManager), "Start")]
[HarmonyPostfix]
private static void Init()
{
Assets.NetworkPrefab.AddComponent<Networker>();
NetworkManager.Singleton.AddNetworkPrefab(Assets.NetworkPrefab);
}
protected override void __initializeVariables()
{
((NetworkBehaviour)this).__initializeVariables();
}
[RuntimeInitializeOnLoadMethod]
internal static void InitializeRPCS_Networker()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Expected O, but got Unknown
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Expected O, but got Unknown
NetworkManager.__rpc_func_table.Add(1658776184u, new RpcReceiveHandler(__rpc_handler_1658776184));
NetworkManager.__rpc_func_table.Add(3940410982u, new RpcReceiveHandler(__rpc_handler_3940410982));
NetworkManager.__rpc_func_table.Add(1962355180u, new RpcReceiveHandler(__rpc_handler_1962355180));
NetworkManager.__rpc_func_table.Add(2037218156u, new RpcReceiveHandler(__rpc_handler_2037218156));
}
private static void __rpc_handler_1658776184(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
int playerId = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref playerId);
target.__rpc_exec_stage = (__RpcExecStage)1;
((Networker)(object)target).PlayerSleepServerRpc(playerId);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_3940410982(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
int playerId = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref playerId);
target.__rpc_exec_stage = (__RpcExecStage)2;
((Networker)(object)target).PlayerSleepClientRpc(playerId);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_1962355180(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
int playerId = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref playerId);
target.__rpc_exec_stage = (__RpcExecStage)1;
((Networker)(object)target).PlayerWakeUpServerRpc(playerId);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_2037218156(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
int playerId = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref playerId);
target.__rpc_exec_stage = (__RpcExecStage)2;
((Networker)(object)target).PlayerWakeUpClientRpc(playerId);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
protected internal override string __getTypeName()
{
return "Networker";
}
}
[BepInPlugin("LethalSleep", "Lethal Sleep", "0.1.0")]
public class Plugin : BaseUnityPlugin
{
internal static bool DisabledByError;
public ManualLogSource logger;
private Harmony _harmony;
internal static Plugin Instance { get; private set; }
private void Awake()
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Expected O, but got Unknown
if (!((Object)(object)Instance != (Object)null))
{
Instance = this;
logger = Logger.CreateLogSource("LethalSleep");
_harmony = new Harmony("LethalSleep");
Assets.Load();
_harmony.PatchAll();
NetcodePatcher();
if (!DisabledByError)
{
logger.LogInfo((object)"LethalSleep loaded successfully");
}
}
}
private static void NetcodePatcher()
{
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
Type[] array = types;
foreach (Type type in array)
{
MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
MethodInfo[] array2 = methods;
foreach (MethodInfo methodInfo in array2)
{
object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
if (customAttributes.Length != 0)
{
methodInfo.Invoke(null, null);
}
}
}
}
}
public static class PluginConstants
{
public const string GUID = "LethalSleep";
public const string NAME = "Lethal Sleep";
public const string VERSION = "0.1.0";
}
internal static class PluginLogger
{
internal static void Info(object o)
{
Plugin.Instance.logger.LogInfo(o);
}
internal static void Warn(object o)
{
Plugin.Instance.logger.LogWarning(o);
}
internal static void Error(object o)
{
Plugin.Instance.logger.LogError(o);
}
internal static void Debug(object o)
{
Plugin.Instance.logger.LogDebug(o);
}
}
}
namespace LethalSleep.Resources
{
internal static class Assets
{
public static AssetBundle Bundle;
public static Sprite SleepIcon;
public static GameObject NetworkPrefab;
public static void Load()
{
Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("LethalSleep.Resources.sleepbundle");
if (manifestResourceStream == null)
{
PluginLogger.Error("Cannot load the asset bundle");
Plugin.DisabledByError = true;
return;
}
Bundle = AssetBundle.LoadFromStream(manifestResourceStream);
if ((Object)(object)Bundle == (Object)null)
{
PluginLogger.Error("Cannot load the asset bundle");
Plugin.DisabledByError = true;
}
else
{
SleepIcon = Bundle.LoadAsset<Sprite>("Assets/LCSleep/noun-sleep-2216308.png");
NetworkPrefab = Bundle.LoadAsset<GameObject>("Assets/LCSleep/NetPrefab.prefab");
}
}
}
}
namespace LethalSleep.Patches
{
[HarmonyPatch(typeof(PlayerControllerB))]
public class PlayerControllerBPatch
{
[HarmonyPatch("Interact_performed")]
[HarmonyPostfix]
internal static void InteractPerformedPatch(PlayerControllerB __instance)
{
if (((NetworkBehaviour)__instance).IsOwner && __instance.isPlayerControlled && BedWorker.SleepingPlayers.ContainsKey((int)__instance.playerClientId))
{
Networker.Instance.PlayerWakeUpServerRpc((int)__instance.playerClientId);
}
}
[HarmonyPatch("SetHoverTipAndCurrentInteractTrigger")]
[HarmonyPrefix]
internal static bool SetTipPatch(PlayerControllerB __instance)
{
if (!BedWorker.SleepingPlayers.ContainsKey((int)__instance.playerClientId))
{
return true;
}
((Behaviour)__instance.cursorIcon).enabled = false;
((TMP_Text)__instance.cursorTip).text = "Wake up : [E]";
return false;
}
[HarmonyPatch("Update")]
[HarmonyPostfix]
internal static void UpdatePatch(PlayerControllerB __instance, ref float ___targetYRot)
{
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
if (!BedWorker.SleepingPlayers.ContainsKey((int)__instance.playerClientId))
{
return;
}
if (!__instance.isPlayerControlled)
{
BedWorker.SleepingPlayers.Remove((int)__instance.playerClientId);
return;
}
Transform val = BedWorker.SleepingSlots[BedWorker.SleepingPlayers[(int)__instance.playerClientId]];
((Component)__instance).transform.SetParent(val);
((Component)__instance).transform.localPosition = Vector3.Lerp(((Component)__instance).transform.localPosition, Vector3.zero, Time.deltaTime * 10f);
if (!((NetworkBehaviour)__instance).IsOwner)
{
((Component)__instance).transform.localEulerAngles = new Vector3(((Component)val).transform.localEulerAngles.x, Mathf.LerpAngle(((Component)__instance).transform.localEulerAngles.y, ___targetYRot, Time.deltaTime * 10f), ((Component)val).transform.localEulerAngles.z - 90f);
}
}
}
[HarmonyPatch(typeof(StartOfRound))]
public class StartOfRoundPatch
{
private static GameObject TryGetBed()
{
AutoParentToShip[] array = (from obj in Object.FindObjectsOfType<AutoParentToShip>()
where ((Object)obj).name == "Bunkbeds"
select obj).ToArray();
if (array.Length == 1)
{
return ((Component)array[0]).gameObject;
}
PluginLogger.Error("Can't find bed object or found multiples : plugin will not enable");
Plugin.DisabledByError = true;
return null;
}
[HarmonyPatch("Start")]
[HarmonyPostfix]
internal static void StartPostfix()
{
if (!Plugin.DisabledByError)
{
GameObject val = TryGetBed();
if (!((Object)(object)val == (Object)null))
{
BedWorker.ConfigureBed(val);
}
}
}
[HarmonyPatch("OnPlayerDC")]
[HarmonyPostfix]
internal static void OnPlayerDCPatch(int playerObjectNumber, ulong clientId)
{
if (BedWorker.SleepingPlayers.ContainsKey(playerObjectNumber))
{
BedWorker.SleepingPlayers.Remove(playerObjectNumber);
}
}
}
}
namespace LethalSleep.NetcodePatcher
{
[AttributeUsage(AttributeTargets.Module)]
internal class NetcodePatchedAssemblyAttribute : Attribute
{
}
}