Decompiled source of Something v0.3.3
plugins/Snowlance.Something.dll
Decompiled 2 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using Dawn; using Dawn.Utils; using Dusk; using GameNetcodeStuff; using HarmonyLib; using LethalCompanyInputUtils.Api; using Microsoft.CodeAnalysis; using Snowlance.Something.NetcodePatcher; using Something.Enemies; using Something.Enemies.Something; using Unity.Netcode; using UnityEngine; using UnityEngine.AI; using UnityEngine.Animations.Rigging; using UnityEngine.Events; using UnityEngine.InputSystem; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [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("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("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: AssemblyCompany("Snowlance.Something")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("0.3.2.0")] [assembly: AssemblyInformationalVersion("0.3.2+c7f3c9984192fce212cf59a8a51758a7d5b8a917")] [assembly: AssemblyProduct("Something")] [assembly: AssemblyTitle("Snowlance.Something")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.3.2.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.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] [Microsoft.CodeAnalysis.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] [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 Something { [HarmonyPatch] public class Patches { [HarmonyPrefix] [HarmonyPatch(typeof(PlayerControllerB), "NearOtherPlayers")] public static bool NearOtherPlayersPrefix(PlayerControllerB __instance, ref bool __result) { try { if (Plugin.IsPlayerHaunted(__instance)) { __result = false; return false; } return true; } catch { return true; } } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "OnShipLandedMiscEvents")] public static void OnShipLandedMiscEventsPostfix() { Plugin.onShipLanded.Invoke(); } } [BepInPlugin("Snowlance.Something", "Something", "0.3.2")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public static Plugin Instance; public static ConfigEntry<bool> configMinimalSpoilerVersion; private readonly Harmony harmony = new Harmony("Snowlance.Something"); public static UnityEvent onShipLanded = new UnityEvent(); public const float turnCompassSpeedGlobal = 50f; public static ManualLogSource logger { get; private set; } public static DuskMod Mod { get; private set; } public static PlayerControllerB localPlayer => GameNetworkManager.Instance.localPlayerController; public static bool IsServerOrHost => NetworkManager.Singleton.IsServer || NetworkManager.Singleton.IsHost; public static PlayerControllerB PlayerFromId(ulong id) { return StartOfRound.Instance.allPlayerScripts.Where((PlayerControllerB x) => x.actualClientId == id).First(); } private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } logger = ((BaseUnityPlugin)Instance).Logger; harmony.PatchAll(); AssetBundle val = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "something_mainassets")); Mod = DuskMod.RegisterMod((BaseUnityPlugin)(object)this, val); Mod.RegisterContentHandlers(); InitializeNetworkBehaviours(); SomethingInputs.Init(); InitConfigs(); ((BaseUnityPlugin)this).Logger.LogInfo((object)"Snowlance.Something v0.3.2 has loaded!"); } private void InitConfigs() { configMinimalSpoilerVersion = ((BaseUnityPlugin)this).Config.Bind<bool>("Spoilers", "Minimal Spoiler Version", true, "Replaces most spoilers for the game with alternatives."); } public static bool IsPlayerHaunted(PlayerControllerB player) { if (StartOfRound.Instance.inShipPhase) { return false; } foreach (EnemyAI spawnedEnemy in RoundManager.Instance.SpawnedEnemies) { if (spawnedEnemy is SomethingAI && (Object)(object)spawnedEnemy.targetPlayer == (Object)(object)player) { return true; } } return false; } private static void InitializeNetworkBehaviours() { 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); } } } logger.LogDebug((object)"Finished initializing network behaviours"); } } public class SomethingContentHandler : ContentHandler<SomethingContentHandler> { public class AubreyPlushAssets : AssetBundleLoader<AubreyPlushAssets> { public AubreyPlushAssets(DuskMod mod, string filePath) : base(mod, filePath) { } } public class BasilPlushAssets : AssetBundleLoader<BasilPlushAssets> { public BasilPlushAssets(DuskMod mod, string filePath) : base(mod, filePath) { } } public class BunnybunAssets : AssetBundleLoader<BunnybunAssets> { public BunnybunAssets(DuskMod mod, string filePath) : base(mod, filePath) { } } public class KeytarAssets : AssetBundleLoader<KeytarAssets> { public KeytarAssets(DuskMod mod, string filePath) : base(mod, filePath) { } } public class MailboxAssets : AssetBundleLoader<MailboxAssets> { public MailboxAssets(DuskMod mod, string filePath) : base(mod, filePath) { } } public class PolaroidAssets : AssetBundleLoader<PolaroidAssets> { public PolaroidAssets(DuskMod mod, string filePath) : base(mod, filePath) { } } public class RabbitAssets : AssetBundleLoader<RabbitAssets> { public RabbitAssets(DuskMod mod, string filePath) : base(mod, filePath) { } } public class SomethingAssets : AssetBundleLoader<SomethingAssets> { [LoadFromBundle("Something.prefab")] public GameObject SomethingPrefab { get; private set; } = null; public SomethingAssets(DuskMod mod, string filePath) : base(mod, filePath) { } } public AubreyPlushAssets? AubreyPlush; public BasilPlushAssets? BasilPlush; public BunnybunAssets? Bunnybun; public KeytarAssets? Keytar; public MailboxAssets? Mailbox; public PolaroidAssets? Polaroid; public RabbitAssets? Rabbit; public SomethingAssets? Something; public SomethingContentHandler(DuskMod mod) : base(mod) { ((ContentHandler)this).RegisterContent<AubreyPlushAssets>("aubreyplush", ref AubreyPlush, false); ((ContentHandler)this).RegisterContent<BasilPlushAssets>("basilplush", ref BasilPlush, false); ((ContentHandler)this).RegisterContent<BunnybunAssets>("bunnybun", ref Bunnybun, false); ((ContentHandler)this).RegisterContent<KeytarAssets>("keytar", ref Keytar, false); ((ContentHandler)this).RegisterContent<MailboxAssets>("mailbox", ref Mailbox, false); ((ContentHandler)this).RegisterContent<PolaroidAssets>("polaroid", ref Polaroid, false); ((ContentHandler)this).RegisterContent<RabbitAssets>("rabbit", ref Rabbit, false); ((ContentHandler)this).RegisterContent<SomethingAssets>("something", ref Something, false); } } internal class SomethingInputs : LcInputActions { public static SomethingInputs Instance; [InputAction(/*Could not decode attribute arguments.*/)] public InputAction BreathKey { get; set; } public static void Init() { Instance = new SomethingInputs(); } } public static class SomethingKeys { public const string Namespace = "something"; internal static NamespacedKey LastVersion = NamespacedKey.From("something", "last_version"); public static readonly NamespacedKey<DawnEnemyInfo> Something = NamespacedKey<DawnEnemyInfo>.From("something", "something"); public static readonly NamespacedKey<DawnEnemyInfo> Rabbit = NamespacedKey<DawnEnemyInfo>.From("something", "rabbit"); public static readonly NamespacedKey<DawnItemInfo> AubreyPlush = NamespacedKey<DawnItemInfo>.From("something", "aubrey_plush"); public static readonly NamespacedKey<DawnItemInfo> BasilPlush = NamespacedKey<DawnItemInfo>.From("something", "basil_plush"); public static readonly NamespacedKey<DawnItemInfo> Bunnybun = NamespacedKey<DawnItemInfo>.From("something", "bunnybun"); public static readonly NamespacedKey<DawnItemInfo> Keytar = NamespacedKey<DawnItemInfo>.From("something", "keytar"); public static readonly NamespacedKey<DawnItemInfo> Mailbox = NamespacedKey<DawnItemInfo>.From("something", "mailbox"); public static readonly NamespacedKey<DawnItemInfo> Polaroid = NamespacedKey<DawnItemInfo>.From("something", "polaroid"); } [HarmonyPatch] public class TESTING : MonoBehaviour { private static ManualLogSource logger = Plugin.logger; [HarmonyPostfix] [HarmonyPatch(typeof(HUDManager), "PingScan_performed")] public static void PingScan_performedPostFix() { if (Utils.testing) { } } [HarmonyPrefix] [HarmonyPatch(typeof(HUDManager), "SubmitChat_performed")] public static void SubmitChat_performedPrefix(HUDManager __instance) { if (!Utils.isBeta) { return; } string text = __instance.chatTextField.text; string[] array = text.Split(" "); logger.LogDebug((object)text); string text2 = array[0]; string text3 = text2; if (!(text3 == "/index")) { if (text3 == "/targetting") { Utils.DEBUG_disableTargetting = !Utils.DEBUG_disableTargetting; HUDManager.Instance.DisplayTip("DisableTargetting: ", Utils.DEBUG_disableTargetting.ToString(), false, false, "LC_Tip1"); } else { Utils.ChatCommand(array); } } else { SpringCatAI.SpringCatKillIndex = int.Parse(array[1]); HUDManager.Instance.DisplayTip("SpringCatKillIndex", SpringCatAI.SpringCatKillIndex.ToString(), false, false, "LC_Tip1"); } } } internal class TestingHUDOverlay : MonoBehaviour { public static TestingHUDOverlay? Instance; public GameObject toggle1Obj; public Text toggle1Label; public Toggle toggle1; public GameObject toggle2Obj; public Text toggle2Label; public Toggle toggle2; public Text label1; public Text label2; public Text label3; public void Start() { if ((Object)(object)Instance != (Object)null && (Object)(object)Instance != (Object)(object)this) { Object.Destroy((Object)(object)((Component)this).gameObject); } else { Instance = this; } } public void Update() { toggle1Obj.SetActive(toggle1Label.text != ""); toggle2Obj.SetActive(toggle2Label.text != ""); } } public static class Utils { public static bool isBeta; public static bool _testing; public static bool trailerMode; public static bool DEBUG_disableSpawning; public static bool DEBUG_disableTargetting; public static bool DEBUG_disableHostTargetting; public static bool DEBUG_disableMoving; public static bool localPlayerFrozen; public static bool testing => _testing && isBeta; public static bool inTestRoom => (Object)(object)StartOfRound.Instance?.testRoom != (Object)null; public static GameObject[] allAINodes => insideAINodes.Concat(outsideAINodes).ToArray(); public static GameObject[] insideAINodes { get { if (RoundManager.Instance.insideAINodes != null && RoundManager.Instance.insideAINodes.Length != 0) { return RoundManager.Instance.insideAINodes; } return GameObject.FindGameObjectsWithTag("AINode"); } } public static GameObject[] outsideAINodes { get { if (RoundManager.Instance.outsideAINodes != null && RoundManager.Instance.outsideAINodes.Length != 0) { return RoundManager.Instance.outsideAINodes; } return GameObject.FindGameObjectsWithTag("OutsideAINode"); } } public static void ChatCommand(string[] args) { switch (args[0]) { case "/spawning": DEBUG_disableSpawning = !DEBUG_disableSpawning; HUDManager.Instance.DisplayTip("Disable Spawning", DEBUG_disableSpawning.ToString(), false, false, "LC_Tip1"); break; case "/hazards": { Dictionary<string, GameObject> allHazards = GetAllHazards(); { foreach (KeyValuePair<string, GameObject> item in allHazards) { Plugin.logger.LogDebug((object)item); } break; } } case "/testing": _testing = !_testing; HUDManager.Instance.DisplayTip("Testing", _testing.ToString(), false, false, "LC_Tip1"); break; case "/surfaces": { FootstepSurface[] footstepSurfaces = StartOfRound.Instance.footstepSurfaces; foreach (FootstepSurface val3 in footstepSurfaces) { Plugin.logger.LogDebug((object)val3.surfaceTag); } break; } case "/enemies": { foreach (SpawnableEnemyWithRarity enemy in GetEnemies()) { Plugin.logger.LogDebug((object)((Object)enemy.enemyType).name); } break; } case "/refresh": RoundManager.Instance.RefreshEnemiesList(); HoarderBugAI.RefreshGrabbableObjectsInMapList(); break; case "/levels": { SelectableLevel[] levels = StartOfRound.Instance.levels; foreach (SelectableLevel val2 in levels) { Plugin.logger.LogDebug((object)((Object)val2).name); } break; } case "/dungeon": Plugin.logger.LogDebug((object)((Object)RoundManager.Instance.dungeonGenerator.Generator.DungeonFlow).name); break; case "/dungeons": { IndoorMapType[] dungeonFlowTypes = RoundManager.Instance.dungeonFlowTypes; foreach (IndoorMapType val in dungeonFlowTypes) { Plugin.logger.LogDebug((object)((Object)val.dungeonFlow).name); } break; } } } public static void LogChat(string msg) { HUDManager.Instance.AddChatMessage(msg, "Server", -1, false); } public static Transform? GetClosestAINodeToPosition(Vector3 pos) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) Transform result = null; float num = float.PositiveInfinity; GameObject[] array = allAINodes; foreach (GameObject val in array) { if (!((Object)(object)val == (Object)null)) { float num2 = Vector3.Distance(pos, val.transform.position); if (!(num2 > num)) { num = num2; result = val.transform; } } } return result; } public static Vector3 GetBestThrowDirection(Vector3 origin, Vector3 forward, int rayCount, float maxDistance, LayerMask layerMask) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: 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_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: 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) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) Vector3 result = forward; float num = 0f; RaycastHit val2 = default(RaycastHit); for (int i = 0; i < rayCount; i++) { float num2 = (float)i * (360f / (float)rayCount); Vector3 val = Quaternion.Euler(0f, num2, 0f) * ((Vector3)(ref forward)).normalized; if (Physics.Raycast(origin + Vector3.up * 0.5f, val, ref val2, maxDistance, LayerMask.op_Implicit(layerMask))) { if (((RaycastHit)(ref val2)).distance > num) { result = val; num = ((RaycastHit)(ref val2)).distance; } continue; } return val; } return result; } public static Vector3 GetSpeed() { //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_03de: Unknown result type (might be due to invalid IL or missing references) //IL_03e4: Unknown result type (might be due to invalid IL or missing references) //IL_03f3: Unknown result type (might be due to invalid IL or missing references) //IL_040c: Unknown result type (might be due to invalid IL or missing references) //IL_0411: Unknown result type (might be due to invalid IL or missing references) //IL_0416: Unknown result type (might be due to invalid IL or missing references) //IL_0417: Unknown result type (might be due to invalid IL or missing references) //IL_041c: Unknown result type (might be due to invalid IL or missing references) //IL_041e: Unknown result type (might be due to invalid IL or missing references) //IL_0425: Unknown result type (might be due to invalid IL or missing references) //IL_042a: Unknown result type (might be due to invalid IL or missing references) //IL_042f: Unknown result type (might be due to invalid IL or missing references) //IL_0431: Unknown result type (might be due to invalid IL or missing references) //IL_0433: Unknown result type (might be due to invalid IL or missing references) //IL_0437: Unknown result type (might be due to invalid IL or missing references) //IL_036c: Unknown result type (might be due to invalid IL or missing references) //IL_0377: Unknown result type (might be due to invalid IL or missing references) //IL_038e: Unknown result type (might be due to invalid IL or missing references) //IL_0393: Unknown result type (might be due to invalid IL or missing references) //IL_039d: Unknown result type (might be due to invalid IL or missing references) //IL_03a2: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: Unknown result type (might be due to invalid IL or missing references) //IL_03bd: Unknown result type (might be due to invalid IL or missing references) //IL_03c2: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_0345: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) float num = Plugin.localPlayer.movementSpeed / Plugin.localPlayer.carryWeight; if (Plugin.localPlayer.sinkingValue > 0.73f) { num = 0f; } else { if (Plugin.localPlayer.isCrouching) { num /= 1.5f; } else if (Plugin.localPlayer.criticallyInjured && !Plugin.localPlayer.isCrouching) { num *= Plugin.localPlayer.limpMultiplier; } if (Plugin.localPlayer.isSpeedCheating) { num *= 15f; } if (Plugin.localPlayer.movementHinderedPrev > 0) { num /= 2f * Plugin.localPlayer.hinderedMultiplier; } if (Plugin.localPlayer.drunkness > 0f) { num *= StartOfRound.Instance.drunknessSpeedEffect.Evaluate(Plugin.localPlayer.drunkness) / 5f + 1f; } if (!Plugin.localPlayer.isCrouching && Plugin.localPlayer.crouchMeter > 1.2f) { num *= 0.5f; } if (!Plugin.localPlayer.isCrouching) { float num2 = Vector3.Dot(Plugin.localPlayer.playerGroundNormal, Plugin.localPlayer.walkForce); if (num2 > 0.05f) { Plugin.localPlayer.slopeModifier = Mathf.MoveTowards(Plugin.localPlayer.slopeModifier, num2, (Plugin.localPlayer.slopeModifierSpeed + 0.45f) * Time.deltaTime); } else { Plugin.localPlayer.slopeModifier = Mathf.MoveTowards(Plugin.localPlayer.slopeModifier, num2, Plugin.localPlayer.slopeModifierSpeed / 2f * Time.deltaTime); } num = Mathf.Max(num * 0.8f, num + Plugin.localPlayer.slopeIntensity * Plugin.localPlayer.slopeModifier); } } Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(0f, 0f, 0f); int num3 = Physics.OverlapSphereNonAlloc(((Component)Plugin.localPlayer).transform.position, 0.65f, Plugin.localPlayer.nearByPlayers, StartOfRound.Instance.playersMask); for (int i = 0; i < num3; i++) { val += Vector3.Normalize((((Component)Plugin.localPlayer).transform.position - ((Component)Plugin.localPlayer.nearByPlayers[i]).transform.position) * 100f) * 1.2f; } int num4 = Physics.OverlapSphereNonAlloc(((Component)Plugin.localPlayer).transform.position, 1.25f, Plugin.localPlayer.nearByPlayers, 524288); for (int j = 0; j < num4; j++) { EnemyAICollisionDetect component = ((Component)Plugin.localPlayer.nearByPlayers[j]).gameObject.GetComponent<EnemyAICollisionDetect>(); if ((Object)(object)component != (Object)null && (Object)(object)component.mainScript != (Object)null && !component.mainScript.isEnemyDead && Vector3.Distance(((Component)Plugin.localPlayer).transform.position, ((Component)Plugin.localPlayer.nearByPlayers[j]).transform.position) < component.mainScript.enemyType.pushPlayerDistance) { val += Vector3.Normalize((((Component)Plugin.localPlayer).transform.position - ((Component)Plugin.localPlayer.nearByPlayers[j]).transform.position) * 100f) * component.mainScript.enemyType.pushPlayerForce; } } Vector3 val2 = Plugin.localPlayer.walkForce * num * Plugin.localPlayer.sprintMultiplier + new Vector3(0f, Plugin.localPlayer.fallValue, 0f) + val; return val2 + Plugin.localPlayer.externalForces; } public static void FreezePlayer(PlayerControllerB player, bool value) { localPlayerFrozen = value; player.disableInteract = value; player.disableLookInput = value; player.disableMoveInput = value; } public static void DespawnItemInSlotOnClient(int itemSlot) { ((Behaviour)HUDManager.Instance.itemSlotIcons[itemSlot]).enabled = false; Plugin.localPlayer.DestroyItemInSlotAndSync(itemSlot); } public static void MakePlayerInvisible(PlayerControllerB player, bool value) { GameObject gameObject = ((Component)((Component)player).gameObject.transform.Find("ScavengerModel")).gameObject; if ((Object)(object)gameObject == (Object)null) { Plugin.logger.LogError((object)"ScavengerModel not found"); return; } ((Component)gameObject.transform.Find("LOD1")).gameObject.SetActive(!value); ((Component)gameObject.transform.Find("LOD2")).gameObject.SetActive(!value); ((Component)gameObject.transform.Find("LOD3")).gameObject.SetActive(!value); ((Component)gameObject.transform.Find("metarig/spine/spine.001/spine.002/spine.003/LevelSticker")).gameObject.SetActive(!value); ((Component)gameObject.transform.Find("metarig/spine/spine.001/spine.002/spine.003/BetaBadge")).gameObject.SetActive(!value); ((Component)player.playerBadgeMesh).gameObject.SetActive(!value); } public static List<SpawnableEnemyWithRarity> GetEnemies() { List<SpawnableEnemyWithRarity> list = new List<SpawnableEnemyWithRarity>(); return (from x in GameObject.Find("Terminal").GetComponentInChildren<Terminal>().moonsCatalogueList.SelectMany((SelectableLevel x) => x.Enemies.Concat(x.DaytimeEnemies).Concat(x.OutsideEnemies)) where x != null && (Object)(object)x.enemyType != (Object)null && ((Object)x.enemyType).name != null select x).GroupBy((SpawnableEnemyWithRarity x) => ((Object)x.enemyType).name, (string k, IEnumerable<SpawnableEnemyWithRarity> v) => v.First()).ToList(); } public static EnemyVent GetClosestVentToPosition(Vector3 pos) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) float num = 2000f; EnemyVent result = null; EnemyVent[] allEnemyVents = RoundManager.Instance.allEnemyVents; foreach (EnemyVent val in allEnemyVents) { float num2 = Vector3.Distance(pos, ((Component)val.floorNode).transform.position); if (num2 < num) { num = num2; result = val; } } return result; } public static bool CalculatePath(Vector3 fromPos, Vector3 toPos) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Expected O, but got Unknown //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_005a: 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_006a: 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) Vector3 navMeshPosition = RoundManager.Instance.GetNavMeshPosition(fromPos, RoundManager.Instance.navHit, 1.75f, -1); Vector3 navMeshPosition2 = RoundManager.Instance.GetNavMeshPosition(toPos, RoundManager.Instance.navHit, 1.75f, -1); NavMeshPath val = new NavMeshPath(); return NavMesh.CalculatePath(navMeshPosition, navMeshPosition2, -1, val) && Vector3.Distance(val.corners[val.corners.Length - 1], RoundManager.Instance.GetNavMeshPosition(navMeshPosition2, RoundManager.Instance.navHit, 2.7f, -1)) <= 1.55f; } public static bool CalculatePath(Vector3 fromPos, Vector3 toPos, Vector3 mainEntranceInsidePosition, Vector3 mainEntranceOutsidePosition, bool isOutside) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) if (!CalculatePath(fromPos, toPos)) { Vector3 toPos2 = (isOutside ? mainEntranceOutsidePosition : mainEntranceInsidePosition); Vector3 fromPos2 = (isOutside ? mainEntranceInsidePosition : mainEntranceOutsidePosition); return CalculatePath(fromPos, toPos2) && CalculatePath(fromPos2, toPos); } return true; } public static T? GetClosestGameObjectOfType<T>(Vector3 position) where T : Component { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) T[] array = Object.FindObjectsOfType<T>(); T result = default(T); float num = float.PositiveInfinity; T[] array2 = array; foreach (T val in array2) { float num2 = Vector3.Distance(position, ((Component)val).transform.position); if (num2 < num) { num = num2; result = val; } } return result; } public static void Shuffle<T>(this List<T> list) { int num = list.Count; while (num > 1) { num--; int index = Random.Range(0, num + 1); T value = list[index]; list[index] = list[num]; list[num] = value; } } public static T GetRandom<T>(this IEnumerable<T> source, Random? random = null) { if (source == null) { throw new ArgumentNullException("source"); } if (random == null) { random = new Random(); } T result = default(T); int num = 0; foreach (T item in source) { num++; if (random.Next(num) == 0) { result = item; } } if (num == 0) { throw new InvalidOperationException("Sequence contains no elements."); } return result; } public static T? GetClosestToPosition<T>(this IEnumerable<T> list, Vector3 position, Func<T, Vector3> positionSelector) where T : class { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) T result = null; float num = float.PositiveInfinity; foreach (T item in list) { if (item != null) { float num2 = Vector3.Distance(position, positionSelector(item)); if (!(num2 >= num)) { result = item; num = num2; } } } return result; } public static T? GetFarthestFromPosition<T>(this IEnumerable<T> list, Vector3 position, Func<T, Vector3> positionSelector) where T : class { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) T result = null; float num = 0f; foreach (T item in list) { if (item != null) { float num2 = Vector3.Distance(position, positionSelector(item)); if (!(num2 <= num)) { result = item; num = num2; } } } return result; } public static Dictionary<string, GameObject> GetAllHazards() { Dictionary<string, GameObject> dictionary = new Dictionary<string, GameObject>(); List<SpawnableMapObject> list = (from x in StartOfRound.Instance.levels.SelectMany((SelectableLevel level) => level.spawnableMapObjects) group x by ((Object)x.prefabToSpawn).name into g select g.First()).ToList(); foreach (SpawnableMapObject item in list) { dictionary.Add(((Object)item.prefabToSpawn).name, item.prefabToSpawn); } return dictionary; } public static Vector3 GetRandomNavMeshPositionInAnnulus(Vector3 center, float minRadius, float maxRadius, int sampleCount = 10) { //IL_0001: 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_0025: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_0084: 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) float y = center.y; if (minRadius >= maxRadius) { Plugin.logger.LogWarning((object)"minRadius should be less than maxRadius. Returning original position."); return center; } NavMeshHit val2 = default(NavMeshHit); for (int i = 0; i < sampleCount; i++) { Vector3 insideUnitSphere = Random.insideUnitSphere; insideUnitSphere.y = 0f; ((Vector3)(ref insideUnitSphere)).Normalize(); float num = Random.Range(minRadius, maxRadius); Vector3 val = center + insideUnitSphere * num; val.y = y; if (NavMesh.SamplePosition(val, ref val2, 2f, -1)) { return ((NavMeshHit)(ref val2)).position; } } Plugin.logger.LogWarning((object)"Unable to find valid NavMesh position in annulus. Returning original position."); return center; } public static List<Vector3> GetEvenlySpacedNavMeshPositions(Vector3 center, int count, float minRadius, float maxRadius) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) List<Vector3> list = new List<Vector3>(); if (count <= 0 || minRadius > maxRadius) { Plugin.logger.LogWarning((object)"Invalid parameters for turret spawn positions."); return list; } float y = center.y; float num = 360f / (float)count; Vector3 val = default(Vector3); NavMeshHit val2 = default(NavMeshHit); for (int i = 0; i < count; i++) { float num2 = (float)i * num; float num3 = num2 * (MathF.PI / 180f); float num4 = Random.Range(minRadius, maxRadius); float num5 = Mathf.Cos(num3) * num4; float num6 = Mathf.Sin(num3) * num4; ((Vector3)(ref val))..ctor(center.x + num5, y, center.z + num6); if (NavMesh.SamplePosition(val, ref val2, 2f, -1)) { list.Add(((NavMeshHit)(ref val2)).position); } else { Plugin.logger.LogWarning((object)$"Could not find valid NavMesh position for turret {i}. Skipping."); } } return list; } public static PlayerControllerB[] GetNearbyPlayers(Vector3 position, float distance = 10f, List<PlayerControllerB>? ignoredPlayers = null) { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) List<PlayerControllerB> list = new List<PlayerControllerB>(); PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if (!((Object)(object)val == (Object)null) && val.isPlayerControlled && (ignoredPlayers == null || !ignoredPlayers.Contains(val)) && !(Vector3.Distance(position, ((Component)val).transform.position) > distance)) { list.Add(val); } } return list.ToArray(); } public static void RebuildRig(PlayerControllerB pcb) { if ((Object)(object)pcb != (Object)null && (Object)(object)pcb.playerBodyAnimator != (Object)null) { pcb.playerBodyAnimator.WriteDefaultValues(); RigBuilder component = ((Component)pcb.playerBodyAnimator).GetComponent<RigBuilder>(); if (component != null) { component.Build(); } } } public static bool IsPlayerChild(PlayerControllerB player) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) return player.thisPlayerBody.localScale.y < 1f; } public static PlayerControllerB? GetFarthestPlayerFromPosition(Vector3 position, float minDistance = 0f) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) float num = minDistance; PlayerControllerB result = null; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val in allPlayerScripts) { if (!((Object)(object)val == (Object)null) && val.isPlayerControlled) { float num2 = Vector3.Distance(position, ((Component)val).transform.position); if (!(num2 < num)) { num = num2; result = val; } } } return result; } public static float CanPathToPoint(Vector3 startPos, Vector3 endPos) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Invalid comparison between Unknown and I4 //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) NavMeshPath val = new NavMeshPath(); if (!NavMesh.CalculatePath(startPos, endPos, -1, val) || (int)val.status > 0) { return -1f; } float num = 0f; if (val.corners.Length > 1) { for (int i = 1; i < val.corners.Length; i++) { num += Vector3.Distance(val.corners[i - 1], val.corners[i]); } } return num; } public static void PlaySoundAtPosition(Vector3 pos, AudioClip clip, float volume = 1f, bool randomizePitch = true, bool spatial3D = true, float min3DDistance = 1f, float max3DDistance = 10f) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown GameObject val = Object.Instantiate<GameObject>(new GameObject("TempSoundEffectObj"), pos, Quaternion.identity); AudioSource val2 = val.AddComponent<AudioSource>(); OccludeAudio val3 = val.AddComponent<OccludeAudio>(); val3.lowPassOverride = 20000f; val2.rolloffMode = (AudioRolloffMode)1; if (randomizePitch) { val2.pitch = Random.Range(0.94f, 1.06f); } val2.clip = clip; val2.volume = volume; val2.spatialBlend = (spatial3D ? 1 : 0); val2.minDistance = min3DDistance; val2.maxDistance = max3DDistance; val2.Play(); Object.Destroy((Object)(object)val, val2.clip.length); } public static void PlaySoundAtPosition(Vector3 pos, AudioClip[] clips, float volume = 1f, bool randomizePitch = true, bool spatial3D = true, float min3DDistance = 1f, float max3DDistance = 10f) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) int num = Random.Range(0, clips.Length); PlaySoundAtPosition(pos, clips[num], volume, randomizePitch, spatial3D, min3DDistance, max3DDistance); } public static PlayerControllerB? GetRandomPlayer() { PlayerControllerB[] array = StartOfRound.Instance.allPlayerScripts.Where((PlayerControllerB x) => (Object)(object)x != (Object)null && x.isPlayerControlled).ToArray(); if (array.Length == 0) { return null; } int num = Random.Range(0, array.Length); return array[num]; } public static GrabbableObject? SpawnItem(NamespacedKey<DawnItemInfo> key, Vector3 position, Quaternion rotation = default(Quaternion), float fallTime = 0f) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) if (!Plugin.IsServerOrHost) { return null; } GameObject val = Object.Instantiate<GameObject>(((Registry<DawnItemInfo>)(object)LethalContent.Items)[key].Item.spawnPrefab, position, rotation, StartOfRound.Instance.propsContainer); GrabbableObject component = val.GetComponent<GrabbableObject>(); component.fallTime = fallTime; ((NetworkBehaviour)component).NetworkObject.Spawn(false); return component; } public static void MufflePlayer(PlayerControllerB player, bool muffle) { if ((Object)(object)player.currentVoiceChatAudioSource == (Object)null) { StartOfRound.Instance.RefreshPlayerVoicePlaybackObjects(); } if ((Object)(object)player.currentVoiceChatAudioSource != (Object)null) { OccludeAudio component = ((Component)player.currentVoiceChatAudioSource).GetComponent<OccludeAudio>(); ((Component)player.currentVoiceChatAudioSource).GetComponent<AudioLowPassFilter>().lowpassResonanceQ = (muffle ? 5f : 1f); component.overridingLowPass = muffle; component.lowPassOverride = (muffle ? 500f : 20000f); player.voiceMuffledByEnemy = muffle; } } } [HarmonyPatch] public class UtilsPatches { [HarmonyPrefix] [HarmonyPatch(typeof(RoundManager), "SpawnInsideEnemiesFromVentsIfReady")] public static bool SpawnInsideEnemiesFromVentsIfReadyPrefix() { if (Utils.isBeta && Utils.DEBUG_disableSpawning) { return false; } return true; } [HarmonyPrefix] [HarmonyPatch(typeof(RoundManager), "SpawnDaytimeEnemiesOutside")] public static bool SpawnDaytimeEnemiesOutsidePrefix() { if (Utils.isBeta && Utils.DEBUG_disableSpawning) { return false; } return true; } [HarmonyPrefix] [HarmonyPatch(typeof(RoundManager), "SpawnEnemiesOutside")] public static bool SpawnEnemiesOutsidePrefix() { if (Utils.isBeta && Utils.DEBUG_disableSpawning) { return false; } return true; } } public static class MyPluginInfo { public const string PLUGIN_GUID = "Snowlance.Something"; public const string PLUGIN_NAME = "Something"; public const string PLUGIN_VERSION = "0.3.2"; } } namespace Something.Items { internal class BunnyBunBehavior : PhysicsProp { public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); } public override void GrabItem() { ((GrabbableObject)this).GrabItem(); } protected override void __initializeVariables() { ((PhysicsProp)this).__initializeVariables(); } protected override void __initializeRpcs() { ((PhysicsProp)this).__initializeRpcs(); } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "BunnyBunBehavior"; } } internal class KeytarBehavior : PhysicsProp { public AudioSource ItemAudio; public AudioClip[] songs; private PlayerControllerB previousPlayerHeldBy; private int songIndex; public override void EquipItem() { ((PhysicsProp)this).EquipItem(); previousPlayerHeldBy = ((GrabbableObject)this).playerHeldBy; previousPlayerHeldBy.playerBodyAnimator.SetBool("reelingUp", true); } public override void DiscardItem() { previousPlayerHeldBy.playerBodyAnimator.SetBool("reelingUp", false); ((GrabbableObject)this).DiscardItem(); } public override void PocketItem() { previousPlayerHeldBy.playerBodyAnimator.SetBool("reelingUp", false); ((GrabbableObject)this).PocketItem(); } public override void ItemActivate(bool used, bool buttonDown = true) { ((GrabbableObject)this).ItemActivate(used, buttonDown); if (buttonDown) { ItemAudio.Stop(); ItemAudio.clip = songs[songIndex]; ItemAudio.Play(); if (songIndex >= songs.Length - 1) { songIndex = 0; } else { songIndex++; } } } protected override void __initializeVariables() { ((PhysicsProp)this).__initializeVariables(); } protected override void __initializeRpcs() { ((PhysicsProp)this).__initializeRpcs(); } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "KeytarBehavior"; } } public class PolaroidBehavior : PhysicsProp { public AudioSource audioSource; public SpriteRenderer renderer; public Animator animator; public Sprite[] goodPhotos; public Sprite[] altGoodPhotos; public Sprite[] badPhotos; public Sprite[] altBadPhotos; private bool isLocalPlayerCursed; private Random random; private int photoType; private int photoIndex; private bool wasHeld; public static List<PolaroidBehavior> Instances { get; private set; } = new List<PolaroidBehavior>(); private int goodWeight => ((AssetBundleLoader<SomethingContentHandler.PolaroidAssets>)(object)ContentHandler<SomethingContentHandler>.Instance.Polaroid).GetConfig<int>("Good Weight").Value; private int badWeight => ((AssetBundleLoader<SomethingContentHandler.PolaroidAssets>)(object)ContentHandler<SomethingContentHandler>.Instance.Polaroid).GetConfig<int>("Bad Weight").Value; private int cursedWeight => ((AssetBundleLoader<SomethingContentHandler.PolaroidAssets>)(object)ContentHandler<SomethingContentHandler>.Instance.Polaroid).GetConfig<int>("Cursed Weight").Value; private float badSomethingChance => ((AssetBundleLoader<SomethingContentHandler.PolaroidAssets>)(object)ContentHandler<SomethingContentHandler>.Instance.Polaroid).GetConfig<float>("Bad Something Chance").Value; private BoundedRange goodValue => ((AssetBundleLoader<SomethingContentHandler.PolaroidAssets>)(object)ContentHandler<SomethingContentHandler>.Instance.Polaroid).GetConfig<BoundedRange>("Good Value").Value; private BoundedRange badValue => ((AssetBundleLoader<SomethingContentHandler.PolaroidAssets>)(object)ContentHandler<SomethingContentHandler>.Instance.Polaroid).GetConfig<BoundedRange>("Bad Value").Value; private BoundedRange cursedValue => ((AssetBundleLoader<SomethingContentHandler.PolaroidAssets>)(object)ContentHandler<SomethingContentHandler>.Instance.Polaroid).GetConfig<BoundedRange>("Cursed Value").Value; public override void Start() { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Expected O, but got Unknown ((GrabbableObject)this).Start(); Instances.Add(this); random = new Random(StartOfRound.Instance.randomMapSeed + Instances.Count); Plugin.onShipLanded.AddListener(new UnityAction(OnShipLanded)); if (!wasHeld) { photoType = RoundManager.Instance.GetRandomWeightedIndex(new int[3] { goodWeight, badWeight, cursedWeight }, random); BoundedRange val = cursedValue; if (photoType != 2) { val = ((photoType == 0) ? goodValue : badValue); Sprite[] array = ((photoType == 0) ? goodPhotos : badPhotos); photoIndex = random.Next(0, array.Length); } ((GrabbableObject)this).SetScrapValue((int)val.GetRandomInRange(random)); ChangeSprite(photoType, photoIndex); } } private void OnShipLanded() { if (isLocalPlayerCursed) { SpawnSomethingServerRpc(Plugin.localPlayer.actualClientId); } } public override void OnDestroy() { Instances.Remove(this); ((NetworkBehaviour)this).OnDestroy(); } public override void EquipItem() { ((PhysicsProp)this).EquipItem(); if (!wasHeld && (photoType == 2 || (photoType == 1 && RandomExtensions.NextFloat(random, 0f, 1f) < badSomethingChance))) { if (photoType == 2) { string trigger = (Plugin.configMinimalSpoilerVersion.Value ? "playalt" : "play"); ((Behaviour)animator).enabled = true; animator.SetTrigger(trigger); if ((Object)(object)((GrabbableObject)this).playerHeldBy == (Object)(object)Plugin.localPlayer) { audioSource.Play(); isLocalPlayerCursed = true; } } if ((Object)(object)((GrabbableObject)this).playerHeldBy == (Object)(object)Plugin.localPlayer) { SpawnSomethingServerRpc(((GrabbableObject)this).playerHeldBy.actualClientId); } } wasHeld = true; } public void SpawnSomething(PlayerControllerB playerToHaunt) { //IL_0061: 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) if (((NetworkBehaviour)this).IsServer && !StartOfRound.Instance.inShipPhase && !StartOfRound.Instance.shipIsLeaving && ContentHandler<SomethingContentHandler>.Instance != null && ContentHandler<SomethingContentHandler>.Instance.Something != null) { SomethingAI component = Object.Instantiate<GameObject>(ContentHandler<SomethingContentHandler>.Instance.Something.SomethingPrefab, Vector3.zero, Quaternion.identity).GetComponent<SomethingAI>(); ((NetworkBehaviour)component).NetworkObject.Spawn(true); RoundManager.Instance.SpawnedEnemies.Add((EnemyAI)(object)component); component.ChangeTargetPlayerClientRpc(playerToHaunt.actualClientId); } } public override void EnableItemMeshes(bool enable) { ((GrabbableObject)this).EnableItemMeshes(enable); ((Renderer)renderer).enabled = enable; } public override void LoadItemSaveData(int saveData) { wasHeld = true; Decode(saveData, out var type, out var index); ChangeSprite(type, index); } public override int GetItemDataToSave() { return Encode(photoType, photoIndex); } public int GetAltPhotoIndex() { if (photoType == 2) { return -1; } int num = ((photoType == 0) ? goodPhotos.Length : badPhotos.Length); int num2 = ((photoType == 0) ? altGoodPhotos.Length : altBadPhotos.Length); return photoIndex * num2 / num; } private int Encode(int type, int index) { return (type << 8) | index; } private void Decode(int value, out int type, out int index) { index = value & 0xFF; type = (value >> 8) & 3; } public void ChangeSprite(int type, int index) { photoType = type; photoIndex = index; if (photoType != 2) { bool value = Plugin.configMinimalSpoilerVersion.Value; int num = (value ? GetAltPhotoIndex() : index); Sprite[] array = ((photoType != 0) ? (value ? altBadPhotos : badPhotos) : (value ? altGoodPhotos : goodPhotos)); renderer.sprite = array[num]; Plugin.logger.LogDebug((object)$"Changed sprite: {photoType}-{photoIndex}"); } } [ServerRpc(RequireOwnership = false)] public void SpawnSomethingServerRpc(ulong hauntedPlayerId) { //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) //IL_00ce: 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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(72547334u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, hauntedPlayerId); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 72547334u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (((NetworkBehaviour)this).IsServer) { SpawnSomething(Plugin.PlayerFromId(hauntedPlayerId)); } } } protected override void __initializeVariables() { ((PhysicsProp)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(72547334u, new RpcReceiveHandler(__rpc_handler_72547334), "SpawnSomethingServerRpc"); ((PhysicsProp)this).__initializeRpcs(); } private static void __rpc_handler_72547334(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) { ulong hauntedPlayerId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref hauntedPlayerId); target.__rpc_exec_stage = (__RpcExecStage)1; ((PolaroidBehavior)(object)target).SpawnSomethingServerRpc(hauntedPlayerId); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "PolaroidBehavior"; } } internal class SweetheartsMorgenshternBehavior : PhysicsProp { protected override void __initializeVariables() { ((PhysicsProp)this).__initializeVariables(); } protected override void __initializeRpcs() { ((PhysicsProp)this).__initializeRpcs(); } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "SweetheartsMorgenshternBehavior"; } } } namespace Something.Enemies { internal class RabbitAI : EnemyAI { public Transform turnCompass; public override void Start() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) Plugin.logger.LogDebug((object)"Rabbit spawned"); ((EnemyAI)this).Start(); ((EnemyAI)this).StartSearch(((Component)this).transform.position, (AISearchRoutine)null); } public override void Update() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).Update(); if (Plugin.localPlayer.HasLineOfSightToPosition(((Component)this).transform.position + Vector3.up * 0.25f, 80f, 5, 1f)) { Plugin.localPlayer.JumpToFearLevel(1f, true); } } public void LateUpdate() { //IL_0016: 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) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) turnCompass.LookAt(((Component)Plugin.localPlayer.gameplayCamera).transform.position); ((Component)this).transform.rotation = Quaternion.Lerp(((Component)this).transform.rotation, Quaternion.Euler(new Vector3(0f, turnCompass.eulerAngles.y, 0f)), 50f * Time.deltaTime); } public override void HitEnemy(int force = 1, PlayerControllerB playerWhoHit = null, bool playHitSFX = false, int hitID = -1) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) ((EnemyAI)this).HitEnemy(force, playerWhoHit, playHitSFX, hitID); if ((Object)(object)playerWhoHit != (Object)null && (Object)(object)playerWhoHit == (Object)(object)Plugin.localPlayer) { playerWhoHit.KillPlayer(Vector3.zero, true, (CauseOfDeath)6, 7, default(Vector3)); } } protected override void __initializeVariables() { ((EnemyAI)this).__initializeVariables(); } protected override void __initializeRpcs() { ((EnemyAI)this).__initializeRpcs(); } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "RabbitAI"; } } internal class SpringCatAI : EnemyAI { public enum State { Inactive, Active } [CompilerGenerated] private sealed class <>c__DisplayClass52_0 { public PlayerControllerB player; public SpringCatAI <>4__this; internal bool <KeepPlayerInMouthForDelay>b__0() { return (!player.isPlayerControlled && (Object)(object)player.deadBody != (Object)null) || !((EnemyAI)<>4__this).inSpecialAnimation; } } [CompilerGenerated] private sealed class <FreezePlayerCoroutine>d__39 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float freezeTime; public SpringCatAI <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <FreezePlayerCoroutine>d__39(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; Utils.FreezePlayer(((EnemyAI)<>4__this).targetPlayer, value: true); <>2__current = (object)new WaitForSeconds(freezeTime); <>1__state = 1; return true; case 1: <>1__state = -1; Utils.FreezePlayer(((EnemyAI)<>4__this).targetPlayer, value: 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(); } } [CompilerGenerated] private sealed class <KeepPlayerInMouthForDelay>d__52 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PlayerControllerB player; public float delay; public SpringCatAI <>4__this; private <>c__DisplayClass52_0 <>8__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <KeepPlayerInMouthForDelay>d__52(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>8__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Expected O, but got Unknown //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>8__1 = new <>c__DisplayClass52_0(); <>8__1.player = player; <>8__1.<>4__this = <>4__this; Plugin.logger.LogDebug((object)"KeepPlayerInMouthForDelay"); <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; <>2__current = (object)new WaitUntil((Func<bool>)(() => (!<>8__1.player.isPlayerControlled && (Object)(object)<>8__1.player.deadBody != (Object)null) || !((EnemyAI)<>8__1.<>4__this).inSpecialAnimation)); <>1__state = 2; return true; case 2: <>1__state = -1; if (!((EnemyAI)<>4__this).inSpecialAnimation) { Plugin.logger.LogError((object)"No longer inspecialanimation"); <>4__this.ResetVariables(); return false; } <>8__1.player.deadBody.attachedTo = <>4__this.MouthTransform; <>8__1.player.deadBody.attachedLimb = <>8__1.player.deadBody.bodyParts[5]; <>8__1.player.deadBody.matchPositionExactly = true; <>2__current = (object)new WaitForSeconds(delay); <>1__state = 3; return true; case 3: <>1__state = -1; <>8__1.player.deadBody.attachedTo = null; <>8__1.player.deadBody.attachedLimb = null; <>8__1.player.deadBody.matchPositionExactly = 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(); } } public static int SpringCatKillIndex = 1; public Transform turnCompass; public GameObject ScanNode; public Transform MeshTransform; public Transform RightHandTransform; public Transform LeftHandTransform; public Transform ChestTransform; public Transform HeadTransform; public Transform MouthTransform; public GameObject Container; public AudioClip GlassBreakSFX; private BreakerBox? breakerBox; private bool grabbingPlayer; private bool grabbingRight; private bool playerInChest; private int bodyPartLeft = -1; private int bodyPartRight = -1; private float timeSinceMeow; private float timeSinceSwitchLights; private float timeSinceRecalcPath; private Queue<Vector3> etchPath = new Queue<Vector3>(); private bool followingPath = false; private const float turnSpeed = 15f; private const float throwForce = 20f; private const float triggerDistance = 5f; private const float meowCooldown = 30f; private const float lightSwitchCooldown = 5f; private const float turnOffLightsDistance = 10f; private const float playerInMouthTime = 5f; private bool targetPlayerDead => (Object)(object)base.targetPlayer != (Object)null && !base.targetPlayer.isPlayerControlled && (Object)(object)base.targetPlayer.deadBody != (Object)null; public override void Start() { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) try { base.overlapColliders = (Collider[])(object)new Collider[1]; base.thisNetworkObject = ((NetworkBehaviour)this).NetworkObject; base.thisEnemyIndex = RoundManager.Instance.numberOfEnemiesInScene; RoundManager instance = RoundManager.Instance; instance.numberOfEnemiesInScene++; base.allAINodes = Utils.insideAINodes; if (!((NetworkBehaviour)this).IsServer) { RoundManager.Instance.SpawnedEnemies.Add((EnemyAI)(object)this); } base.path1 = new NavMeshPath(); base.openDoorSpeedMultiplier = base.enemyType.doorSpeedMultiplier; base.serverPosition = ((Component)this).transform.position; base.ventAnimationFinished = true; } catch (Exception arg) { Plugin.logger.LogError((object)$"Error when initializing enemy variables for {((Object)((Component)this).gameObject).name} : {arg}"); } base.currentBehaviourStateIndex = 0; breakerBox = Object.FindObjectOfType<BreakerBox>(); } public override void Update() { //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: 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_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_02b2: Unknown result type (might be due to invalid IL or missing references) //IL_02b7: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Unknown result type (might be due to invalid IL or missing references) if (base.currentBehaviourStateIndex == 0) { timeSinceMeow += Time.deltaTime; if (timeSinceMeow > 30f) { base.creatureVoice.Play(); timeSinceMeow = 0f; } } if (StartOfRound.Instance.allPlayersDead || base.inSpecialAnimation) { return; } if ((Object)(object)base.targetPlayer != (Object)null) { if (base.currentBehaviourStateIndex == 0) { turnCompass.LookAt(((Component)base.targetPlayer.gameplayCamera).transform.position); MeshTransform.rotation = Quaternion.Lerp(MeshTransform.rotation, Quaternion.Euler(new Vector3(0f, turnCompass.eulerAngles.y, 0f)), 15f * Time.deltaTime); HeadTransform.rotation = Quaternion.Lerp(HeadTransform.rotation, Quaternion.Euler(new Vector3(turnCompass.eulerAngles.x, turnCompass.eulerAngles.y, turnCompass.eulerAngles.z)), 15f * Time.deltaTime); } else { turnCompass.LookAt(((Component)base.targetPlayer.gameplayCamera).transform.position); HeadTransform.rotation = Quaternion.Lerp(HeadTransform.rotation, Quaternion.Euler(new Vector3(turnCompass.eulerAngles.x, turnCompass.eulerAngles.y, turnCompass.eulerAngles.z)), 15f * Time.deltaTime); } } else { HeadTransform.rotation = Quaternion.identity; } if (!((NetworkBehaviour)this).IsServer) { return; } timeSinceSwitchLights += Time.deltaTime; if (base.updateDestinationInterval >= 0f) { base.updateDestinationInterval -= Time.deltaTime; } else { ((EnemyAI)this).DoAIInterval(); base.updateDestinationInterval = base.AIIntervalTime + Random.Range(-0.015f, 0.015f); } if (!((Object)(object)base.targetPlayer == (Object)null)) { if (!followingPath && etchPath.Count > 0) { Vector3 destination = etchPath.Dequeue(); base.agent.SetDestination(destination); followingPath = true; } if (followingPath && !base.agent.pathPending && base.agent.remainingDistance < 0.1f) { followingPath = false; } } } public void LateUpdate() { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)base.targetPlayer != (Object)null) { if (playerInChest) { grabbingPlayer = false; if (targetPlayerDead) { ResetVariables(); } else { ((Component)base.targetPlayer).transform.position = ChestTransform.position; } } else if (grabbingPlayer) { if (targetPlayerDead) { if (bodyPartLeft > -1 && bodyPartLeft <= 10) { base.targetPlayer.deadBody.secondaryAttachedTo = LeftHandTransform; base.targetPlayer.deadBody.secondaryAttachedLimb = base.targetPlayer.deadBody.bodyParts[bodyPartLeft]; } if (bodyPartRight > -1 && bodyPartRight <= 10) { base.targetPlayer.deadBody.attachedTo = RightHandTransform; base.targetPlayer.deadBody.attachedLimb = base.targetPlayer.deadBody.bodyParts[bodyPartRight]; } base.targetPlayer.deadBody.matchPositionExactly = true; } else { ((Component)base.targetPlayer).transform.position = (grabbingRight ? RightHandTransform.position : LeftHandTransform.position); Vector3 val = ((Component)base.targetPlayer).transform.position - base.targetPlayer.bodyParts[5].position; Transform transform = ((Component)base.targetPlayer).transform; transform.position += val; } } else { bodyPartLeft = -1; bodyPartRight = -1; } } else { grabbingPlayer = false; bodyPartLeft = -1; bodyPartRight = -1; playerInChest = false; } } private void RecalculatePath() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Expected O, but got Unknown //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: 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_006d: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0070: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)base.targetPlayer == (Object)null) { return; } NavMeshPath val = new NavMeshPath(); base.agent.CalculatePath(((Component)base.targetPlayer).transform.position, val); etchPath.Clear(); Vector3 val2 = ((Component)this).transform.position; Vector3[] corners = val.corners; Vector3 val5 = default(Vector3); Vector3 val6 = default(Vector3); foreach (Vector3 val3 in corners) { Vector3 val4 = val3 - val2; if (Mathf.Abs(val4.x) > 0.01f) { ((Vector3)(ref val5))..ctor(val3.x, val2.y, val2.z); etchPath.Enqueue(val5); val2 = val5; } if (Mathf.Abs(val4.z) > 0.01f) { ((Vector3)(ref val6))..ctor(val2.x, val2.y, val3.z); etchPath.Enqueue(val6); val2 = val6; } } } public override void DoAIInterval() { //IL_0054: 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) ((EnemyAI)this).DoAIInterval(); if (StartOfRound.Instance.allPlayersDead || base.inSpecialAnimation) { return; } switch (base.currentBehaviourStateIndex) { case 0: if (TargetClosestPlayerInRange(5f) && Vector3.Distance(((Component)this).transform.position, ((Component)base.targetPlayer).transform.position) > 5f) { ((EnemyAI)this).SwitchToBehaviourStateOnLocalClient(1); BreakOutOfContainmentClientRpc(); } break; case 1: if (!TargetClosestPlayer()) { base.targetPlayer = null; base.agent.ResetPath(); break; } if (timeSinceSwitchLights > 5f) { timeSinceSwitchLights = 0f; TurnOffNearbyLightsClientRpc(10f); } if (!Utils.isBeta || !Utils.DEBUG_disableMoving) { RecalculatePath(); } break; default: Plugin.logger.LogWarning((object)("Invalid state: " + base.currentBehaviourStateIndex)); break; } } private bool TargetClosestPlayerInRange(float range) { //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)base.targetPlayer != (Object)null && !((EnemyAI)this).PlayerIsTargetable(base.targetPlayer, false, false)) { base.targetPlayer = null; } float num = float.PositiveInfinity; PlayerControllerB val = null; PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts; foreach (PlayerControllerB val2 in allPlayerScripts) { if (!((Object)(object)val2 == (Object)null) && ((EnemyAI)this).PlayerIsTargetable(val2, false, false) && (!Utils.isBeta || !Utils.DEBUG_disableTargetting || !val2.isHostPlayerObject)) { float num2 = Vector3.Distance(((Component)val2).transform.position, ((Component)this).transform.position); if (num2 <= range && num2 < num) { num = num2; val = val2; } } } if ((Object)(object)val != (Object)null) { base.targetPlayer = val; } return (Object)(object)base.targetPlayer != (Object)null; } public bool TargetClosestPlayer(float bufferDistance = 1.5f, bool requireLineOfSight = false, float viewWidth = 70f) { //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) base.mostOptimalDistance = 2000f; PlayerControllerB targetPlayer = base.targetPlayer; base.targetPlayer = null; for (int i = 0; i < StartOfRound.Instance.connectedPlayersAmount + 1; i++) { if ((!Utils.isBeta || !Utils.DEBUG_disableTargetting || !StartOfRound.Instance.allPlayerScripts[i].isHostPlayerObject) && ((EnemyAI)this).PlayerIsTargetable(StartOfRound.Instance.allPlayerScripts[i], false, false) && !((EnemyAI)this).PathIsIntersectedByLineOfSight(((Component)StartOfRound.Instance.allPlayerScripts[i]).transform.position, false, false, false) && (!requireLineOfSight || ((EnemyAI)this).CheckLineOfSightForPosition(((Component)StartOfRound.Instance.allPlayerScripts[i].gameplayCamera).transform.position, viewWidth, 40, -1f, (Transform)null))) { base.tempDist = Vector3.Distance(((Component)this).transform.position, ((Component)StartOfRound.Instance.allPlayerScripts[i]).transform.position); if (base.tempDist < base.mostOptimalDistance) { base.mostOptimalDistance = base.tempDist; base.targetPlayer = StartOfRound.Instance.allPlayerScripts[i]; } } } if ((Object)(object)base.targetPlayer != (Object)null && bufferDistance > 0f && (Object)(object)targetPlayer != (Object)null && Mathf.Abs(base.mostOptimalDistance - Vector3.Distance(((Component)this).transform.position, ((Component)targetPlayer).transform.position)) < bufferDistance) { base.targetPlayer = targetPlayer; } return (Object)(object)base.targetPlayer != (Object)null; } [IteratorStateMachine(typeof(<FreezePlayerCoroutine>d__39))] private IEnumerator FreezePlayerCoroutine(float freezeTime) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <FreezePlayerCoroutine>d__39(0) { <>4__this = this, freezeTime = freezeTime }; } private GameObject GetRandomAINode(List<GameObject> nodes) { int index = Random.Range(0, nodes.Count); return nodes[index]; } public override void OnCollideWithPlayer(Collider other) { ((EnemyAI)this).OnCollideWithPlayer(other); PlayerControllerB val = default(PlayerControllerB); if (!base.inSpecialAnimation && base.currentBehaviourStateIndex != 0 && ((Component)other).gameObject.TryGetComponent<PlayerControllerB>(ref val) && !((Object)(object)val == (Object)null) && !((Object)(object)val != (Object)(object)Plugin.localPlayer) && val.isPlayerControlled) { base.inSpecialAnimation = true; KillPlayerServerRpc(val.actualClientId); } } public void ResetVariables() { //IL_004b: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)base.targetPlayer != (Object)null) { if (grabbingPlayer || playerInChest) { base.targetPlayer.playerRigidbody.isKinematic = true; ((Component)base.targetPlayer).transform.rotation = Quaternion.identity; if (base.targetPlayer.isPlayerDead && (Object)(object)base.targetPlayer.deadBody != (Object)null) { base.targetPlayer.deadBody.attachedTo = null; base.targetPlayer.deadBody.attachedLimb = null; base.targetPlayer.deadBody.secondaryAttachedTo = null; base.targetPlayer.deadBody.secondaryAttachedLimb = null; base.targetPlayer.deadBody.matchPositionExactly = false; } } base.targetPlayer = null; } base.inSpecialAnimation = false; grabbingPlayer = false; playerInChest = false; bodyPartLeft = -1; bodyPartRight = -1; } public void SetInSpecialAnimation() { Plugin.logger.LogDebug((object)"SetInSpecialAnimation"); base.inSpecialAnimation = true; } public void UnSetInSpecialAnimation() { Plugin.logger.LogDebug((object)"UnSetInSpecialAnimation"); base.inSpecialAnimation = false; } public void GrabPlayerRightHand(int bodyPart = -1) { Plugin.logger.LogDebug((object)"GrabTargetPlayerRightHand"); if ((Object)(object)base.targetPlayer == (Object)null) { Plugin.logger.LogError((object)"TargetPlayer is null"); return; } base.inSpecialAnimation = true; base.targetPlayer.playerRigidbody.isKinematic = false; grabbingRight = true; grabbingPlayer = true; bodyPartRight = bodyPart; } public void GrabPlayerLeftHand(int bodyPart = -1) { Plugin.logger.LogDebug((object)"GrabTargetPlayerLeftHand"); if ((Object)(object)base.targetPlayer == (Object)null) { Plugin.logger.LogError((object)"TargetPlayer is null"); return; } base.inSpecialAnimation = true; base.targetPlayer.playerRigidbody.isKinematic = false; grabbingRight = false; grabbingPlayer = true; bodyPartLeft = bodyPart; } public void DropPlayer() { //IL_0062: Unknown result type (might be due to invalid IL or missing references) Plugin.logger.LogDebug((object)"DropTargetPlayer"); if ((Object)(object)base.targetPlayer == (Object)null) { Plugin.logger.LogError((object)"TargetPlayer is null"); return; } grabbingPlayer = false; playerInChest = false; base.targetPlayer.playerRigidbody.isKinematic = true; ((Component)base.targetPlayer).transform.rotation = Quaternion.identity; if (base.targetPlayer.isPlayerDead && (Object)(object)base.targetPlayer.deadBody != (Object)null) { base.targetPlayer.deadBody.attachedTo = null; base.targetPlayer.deadBody.attachedLimb = null; base.targetPlayer.deadBody.secondaryAttachedTo = null; base.targetPlayer.deadBody.secondaryAttachedLimb = null; base.targetPlayer.deadBody.matchPositionExactly = false; } base.targetPlayer = null; bodyPartRight = -1; bodyPartLeft = -1; } public void ThrowPlayer() { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) Plugin.logger.LogDebug((object)"ThrowTargetPlayer"); if ((Object)(object)base.targetPlayer == (Object)null) { Plugin.logger.LogError((object)"TargetPlayer is null"); return; } base.targetPlayer.playerRigidbody.isKinematic = true; grabbingPlayer = false; if (!((Object)(object)Plugin.localPlayer != (Object)(object)base.targetPlayer)) { Plugin.localPlayer.KillPlayer(LeftHandTransform.forward * 20f, true, (CauseOfDeath)16, 0, default(Vector3)); base.targetPlayer = null; } } public void KillPlayerWithDeathAnimation(int deathAnimation) { //IL_006e: 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_007e: Unknown result type (might be due to invalid IL or missing references) Plugin.logger.LogDebug((object)("KillTargetPlayerWithDeathAnimation: " + deathAnimation)); if ((Object)(object)base.targetPlayer == (Object)null) { Plugin.logger.LogError((object)"TargetPlayer is null"); return; } base.targetPlayer.playerRigidbody.isKinematic = true; if (!((Object)(object)Plugin.localPlayer != (Object)(object)base.targetPlayer)) { Plugin.localPlayer.KillPlayer(Vector3.zero, true, (CauseOfDeath)6, deathAnimation, default(Vector3)); } } public void PutPlayerInChest() { Plugin.logger.LogDebug((object)"PutTargetPlayerInChest"); if ((Object)(object)base.targetPlayer == (Object)null) { Plugin.logger.LogError((object)"TargetPlayer is null"); return; } base.targetPlayer.playerRigidbody.isKinematic = false; playerInChest = true; } public void PutPlayerInMouth() { //IL_0060: 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_0070: Unknown result type (might be due to invalid IL or missing references) Plugin.logger.LogDebug((object)"PutTargetPlayerInMouth"); if ((Object)(object)base.targetPlayer == (Object)null) { Plugin.logger.LogError((object)"TargetPlayer is null"); return; } base.targetPlayer.playerRigidbody.isKinematic = true; if ((Object)(object)Plugin.localPlayer == (Object)(object)base.targetPlayer) { Plugin.localPlayer.KillPlayer(Vector3.zero, true, (CauseOfDeath)6, 1, default(Vector3)); } ((MonoBehaviour)this).StartCoroutine(KeepPlayerInMouthForDelay(base.targetPlayer, 5f)); base.targetPlayer = null; } [IteratorStateMachine(typeof(<KeepPlayerInMouthForDelay>d__52))] private IEnumerator KeepPlayerInMouthForDelay(PlayerControllerB player, float delay) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <KeepPlayerInMouthForDelay>d__52(0) { <>4__this = this, player = player, delay = delay }; } [ServerRpc(RequireOwnership = false)] public void KillPlayerServerRpc(ulong clientId) { //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) //IL_00ce: 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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1739600420u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientId); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1739600420u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (((NetworkBehaviour)this).IsServer) { int num = ((Utils.testing && Utils.isBeta) ? SpringCatKillIndex : Random.Range(1, 7)); KillPlayerClientRpc(clientId, $"killPlayer{num}"); } } } [ClientRpc] public void KillPlayerClientRpc(ulong clientId, string animationName) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: 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_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: 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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3309836895u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientId); bool flag = animationName != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(animationName, false); } ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3309836895u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; base.inSpecialAnimation = true; base.targetPlayer = Plugin.PlayerFromId(clientId); base.creatureAnimator.SetTrigger(animationName); } } [ClientRpc] public void BreakOutOfContainmentClientRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: 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_00f3: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4116683727u, val, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4116683727u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; ((EnemyAI)this).SwitchToBehaviourStateOnLocalClient(1); Container.SetActive(false); MeshTransform.localPosition = Vector3.zero; MeshTransform.localRotation = Quaternion.identity; base.creatureAnimator.SetTrigger("walk"); base.creatureSFX.Play(); base.creatureSFX.PlayOneShot(GlassBreakSFX); } } } [ClientRpc] public void TurnOffNearbyLightsClientRpc(float distance) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: 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_007d: 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) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_011f: 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)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2287887217u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref distance, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2287887217u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; Plugin.logger.LogDebug((object)"Turning off nearby lights"); foreach (Animator allPoweredLightsAnimator in RoundManager.Instance.allPoweredLightsAnimators) { if (Vector3.Distance(((Component)this).transform.position, ((Component)allPoweredLightsAnimator).transform.position) <= distance) { allPoweredLightsAnimator.SetBool("on", false); } } if ((Object)(object)breakerBox != (Object)null) { base.creatureSFX.PlayOneShot(breakerBox.switchPowerSFX); } } protected override void __initializeVariables() { ((EnemyAI)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown