using System; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using Microsoft.CodeAnalysis; using UnityEngine; [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("BunkbedRevive_V80Fix")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("BunkbedRevive_V80Fix")] [assembly: AssemblyTitle("BunkbedRevive_V80Fix")] [assembly: AssemblyVersion("1.0.0.0")] [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; } } } namespace BunkbedRevive_V80Fix { [BepInPlugin("com.v80fix.BunkbedRevive", "BunkbedRevive_V80Fix", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public sealed class Plugin : BaseUnityPlugin { private Type bunkbedControllerType; private FieldInfo interactTriggerField; private object reviveTrigger; private FieldInfo oneHandedItemAllowedField; private FieldInfo twoHandedItemAllowedField; private FieldInfo interactableField; private float nextCheckTime; private bool loggedSuccess; private void Awake() { ((BaseUnityPlugin)this).Logger.LogInfo((object)"BunkbedRevive_V80Fix 1.0.0 loaded."); } private void Update() { if (Time.unscaledTime < nextCheckTime) { return; } nextCheckTime = Time.unscaledTime + 0.25f; if (ResolveSomexTrigger()) { oneHandedItemAllowedField.SetValue(reviveTrigger, true); twoHandedItemAllowedField.SetValue(reviveTrigger, true); if (interactableField != null) { interactableField.SetValue(reviveTrigger, true); } if (!loggedSuccess) { ((BaseUnityPlugin)this).Logger.LogInfo((object)"Somex ReviveBed trigger found. oneHandedItemAllowed=true, twoHandedItemAllowed=true."); loggedSuccess = true; } } } private bool ResolveSomexTrigger() { if (reviveTrigger != null && oneHandedItemAllowedField != null && twoHandedItemAllowedField != null) { return true; } if (bunkbedControllerType == null) { Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); for (int i = 0; i < assemblies.Length; i++) { Type type = assemblies[i].GetType("BunkbedRevive.BunkbedController", throwOnError: false); if (type != null) { bunkbedControllerType = type; break; } } if (bunkbedControllerType == null) { return false; } } if (interactTriggerField == null) { interactTriggerField = bunkbedControllerType.GetField("interactTrigger", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); if (interactTriggerField == null) { ((BaseUnityPlugin)this).Logger.LogError((object)"BunkbedController found but interactTrigger field was not found."); return false; } } reviveTrigger = interactTriggerField.GetValue(null); if (reviveTrigger == null) { return false; } Type type2 = reviveTrigger.GetType(); BindingFlags bindingAttr = BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic; oneHandedItemAllowedField = type2.GetField("oneHandedItemAllowed", bindingAttr); twoHandedItemAllowedField = type2.GetField("twoHandedItemAllowed", bindingAttr); interactableField = type2.GetField("interactable", bindingAttr); if (oneHandedItemAllowedField == null || twoHandedItemAllowedField == null) { ((BaseUnityPlugin)this).Logger.LogError((object)"ReviveBed trigger found but V80 interaction fields were not found."); reviveTrigger = null; return false; } return true; } } }