using System; using System.Collections; using System.Diagnostics; using System.Drawing; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using ChatCommandAPI; using ChatCommandAPI.Utils; using GameNetcodeStuff; using HarmonyLib; using LethalAutoScan.Commands; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("com.olegknyazev.softmask")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [assembly: IgnoresAccessChecksTo("DunGen")] [assembly: IgnoresAccessChecksTo("DunGen.Integration.ASPP")] [assembly: IgnoresAccessChecksTo("DunGen.Integration.UnityNav")] [assembly: IgnoresAccessChecksTo("EasyTextEffects")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Components")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.XR.CoreUtils")] [assembly: IgnoresAccessChecksTo("Unity.XR.Management")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.ConformanceAutomation")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.MetaQuestSupport")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.MockRuntime")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.OculusQuestSupport")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.RuntimeDebugger")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.SpatialTracking")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: IgnoresAccessChecksTo("UnityEngine.XR.LegacyInputHelpers")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("baer1.AutoScan")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.1.0.0")] [assembly: AssemblyInformationalVersion("1.1.0+152a28d083f6602d01bf4b71b92d3d663b40946f")] [assembly: AssemblyProduct("LethalAutoScan")] [assembly: AssemblyTitle("baer1.AutoScan")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [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] [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] [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 LethalAutoScan { [BepInPlugin("baer1.AutoScan", "LethalAutoScan", "1.1.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class LethalAutoScan : BaseUnityPlugin { internal const string MOD_ID = "baer1.AutoScan-1.1.0"; internal bool IsValid; internal string CachedInteriorName; internal uint CachedScrapAmount; internal uint CachedBeehiveAmount; internal uint CachedEggAmount; public static LethalAutoScan Instance { get; private set; } internal static ManualLogSource Logger { get; private set; } internal static Harmony? Harmony { get; set; } private void Awake() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown Logger = ((BaseUnityPlugin)this).Logger; Instance = this; Logger.LogWarning((object)"You are using the host-only version of this mod. It will not activate in any games you join"); new SVScanCommand(); if (Harmony == null) { Harmony = new Harmony("baer1.AutoScan"); } Logger.LogDebug((object)"Patching..."); Harmony.PatchAll(); Logger.LogDebug((object)"Finished patching!"); Logger.LogInfo((object)"baer1.AutoScan v1.1.0 has loaded!"); } internal void CacheItemAmounts() { IsValid = true; try { string cachedInteriorName; switch (RoundManager.Instance.currentDungeonType) { case 0: case 2: case 3: cachedInteriorName = "Factory"; break; case 1: cachedInteriorName = "Mansion"; break; case 4: cachedInteriorName = "Mineshaft"; break; default: cachedInteriorName = null; break; } CachedInteriorName = cachedInteriorName; } catch (Exception ex) { Logger.LogError((object)ex); CachedInteriorName = null; } CachedScrapAmount = (CachedBeehiveAmount = (CachedEggAmount = 0u)); GrabbableObject[] array = Object.FindObjectsByType((FindObjectsSortMode)0); foreach (GrabbableObject val in array) { if (val.scrapPersistedThroughRounds) { continue; } bool? flag = val.itemProperties?.isScrap; if (!flag.HasValue || flag != true || val.isInShipRoom) { continue; } string name = ((Object)val).name; if (!(name == "RedLocustHive(Clone)")) { if (name == "KiwiBabyItem(Clone)") { CachedEggAmount++; } else { CachedScrapAmount++; } } else { CachedBeehiveAmount++; } } } public string GetMessage() { return string.Format("{0} {1} {2}{3}{4}", CachedInteriorName, (CachedScrapAmount != 0) ? ((object)CachedScrapAmount) : $"{CachedScrapAmount}", (CachedBeehiveAmount != 0) ? ((object)CachedBeehiveAmount) : $"{CachedBeehiveAmount}", (CachedEggAmount != 0) ? $"+{CachedEggAmount}" : null, "baer1.AutoScan-1.1.0"); } internal static IEnumerator AutoScan(RoundManager __instance) { yield return null; LethalAutoScan instance = Instance; instance.CacheItemAmounts(); Chat.PrintGlobal(instance.GetMessage(), (Color?)null); } } public static class MyPluginInfo { public const string PLUGIN_GUID = "baer1.AutoScan"; public const string PLUGIN_NAME = "LethalAutoScan"; public const string PLUGIN_VERSION = "1.1.0"; } } namespace LethalAutoScan.Patches { [HarmonyPatch(typeof(RoundManager), "SyncScrapValuesClientRpc")] internal static class RoundManager_SyncScrapValuesClientRpc { private static void Prefix(ref RoundManager __instance) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Invalid comparison between Unknown and I4 if (((NetworkBehaviour)__instance).IsServer && (int)((NetworkBehaviour)__instance).__rpc_exec_stage == 1) { ((MonoBehaviour)__instance).StartCoroutine(LethalAutoScan.AutoScan(__instance)); } } } [HarmonyPatch(typeof(StartOfRound), "EndOfGameClientRpc")] internal static class StartOfRound_EndOfGameClientRpc { private static void Postfix() { LethalAutoScan.Instance.IsValid = false; } } } namespace LethalAutoScan.Commands { public class SVScanCommand : ServerCommand { internal const string NAME = "Scan"; internal const string DESCRIPTION = "Repeats the last auto-scan message (may print outdated information)"; public override string Name => "Scan"; public override string Description => "Repeats the last auto-scan message (may print outdated information)"; public override void Invoke(PlayerControllerB caller, string args) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) if (!LethalAutoScan.Instance.IsValid) { throw new ShipIsNotLandedException(); } Chat.PrintWarning(caller, LethalAutoScan.Instance.GetMessage()); } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } }