Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of HeavyItemSCPs v1.4.4
HeavyItemSCPs/ProjectSCP.HeavyItemSCPs.dll
Decompiled 6 months 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.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using HeavyItemSCPs; using HeavyItemSCPs.Items.SCP178; using HeavyItemSCPs.Items.SCP323; using HeavyItemSCPs.Items.SCP427; using HeavyItemSCPs.Items.SCP513; using LethalLib.Modules; using Microsoft.CodeAnalysis; using ProjectSCP.HeavyItemSCPs.NetcodePatcher; using SCP500; using SCPItems; using Unity.Netcode; using Unity.Netcode.Components; using UnityEngine; using UnityEngine.AI; using UnityEngine.InputSystem.Utilities; using UnityEngine.Rendering; using UnityEngine.Rendering.HighDefinition; [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("ProjectSCP.HeavyItemSCPs")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.4.4.0")] [assembly: AssemblyInformationalVersion("1.4.4+343549327e02931852f144e9060a753c596c9468")] [assembly: AssemblyProduct("HeavyItemSCPs")] [assembly: AssemblyTitle("ProjectSCP.HeavyItemSCPs")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.4.4.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; } } } public class SCP513_1AICollisionDetect : MonoBehaviour, IHittable { public bool canCollideWithEnemies; public bool onlyCollideWhenGrounded; public SCP513_1AI mainScript => SCP513_1AI.Instance; private void OnTriggerStay(Collider other) { if (((Component)other).CompareTag("Player")) { if (onlyCollideWhenGrounded) { CharacterController component = ((Component)other).gameObject.GetComponent<CharacterController>(); if (!((Object)(object)component != (Object)null) || !component.isGrounded) { return; } mainScript.OnCollideWithPlayer(other); } mainScript.OnCollideWithPlayer(other); } else if (!onlyCollideWhenGrounded && canCollideWithEnemies && ((Component)other).CompareTag("Enemy")) { EnemyAICollisionDetect component2 = ((Component)other).gameObject.GetComponent<EnemyAICollisionDetect>(); if ((Object)(object)component2 != (Object)null) { mainScript.OnCollideWithEnemy(other, component2.mainScript); } } } bool IHittable.Hit(int force, Vector3 hitDirection, PlayerControllerB playerWhoHit, bool playHitSFX, int hitID) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) if (onlyCollideWhenGrounded) { Debug.Log((object)"Enemy collision detect returned false"); return false; } mainScript.HitEnemyOnLocalClient(force, hitDirection, playerWhoHit, playHitSFX, hitID); return true; } } namespace SCPItems { internal class SCP500Compatibility { private static readonly ManualLogSource logger = Plugin.LoggerInstance; private static bool? _enabled; internal static bool enabled { get { if (!_enabled.HasValue) { _enabled = Chainloader.PluginInfos.ContainsKey("ProjectSCP.SCP500"); } return _enabled.Value; } } internal static bool IsLocalPlayerAffectedBySCP500 { get { if (Plugin.config427_500Compatibility.Value && enabled) { return LocalPlayerAffectedBySCP500(); } return false; } } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] private static bool LocalPlayerAffectedBySCP500() { return SCP500Controller.LocalPlayerAffectedBySCP500; } } } namespace HeavyItemSCPs { public class NetworkHandlerHeavyItemSCPs : NetworkBehaviour { [CompilerGenerated] private sealed class <<ShotgunSuicideClientRpc>g__RotateShotgunCoroutine|16_0>d : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public ShotgunItem shotgun; public float duration; private PlayerControllerB <player>5__1; private float <elapsedTime>5__2; private Vector3 <startRot>5__3; private Vector3 <endRot>5__4; private Vector3 <startPos>5__5; private Vector3 <endPos>5__6; private float <t>5__7; private Vector3 <_rotOffset>5__8; private Vector3 <_posOffset>5__9; object? IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object? IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <<ShotgunSuicideClientRpc>g__RotateShotgunCoroutine|16_0>d(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { int num = <>1__state; if (num == -3 || (uint)(num - 1) <= 3u) { try { } finally { <>m__Finally1(); } } <player>5__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_02b6: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Expected O, but got Unknown //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: 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_0220: Unknown result type (might be due to invalid IL or missing references) //IL_022a: Expected O, but got Unknown try { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <player>5__1 = ((GrabbableObject)shotgun).playerHeldBy; <>1__state = -3; if (!HallucinationManager.overrideShotgunsRotOffsets.ContainsKey((GrabbableObject)(object)shotgun)) { HallucinationManager.overrideShotgunsRotOffsets.Add((GrabbableObject)(object)shotgun, ((GrabbableObject)shotgun).itemProperties.rotationOffset); } if (!HallucinationManager.overrideShotgunsPosOffsets.ContainsKey((GrabbableObject)(object)shotgun)) { HallucinationManager.overrideShotgunsPosOffsets.Add((GrabbableObject)(object)shotgun, ((GrabbableObject)shotgun).itemProperties.positionOffset); } HallucinationManager.overrideShotguns.Add((GrabbableObject)(object)shotgun); <elapsedTime>5__2 = 0f; <startRot>5__3 = ((GrabbableObject)shotgun).itemProperties.rotationOffset; <endRot>5__4 = new Vector3(105f, -50f, -50f); <startPos>5__5 = ((GrabbableObject)shotgun).itemProperties.positionOffset; <endPos>5__6 = new Vector3(0f, 0.7f, -0.1f); goto IL_0203; case 1: <>1__state = -3; goto IL_0203; case 2: <>1__state = -3; if ((Object)(object)<player>5__1 == (Object)(object)Plugin.localPlayer) { Plugin.localPlayer.activatingItem = false; Utils.FreezePlayer(Plugin.localPlayer, value: false); shotgun.ShootGunAndSync(false); <>2__current = null; <>1__state = 3; return true; } goto IL_02c2; case 3: <>1__state = -3; Plugin.localPlayer.DamagePlayer(100, true, true, (CauseOfDeath)7, 0, false, shotgun.shotgunRayPoint.forward * 30f); goto IL_02c2; case 4: { <>1__state = -3; <>m__Finally1(); return false; } IL_02c2: <>2__current = (object)new WaitForSeconds(1f); <>1__state = 4; return true; IL_0203: if (<elapsedTime>5__2 < duration) { <t>5__7 = <elapsedTime>5__2 / duration; <_rotOffset>5__8 = Vector3.Lerp(<startRot>5__3, <endRot>5__4, <t>5__7); <_posOffset>5__9 = Vector3.Lerp(<startPos>5__5, <endPos>5__6, <t>5__7); HallucinationManager.overrideShotgunsRotOffsets[(GrabbableObject)(object)shotgun] = <_rotOffset>5__8; HallucinationManager.overrideShotgunsPosOffsets[(GrabbableObject)(object)shotgun] = <_posOffset>5__9; <elapsedTime>5__2 += Time.deltaTime; <>2__current = null; <>1__state = 1; return true; } <>2__current = (object)new WaitForSeconds(3f); <>1__state = 2; return true; } } catch { //try-fault ((IDisposable)this).Dispose(); throw; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } private void <>m__Finally1() { <>1__state = -1; HallucinationManager.overrideShotguns.Remove((GrabbableObject)(object)shotgun); if ((Object)(object)<player>5__1 == (Object)(object)Plugin.localPlayer) { Plugin.localPlayer.activatingItem = false; Utils.FreezePlayer(Plugin.localPlayer, value: false); } } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static ManualLogSource logger = Plugin.LoggerInstance; public GameObject SCP513_1Prefab; public static bool spawningBellMan; public static NetworkHandlerHeavyItemSCPs? Instance { get; private set; } public override void OnNetworkSpawn() { if (((NetworkBehaviour)this).IsServer && (Object)(object)Instance != (Object)null && (Object)(object)Instance != (Object)(object)this) { ((Component)Instance).gameObject.GetComponent<NetworkObject>().Despawn(true); } ((Object)this).hideFlags = (HideFlags)61; Instance = this; logger.LogDebug((object)"NetworkHandlerHeavyItemSCPs spawned"); ((NetworkBehaviour)this).OnNetworkSpawn(); } public override void OnNetworkDespawn() { ((NetworkBehaviour)this).OnNetworkDespawn(); if ((Object)(object)Instance == (Object)(object)this) { Instance = null; } } public void Update() { if (Plugin.configEnableSCP513.Value) { DoBellmanStuff(); } } private void DoBellmanStuff() { if (SCP513Behavior.localPlayerHaunted) { if (Plugin.localPlayer.isPlayerDead || StartOfRound.Instance.firingPlayersCutsceneRunning) { logger.LogDebug((object)"This player is no longer haunted"); SCP513Behavior.localPlayerHaunted = false; } else if ((Object)(object)SCP513_1AI.Instance != (Object)null) { spawningBellMan = false; } else if (!spawningBellMan && !StartOfRound.Instance.shipIsLeaving && !StartOfRound.Instance.inShipPhase && Plugin.localPlayer.isPlayerControlled && !Utils.isOnCompanyMoon && Utils.allAINodes.Length != 0) { Instance?.SpawnBellManOnLocalClient(); } } } public void SpawnBellManOnLocalClient() { //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) if (!((Object)(object)SCP513_1AI.Instance != (Object)null)) { logger.LogDebug((object)"Spawning bellman"); spawningBellMan = true; Object.Instantiate<GameObject>(SCP513_1Prefab, Vector3.zero, Quaternion.identity); } } [ServerRpc(RequireOwnership = false)] public void SpawnGhostGirlServerRpc(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) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2349494745u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientId); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2349494745u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost)) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; if (Plugin.IsServerOrHost && !((Object)(object)Object.FindObjectsOfType<DressGirlAI>().FirstOrDefault() != (Object)null)) { List<SpawnableEnemyWithRarity> enemies = Utils.GetEnemies(); SpawnableEnemyWithRarity val3 = enemies.Where((SpawnableEnemyWithRarity x) => ((Object)x.enemyType).name == "DressGirl").FirstOrDefault(); if (val3 == null) { logger.LogError((object)"Ghost girl could not be found"); } else { RoundManager.Instance.SpawnEnemyGameObject(Vector3.zero, 0f, -1, val3.enemyType); } } } [ServerRpc] public void MimicEnemyServerRpc(ulong clientId, string enemyName) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Invalid comparison between Unknown and I4 //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: 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_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Invalid comparison between Unknown and I4 //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1209691276u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientId); bool flag = enemyName != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(enemyName, false); } ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1209691276u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost)) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; string enemyName2 = enemyName; if (!Plugin.IsServerOrHost) { return; } logger.LogDebug((object)("Attempting spawn enemy: " + enemyName2)); EnemyType enemyType = (from x in Utils.GetEnemies() where ((Object)x.enemyType).name == enemyName2 select x).FirstOrDefault().enemyType; if ((Object)(object)enemyType == (Object)null) { logger.LogError((object)"Couldnt find enemy to spawn in MimicEnemyServerRpc"); return; } EnemyVent closestVentToPosition = Utils.GetClosestVentToPosition(((Component)Plugin.localPlayer).transform.position); if ((Object)(object)closestVentToPosition == (Object)null) { logger.LogError((object)"Couldnt find vent for mimic enemy event."); return; } NetworkObject val3 = NetworkObjectReference.op_Implicit(RoundManager.Instance.SpawnEnemyGameObject(closestVentToPosition.floorNode.position, 0f, -1, enemyType)); EnemyAI val4 = default(EnemyAI); if (!((Component)val3).TryGetComponent<EnemyAI>(ref val4)) { logger.LogError((object)"Couldnt get netObj in MimicEnemyClientRpc"); return; } val4.ChangeOwnershipOfEnemy(clientId); MimicEnemyClientRpc(clientId, NetworkObjectReference.op_Implicit(((NetworkBehaviour)val4).NetworkObject)); } [ClientRpc] public void MimicEnemyClientRpc(ulong clientId, NetworkObjectReference netRef) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: 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_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2443461684u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clientId); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref netRef, default(ForNetworkSerializable)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2443461684u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; NetworkObject val3 = default(NetworkObject); if (!((NetworkObjectReference)(ref netRef)).TryGet(ref val3, (NetworkManager)null)) { logger.LogError((object)"Couldnt get netRef in MimicEnemyClientRpc"); return; } EnemyAI val4 = default(EnemyAI); if (!((Component)val3).TryGetComponent<EnemyAI>(ref val4)) { logger.LogError((object)"Couldnt get netObj in MimicEnemyClientRpc"); return; } Collider[] componentsInChildren = ((Component)((Component)val4).transform.root).gameObject.GetComponentsInChildren<Collider>(); foreach (Collider val5 in componentsInChildren) { val5.enabled = false; } if (Plugin.localPlayer.actualClientId != clientId) { val4.EnableEnemyMesh(false, true); ((Behaviour)val4.creatureSFX).enabled = false; ((Behaviour)val4.creatureVoice).enabled = false; } else if (!((Object)(object)SCP513_1AI.Instance == (Object)null)) { SCP513_1AI.Instance.mimicEnemy = val4; } } [ServerRpc(RequireOwnership = false)] public void ShotgunSuicideServerRpc(NetworkObjectReference netRef, float duration) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: 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_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3147507412u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref netRef, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref duration, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3147507412u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; if (Plugin.IsServerOrHost) { ShotgunSuicideClientRpc(netRef, duration); } } } [ClientRpc] public void ShotgunSuicideClientRpc(NetworkObjectReference netRef, float duration) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: 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_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009e: 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_00f7: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1168501845u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref netRef, default(ForNetworkSerializable)); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref duration, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1168501845u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; NetworkObject val3 = default(NetworkObject); ShotgunItem shotgun2 = default(ShotgunItem); if (!((NetworkObjectReference)(ref netRef)).TryGet(ref val3, (NetworkManager)null)) { logger.LogError((object)"Cant get netObj"); } else if (!((Component)val3).TryGetComponent<ShotgunItem>(ref shotgun2)) { logger.LogError((object)"Cant get ShotgunItem"); } else { ((MonoBehaviour)this).StartCoroutine(RotateShotgunCoroutine(shotgun2, duration)); } } [IteratorStateMachine(typeof(<<ShotgunSuicideClientRpc>g__RotateShotgunCoroutine|16_0>d))] static IEnumerator RotateShotgunCoroutine(ShotgunItem shotgun, float duration) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <<ShotgunSuicideClientRpc>g__RotateShotgunCoroutine|16_0>d(0) { shotgun = shotgun, duration = duration }; } } protected override void __initializeVariables() { ((NetworkBehaviour)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 //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(2349494745u, new RpcReceiveHandler(__rpc_handler_2349494745), "SpawnGhostGirlServerRpc"); ((NetworkBehaviour)this).__registerRpc(1209691276u, new RpcReceiveHandler(__rpc_handler_1209691276), "MimicEnemyServerRpc"); ((NetworkBehaviour)this).__registerRpc(2443461684u, new RpcReceiveHandler(__rpc_handler_2443461684), "MimicEnemyClientRpc"); ((NetworkBehaviour)this).__registerRpc(3147507412u, new RpcReceiveHandler(__rpc_handler_3147507412), "ShotgunSuicideServerRpc"); ((NetworkBehaviour)this).__registerRpc(1168501845u, new RpcReceiveHandler(__rpc_handler_1168501845), "ShotgunSuicideClientRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_2349494745(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 clientId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref clientId); target.__rpc_exec_stage = (__RpcExecStage)1; ((NetworkHandlerHeavyItemSCPs)(object)target).SpawnGhostGirlServerRpc(clientId); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1209691276(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0029: 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_0089: 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) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Invalid comparison between Unknown and I4 //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) NetworkManager networkManager = target.NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId) { if ((int)networkManager.LogLevel <= 1) { Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!"); } return; } ulong clientId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref clientId); bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); string enemyName = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref enemyName, false); } target.__rpc_exec_stage = (__RpcExecStage)1; ((NetworkHandlerHeavyItemSCPs)(object)target).MimicEnemyServerRpc(clientId, enemyName); target.__rpc_exec_stage = (__RpcExecStage)0; } private static void __rpc_handler_2443461684(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0042: 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_0060: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong clientId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref clientId); NetworkObjectReference netRef = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref netRef, default(ForNetworkSerializable)); target.__rpc_exec_stage = (__RpcExecStage)1; ((NetworkHandlerHeavyItemSCPs)(object)target).MimicEnemyClientRpc(clientId, netRef); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3147507412(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: 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) //IL_004a: 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_005f: 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_007d: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference netRef = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref netRef, default(ForNetworkSerializable)); float duration = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref duration, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((NetworkHandlerHeavyItemSCPs)(object)target).ShotgunSuicideServerRpc(netRef, duration); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1168501845(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: 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) //IL_004a: 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_005f: 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_007d: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference netRef = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref netRef, default(ForNetworkSerializable)); float duration = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref duration, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((NetworkHandlerHeavyItemSCPs)(object)target).ShotgunSuicideClientRpc(netRef, duration); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string? __getTypeName() { return "NetworkHandlerHeavyItemSCPs"; } } [HarmonyPatch] public class NetworkObjectManager { private static ManualLogSource logger = Plugin.LoggerInstance; public static GameObject? networkPrefab; [HarmonyPostfix] [HarmonyPatch(typeof(GameNetworkManager), "Start")] public static void Init() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown if (!((Object)(object)networkPrefab != (Object)null)) { if ((Object)(object)Plugin.ModAssets == (Object)null) { logger.LogError((object)"Couldnt get ModAssets to create network handler"); return; } networkPrefab = (GameObject)Plugin.ModAssets.LoadAsset("Assets/ModAssets/NetworkHandlerHeavyItemSCPs.prefab"); NetworkManager.Singleton.AddNetworkPrefab(networkPrefab); } } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "Awake")] private static void SpawnNetworkHandler() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) logger.LogDebug((object)"SpawnNetworkHandler"); if (Plugin.IsServerOrHost) { GameObject val = Object.Instantiate<GameObject>(networkPrefab, Vector3.zero, Quaternion.identity); val.GetComponent<NetworkObject>().Spawn(false); logger.LogDebug((object)"Spawned NetworkHandlerHeavyItemSCPs"); } } } [BepInPlugin("ProjectSCP.HeavyItemSCPs", "HeavyItemSCPs", "1.4.4")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Plugin : BaseUnityPlugin { public static Plugin PluginInstance; public static ManualLogSource LoggerInstance; private readonly Harmony harmony = new Harmony("ProjectSCP.HeavyItemSCPs"); public static AssetBundle? ModAssets; public static ConfigEntry<bool> configEnableSCP427; public static ConfigEntry<int> config427MinValue; public static ConfigEntry<int> config427MaxValue; public static ConfigEntry<string> config427LevelRarities; public static ConfigEntry<string> config427CustomLevelRarities; public static ConfigEntry<float> configTimeToTransform; public static ConfigEntry<int> configHealthPerSecondOpen; public static ConfigEntry<bool> config427_500Compatibility; public static ConfigEntry<string> config4271LevelRarities; public static ConfigEntry<string> config4271CustomLevelRarities; public static ConfigEntry<bool> configEnableSCP178; public static ConfigEntry<int> config178MinValue; public static ConfigEntry<int> config178MaxValue; public static ConfigEntry<int> config178PartMinValue; public static ConfigEntry<int> config178PartMaxValue; public static ConfigEntry<string> config178LevelRarities; public static ConfigEntry<string> config178CustomLevelRarities; public static ConfigEntry<string> config178PartLevelRarities; public static ConfigEntry<string> config178PartCustomLevelRarities; public static ConfigEntry<float> config178LensDistortion; public static ConfigEntry<float> config178ChromaticAberration; public static ConfigEntry<string> config178ColorTint; public static ConfigEntry<int> config1781MinCount; public static ConfigEntry<int> config1781MaxCount; public static ConfigEntry<bool> configEnableSCP323; public static ConfigEntry<int> config323MinValue; public static ConfigEntry<int> config323MaxValue; public static ConfigEntry<string> config323LevelRarities; public static ConfigEntry<string> config323CustomLevelRarities; public static ConfigEntry<bool> config323ShowInsanity; public static ConfigEntry<string> config3231LevelRarities; public static ConfigEntry<string> config3231CustomLevelRarities; public static ConfigEntry<bool> configEnableSCP513; public static ConfigEntry<int> config513MinValue; public static ConfigEntry<int> config513MaxValue; public static ConfigEntry<string> config513LevelRarities; public static ConfigEntry<string> config513CustomLevelRarities; public static ConfigEntry<bool> configUnhauntedOnBellDespawn; public static PlayerControllerB localPlayer => StartOfRound.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).FirstOrDefault(); } private void Awake() { if ((Object)(object)PluginInstance == (Object)null) { PluginInstance = this; } LoggerInstance = ((BaseUnityPlugin)PluginInstance).Logger; harmony.PatchAll(); InitializeNetworkBehaviours(); InitConfigs(); string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); ModAssets = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "heavy_assets")); if ((Object)(object)ModAssets == (Object)null) { ((BaseUnityPlugin)this).Logger.LogError((object)"Failed to load custom assets."); return; } LoggerInstance.LogDebug((object)("Got AssetBundle at: " + Path.Combine(directoryName, "heavy_assets"))); if (configEnableSCP427.Value) { Utils.RegisterItem("Assets/ModAssets/SCP427/SCP427Item.asset", config427LevelRarities.Value, config427CustomLevelRarities.Value, config427MinValue.Value, config427MaxValue.Value); Utils.RegisterEnemy("Assets/ModAssets/SCP427/SCP4271Enemy.asset", "Assets/ModAssets/SCP427/Bestiary/SCP4271TN.asset", "Assets/ModAssets/SCP427/Bestiary/SCP4271TK.asset", config4271LevelRarities.Value, config4271CustomLevelRarities.Value); } if (configEnableSCP178.Value) { Utils.RegisterItem("Assets/ModAssets/SCP178/SCP1781Part_1.asset", config178PartLevelRarities.Value, config178PartCustomLevelRarities.Value, config178PartMinValue.Value, config178PartMaxValue.Value); Utils.RegisterItem("Assets/ModAssets/SCP178/SCP1781Part_2.asset", config178PartLevelRarities.Value, config178PartCustomLevelRarities.Value, config178PartMinValue.Value, config178PartMaxValue.Value); Utils.RegisterItem("Assets/ModAssets/SCP178/SCP1781Part_3.asset", config178PartLevelRarities.Value, config178PartCustomLevelRarities.Value, config178PartMinValue.Value, config178PartMaxValue.Value); Utils.RegisterItem("Assets/ModAssets/SCP178/SCP178Item.asset", config178LevelRarities.Value, config178CustomLevelRarities.Value, config178MinValue.Value, config178MaxValue.Value); Utils.RegisterEnemy("Assets/ModAssets/SCP178/SCP1781Enemy.asset", "Assets/ModAssets/SCP178/Bestiary/SCP1781TN.asset", "Assets/ModAssets/SCP178/Bestiary/SCP1781TK.asset"); SCP1783DVision.Load(); } if (configEnableSCP323.Value) { Utils.RegisterItem("Assets/ModAssets/SCP323/SCP323Item.asset", config323LevelRarities.Value, config323CustomLevelRarities.Value, config323MinValue.Value, config323MaxValue.Value); Utils.RegisterEnemy("Assets/ModAssets/SCP323/SCP323_1Enemy.asset", "Assets/ModAssets/SCP323/Bestiary/SCP323_1TN.asset", "Assets/ModAssets/SCP323/Bestiary/SCP323_1TK.asset", config3231LevelRarities.Value, config3231CustomLevelRarities.Value); } if (configEnableSCP513.Value) { Utils.RegisterItem("Assets/ModAssets/SCP513/SCP513Item.asset", config513LevelRarities.Value, config513CustomLevelRarities.Value, config513MinValue.Value, config513MaxValue.Value); } ((BaseUnityPlugin)this).Logger.LogInfo((object)"ProjectSCP.HeavyItemSCPs v1.4.4 has loaded!"); } private void InitConfigs() { configEnableSCP427 = ((BaseUnityPlugin)this).Config.Bind<bool>("SCP-427", "Enable SCP-427", true, "Whether or not SCP-427 can spawn as scrap."); config427MinValue = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-427", "Minimum value", 100, "The minimum value of SCP-427."); config427MaxValue = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-427", "Maximum value", 300, "The maximum value of SCP-427."); config427LevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-427 Rarities", "Level Rarities", "All: 10, Modded:10", "Rarities for each level. See default for formatting."); config427CustomLevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-427 Rarities", "Custom Level Rarities", "Secret LabsLevel:100", "Rarities for modded levels. Same formatting as level rarities."); configTimeToTransform = ((BaseUnityPlugin)this).Config.Bind<float>("SCP-427", "Time to transform", 60f, "How long a player can hold the necklace before they transform into SCP-427-1. Should be higher that 30. Set to -1 to disable transforming."); configHealthPerSecondOpen = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-427", "Health per second open", 5, "The health gained per second while opening SCP-427."); config427_500Compatibility = ((BaseUnityPlugin)this).Config.Bind<bool>("SCP-427", "SCP-500 compatibility", true, "Whether or not SCP-427 should be compatible with the SCP-500 mod. This will only work if you have the SCP-500 mod installed. If enabled, it will temporarily halt the transformation timer when holding or using SCP-427 when you take SCP-500."); config4271LevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-427-1 Rarities", "Level Rarities", "All: 10, Modded:10", "Rarities for each level. See default for formatting."); config4271CustomLevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-427-1 Rarities", "Custom Level Rarities", "Secret LabsLevel:100", "Rarities for modded levels. Same formatting as level rarities."); configEnableSCP178 = ((BaseUnityPlugin)this).Config.Bind<bool>("SCP-178", "Enable SCP-178", true, "Whether or not SCP-178 can spawn as scrap."); config178MinValue = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-178", "Minimum value", 100, "The minimum value of SCP-178."); config178MaxValue = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-178", "Maximum value", 150, "The maximum value of SCP-178."); config178LevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-178 Rarities", "Level Rarities", "All:10, Modded:10", "Rarities for each level. See default for formatting."); config178CustomLevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-178 Rarities", "Custom Level Rarities", "Secret LabsLevel:100", "Rarities for modded levels. Same formatting as level rarities."); config178PartMinValue = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-178", "Minimum value", 250, "The minimum value of SCP-178 Parts."); config178PartMaxValue = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-178", "Maximum value", 500, "The maximum value of SCP-178 Parts."); config178PartLevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-178 Parts Rarities", "Level Rarities", "All:30, Modded:30", "Rarities for each level. See default for formatting."); config178PartCustomLevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-178 Parts Rarities", "Custom Level Rarities", "Secret LabsLevel:150", "Rarities for modded levels. Same formatting as level rarities."); config178LensDistortion = ((BaseUnityPlugin)this).Config.Bind<float>("SCP-178 3D Effects", "Lens Distortion", -0.2f, "Changes the lens distortion effect of the 3D glasses."); config178ChromaticAberration = ((BaseUnityPlugin)this).Config.Bind<float>("SCP-178 3D Effects", "Chromatic Aberration", 3f, "Changes the chromatic aberration effect of the 3D glasses."); config178ColorTint = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-178 3D Effects", "Color Tint", "500,0,500", "Changes the RGB color tint effect of the 3D glasses."); config1781MinCount = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-1781", "Min Count", 50, "The minimum number of SCP-178-1 instances that can be spawned."); config1781MaxCount = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-1781", "Max Count", 100, "The maximum number of SCP-178-1 instances that can be spawned."); configEnableSCP323 = ((BaseUnityPlugin)this).Config.Bind<bool>("SCP-323", "Enable SCP-323", true, "Whether or not SCP-323 can spawn as scrap."); config323MinValue = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-323", "Minimum value", 100, "The minimum value of SCP-323."); config323MaxValue = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-323", "Maximum value", 150, "The maximum value of SCP-323."); config323LevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-323 Rarities", "Level Rarities", "All: 10, Modded:10", "Rarities for each level. See default for formatting."); config323CustomLevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-323 Rarities", "Custom Level Rarities", "Secret LabsLevel:100", "Rarities for modded levels. Same formatting as level rarities."); config323ShowInsanity = ((BaseUnityPlugin)this).Config.Bind<bool>("SCP-323", "Show insanity", false, "Blur the players vision when they are near SCP-323 based on their insanity."); config3231LevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-323-1 Rarities", "Level Rarities", "All: 10, Modded:10", "Rarities for each level. See default for formatting."); config3231CustomLevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-323-1 Rarities", "Custom Level Rarities", "Secret LabsLevel:100", "Rarities for modded levels. Same formatting as level rarities."); configEnableSCP513 = ((BaseUnityPlugin)this).Config.Bind<bool>("SCP-513", "Enable SCP-513", true, "Whether or not SCP-513 can spawn as scrap."); config513MinValue = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-513", "Minimum value", 150, "The minimum value of SCP-513."); config513MaxValue = ((BaseUnityPlugin)this).Config.Bind<int>("SCP-513", "Maximum value", 300, "The maximum value of SCP-513."); config513LevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-513 Rarities", "Level Rarities", "All: 10, Modded:10", "Rarities for each level. See default for formatting."); config513CustomLevelRarities = ((BaseUnityPlugin)this).Config.Bind<string>("SCP-513 Rarities", "Custom Level Rarities", "Secret LabsLevel:100", "Rarities for modded levels. Same formatting as level rarities."); configUnhauntedOnBellDespawn = ((BaseUnityPlugin)this).Config.Bind<bool>("SCP-513", "Unhaunted on bell despawn", false, "When true, if the bell is despawned or sold to the company, all haunted players will become unhaunted."); } 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); } } } LoggerInstance.LogDebug((object)"Finished initializing network behaviours"); } } [HarmonyPatch] public class TESTING : MonoBehaviour { private static ManualLogSource logger = Plugin.LoggerInstance; public static int setEventRarity = -1; public static int setEventIndex = -1; [HarmonyPostfix] [HarmonyPatch(typeof(HUDManager), "PingScan_performed")] public static void PingScan_performedPostFix() { if (Utils.isBeta && Utils.testing) { HallucinationManager.LogStareArt(); } } [HarmonyPrefix] [HarmonyPatch(typeof(HUDManager), "SubmitChat_performed")] public static void SubmitChat_performedPrefix(HUDManager __instance) { //IL_016f: Unknown result type (might be due to invalid IL or missing references) if (!Utils.isBeta) { return; } string text = __instance.chatTextField.text; string[] array = text.Split(" "); logger.LogDebug((object)text); switch (array[0]) { case "/search": if (!((Object)(object)SCP323_1AI.Instance == (Object)null)) { ((EnemyAI)SCP323_1AI.Instance).StartSearch(((Component)Plugin.localPlayer).transform.position, (AISearchRoutine)null); } break; case "/moving": Utils.DEBUG_disableMoving = !Utils.DEBUG_disableMoving; HUDManager.Instance.DisplayTip("DisableMoving: ", Utils.DEBUG_disableMoving.ToString(), false, false, "LC_Tip1"); break; case "/targetting": Utils.DEBUG_disableTargetting = !Utils.DEBUG_disableTargetting; HUDManager.Instance.DisplayTip("DisableTargetting: ", Utils.DEBUG_disableTargetting.ToString(), false, false, "LC_Tip1"); break; case "/playerThrowing": SCP4271AI.DEBUG_throwingPlayerDisabled = !SCP4271AI.DEBUG_throwingPlayerDisabled; HUDManager.Instance.DisplayTip("ThrowingPlayerDisabled", SCP4271AI.DEBUG_throwingPlayerDisabled.ToString(), false, false, "LC_Tip1"); break; case "/allEvents": HallucinationManager.Instance?.RunAllEvents(int.Parse(array[1])); break; case "/setEvent": setEventRarity = int.Parse(array[1]); setEventIndex = int.Parse(array[2]); break; case "/event": HallucinationManager.Instance?.RunEvent(int.Parse(array[1]), int.Parse(array[2])); break; default: Utils.ChatCommand(array); break; } } } public static class Utils { private static ManualLogSource logger = Plugin.LoggerInstance; public static bool isBeta = false; public static bool trailerMode = false; public static bool testing = false; public static bool DEBUG_disableSpawning = false; public static bool DEBUG_disableTargetting = false; public static bool DEBUG_disableMoving = false; public static bool localPlayerFrozen = false; public static bool inTestRoom => (Object)(object)StartOfRound.Instance?.testRoom != (Object)null; public static bool isOnCompanyMoon { get { StartOfRound instance = StartOfRound.Instance; return instance != null && instance.currentLevel.levelID == 3; } } 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) { 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) { logger.LogDebug((object)val3.surfaceTag); } break; } case "/enemies": { foreach (SpawnableEnemyWithRarity enemy in GetEnemies()) { 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) { logger.LogDebug((object)((Object)val2).name); } break; } case "/dungeon": logger.LogDebug((object)((Object)RoundManager.Instance.dungeonGenerator.Generator.DungeonFlow).name); break; case "/dungeons": { IndoorMapType[] dungeonFlowTypes = RoundManager.Instance.dungeonFlowTypes; foreach (IndoorMapType val in dungeonFlowTypes) { logger.LogDebug((object)((Object)val.dungeonFlow).name); } break; } } } public static void LogChat(string msg) { HUDManager.Instance.AddChatMessage(msg, "Server", -1, false); } public static void RegisterItem(string itemPath, string levelRarities = "", string customLevelRarities = "", int minValue = 0, int maxValue = 0) { Item val = Plugin.ModAssets.LoadAsset<Item>(itemPath); if ((Object)(object)val == (Object)null) { Plugin.LoggerInstance.LogError((object)("Error: Couldn't get prefab from " + itemPath)); return; } Plugin.LoggerInstance.LogDebug((object)("Got " + ((Object)val).name + " prefab")); val.minValue = minValue; val.maxValue = maxValue; NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab); Utilities.FixMixerGroups(val.spawnPrefab); Items.RegisterScrap(val, GetLevelRarities(levelRarities), GetCustomLevelRarities(customLevelRarities)); } public static void RegisterEnemy(string enemyPath, string tnPath, string tkPath, string levelRarities = "", string customLevelRarities = "") { EnemyType val = Plugin.ModAssets.LoadAsset<EnemyType>(enemyPath); if ((Object)(object)val == (Object)null) { Plugin.LoggerInstance.LogError((object)("Error: Couldn't get prefab from " + enemyPath)); return; } Plugin.LoggerInstance.LogDebug((object)("Got " + ((Object)val).name + " prefab")); TerminalNode val2 = Plugin.ModAssets.LoadAsset<TerminalNode>(tnPath); TerminalKeyword val3 = Plugin.ModAssets.LoadAsset<TerminalKeyword>(tkPath); NetworkPrefabs.RegisterNetworkPrefab(val.enemyPrefab); Enemies.RegisterEnemy(val, GetLevelRarities(levelRarities), GetCustomLevelRarities(customLevelRarities), val2, val3); } public static Dictionary<LevelTypes, int>? GetLevelRarities(string? levelsString) { //IL_0091: Unknown result type (might be due to invalid IL or missing references) try { Dictionary<LevelTypes, int> dictionary = new Dictionary<LevelTypes, int>(); if (levelsString != null && levelsString != "") { string[] array = levelsString.Split(','); string[] array2 = array; foreach (string text in array2) { string[] array3 = text.Split(':'); if (array3.Length == 2) { string text2 = array3[0].Trim(); string text3 = array3[1].Trim(); if (Enum.TryParse<LevelTypes>(text2, out LevelTypes result) && int.TryParse(text3, out var result2)) { dictionary.Add(result, result2); } else { Plugin.LoggerInstance.LogError((object)("Error: Invalid level rarity: " + text2 + ":" + text3)); } } } } return dictionary; } catch (Exception arg) { Plugin.LoggerInstance.LogError((object)$"Error: {arg}"); return null; } } public static Dictionary<string, int>? GetCustomLevelRarities(string? levelsString) { try { Dictionary<string, int> dictionary = new Dictionary<string, int>(); if (levelsString != null) { string[] array = levelsString.Split(','); string[] array2 = array; foreach (string text in array2) { string[] array3 = text.Split(':'); if (array3.Length == 2) { string text2 = array3[0].Trim(); string text3 = array3[1].Trim(); if (int.TryParse(text3, out var result)) { dictionary.Add(text2, result); } else { Plugin.LoggerInstance.LogError((object)("Error: Invalid level rarity: " + text2 + ":" + text3)); } } } } return dictionary; } catch (Exception arg) { Plugin.LoggerInstance.LogError((object)$"Error: {arg}"); return null; } } 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.LoggerInstance.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); } 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 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 GameObject? GetClosestGameObjectToPosition(this List<GameObject> list, Vector3 position) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) GameObject result = null; float num = float.PositiveInfinity; foreach (GameObject item in list) { if (!((Object)(object)item == (Object)null)) { float num2 = Vector3.Distance(position, item.transform.position); 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 GameObject? GetRandomNode(bool outside) { logger.LogDebug((object)"Choosing random node..."); GameObject[] array = (outside ? outsideAINodes : insideAINodes); if (array.Length == 0) { return null; } int num = Random.Range(0, array.Length); return array[num]; } 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) { 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; } } 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) { 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 { 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(); } } [HarmonyPatch] public class UtilsPatches { private static ManualLogSource logger = Plugin.LoggerInstance; [HarmonyPrefix] [HarmonyPatch(typeof(RoundManager), "SpawnInsideEnemiesFromVentsIfReady")] public static bool SpawnInsideEnemiesFromVentsIfReadyPrefix() { if (Utils.DEBUG_disableSpawning) { return false; } return true; } [HarmonyPrefix] [HarmonyPatch(typeof(RoundManager), "SpawnDaytimeEnemiesOutside")] public static bool SpawnDaytimeEnemiesOutsidePrefix() { if (Utils.DEBUG_disableSpawning) { return false; } return true; } [HarmonyPrefix] [HarmonyPatch(typeof(RoundManager), "SpawnEnemiesOutside")] public static bool SpawnEnemiesOutsidePrefix() { if (Utils.DEBUG_disableSpawning) { return false; } return true; } } public static class MyPluginInfo { public const string PLUGIN_GUID = "ProjectSCP.HeavyItemSCPs"; public const string PLUGIN_NAME = "HeavyItemSCPs"; public const string PLUGIN_VERSION = "1.4.4"; } } namespace HeavyItemSCPs.Items.SCP513 { public class HallucinationManager : MonoBehaviour { private delegate void MethodDelegate(); [CompilerGenerated] private sealed class <<BlockDoor>g__BlockDoorCoroutine|34_0>d : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; private float <doorDistance>5__1; private float <blockPosOffset>5__2; private float <disappearDistance>5__3; private float <disappearTime>5__4; private DoorLock[] <doorLocks>5__5; private int <index>5__6; private DoorLock <doorLock>5__7; private GameObject <steelDoorObj>5__8; private Vector3 <blockPos>5__9; private float <elapsedTime>5__10; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <<BlockDoor>g__BlockDoorCoroutine|34_0>d(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <doorLocks>5__5 = null; <doorLock>5__7 = null; <steelDoorObj>5__8 = null; <>1__state = -2; } private bool MoveNext() { //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_022f: 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_00b2: Expected O, but got Unknown //IL_0153: 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_0163: 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_016f: 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_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <doorDistance>5__1 = 10f; <blockPosOffset>5__2 = 1f; <disappearDistance>5__3 = 15f; <disappearTime>5__4 = 15f; <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; <doorLocks>5__5 = GetDoorLocksNearbyPosition(((Component)Plugin.localPlayer).transform.position, <doorDistance>5__1).ToArray(); goto IL_00e8; case 2: <>1__state = -1; <doorLocks>5__5 = GetDoorLocksNearbyPosition(((Component)Plugin.localPlayer).transform.position, <doorDistance>5__1).ToArray(); goto IL_00e8; case 3: { <>1__state = -1; <elapsedTime>5__10 += 0.2f; if (Vector3.Distance(((Component)SCP513_1AI.Instance).transform.position, ((Component)Plugin.localPlayer).transform.position) > <disappearDistance>5__3 || SCP513_1AI.Instance.currentBehaviourState != SCP513_1AI.State.Manifesting) { break; } goto IL_025c; } IL_00e8: if (<doorLocks>5__5.Length == 0) { <>2__current = (object)new WaitForSeconds(1f); <>1__state = 2; return true; } <index>5__6 = Random.Range(0, <doorLocks>5__5.Length); <doorLock>5__7 = <doorLocks>5__5[<index>5__6]; <steelDoorObj>5__8 = ((Component)((Component)((Component)<doorLock>5__7).transform.parent).transform.parent).gameObject; <blockPos>5__9 = RoundManager.Instance.GetNavMeshPosition(<steelDoorObj>5__8.transform.position + Vector3.forward * <blockPosOffset>5__2, default(NavMeshHit), 5f, -1); SCP513_1AI.Instance.SwitchToBehavior(SCP513_1AI.State.Manifesting); SCP513_1AI.Instance.Teleport(<blockPos>5__9); SCP513_1AI.Instance.SetDestinationToPosition(<blockPos>5__9); SCP513_1AI.Instance.creatureAnimator.SetBool("armsCrossed", true); SCP513_1AI.Instance.facePlayer = true; <elapsedTime>5__10 = 0f; goto IL_025c; IL_025c: if (<elapsedTime>5__10 < <disappearTime>5__4) { <>2__current = (object)new WaitForSeconds(0.2f); <>1__state = 3; return true; } break; } 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 <<ChasePlayer>g__ChaseCoroutine|42_0>d : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public HallucinationManager <>4__this; private Transform <teleportPos>5__1; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <<ChasePlayer>g__ChaseCoroutine|42_0>d(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <teleportPos>5__1 = null; <>1__state = -2; } private bool MoveNext() { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0098: 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_00ed: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; <teleportPos>5__1 = SCP513_1AI.Instance.ChooseFarthestNodeFromPosition(((Component)Plugin.localPlayer).transform.position); if ((Object)(object)<teleportPos>5__1 == (Object)null) { logger.LogError((object)"Couldnt find farthest node from position"); return false; } SCP513_1AI.Instance.Teleport(<teleportPos>5__1.position); SCP513_1AI.Instance.agent.speed = 10f; SCP513_1AI.Instance.creatureAnimator.SetBool("armsCrossed", false); SCP513_1AI.Instance.SwitchToBehavior(SCP513_1AI.State.Chasing); break; case 2: <>1__state = -1; <>4__this.FlickerLights(); break; } if (SCP513_1AI.Instance.currentBehaviourState == SCP513_1AI.State.Chasing && Plugin.localPlayer.isInsideFactory != SCP513_1AI.Instance.isOutside) { <>2__current = (object)new WaitForSeconds(2.5f); <>1__state = 2; return true; } 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 <<FarStare>g__StareCoroutine|32_0>d : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public HallucinationManager <>4__this; private float <stareTime>5__1; private Transform <pos>5__2; private float <elapsedTime>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <<FarStare>g__StareCoroutine|32_0>d(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <pos>5__2 = null; <>1__state = -2; } private bool MoveNext() { //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Expected O, but got Unknown //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Expected O, but got Unknown //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <stareTime>5__1 = 15f; <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; <pos>5__2 = SCP513_1AI.Instance.TryFindingHauntPosition(); goto IL_00a3; case 2: <>1__state = -1; <pos>5__2 = SCP513_1AI.Instance.TryFindingHauntPosition(); goto IL_00a3; case 3: <>1__state = -1; <elapsedTime>5__3 += 0.2f; if (SCP513_1AI.Instance.playerHasLOS) { <>2__current = (object)new WaitForSeconds(2.5f); <>1__state = 4; return true; } break; case 4: { <>1__state = -1; <>4__this.FlickerLights(); return false; } IL_00a3: if ((Object)(object)<pos>5__2 == (Object)null) { <>2__current = (object)new WaitForSeconds(0.2f); <>1__state = 2; return true; } if (Random.Range(1, 4) == 1) { LogStareArt(); } SCP513_1AI.Instance.SwitchToBehavior(SCP513_1AI.State.Manifesting); SCP513_1AI.Instance.Teleport(<pos>5__2.position); SCP513_1AI.Instance.facePlayer = true; SCP513_1AI.Instance.creatureAnimator.SetBool("armsCrossed", true); RoundManager.PlayRandomClip(SCP513_1AI.Instance.creatureSFX, SCP513_1AI.Instance.AmbientSFX, true, 1f, 0, 1000); <elapsedTime>5__3 = 0f; break; } if (<elapsedTime>5__3 < <stareTime>5__1) { <>2__current = (object)new WaitForSeconds(0.2f); <>1__state = 3; return true; } 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 <<ForceSuicide>g__ForceSuicideCoroutine|47_0>d : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public bool hasShotgun; public bool hasMask; private int <itemSlotIndex>5__1; private ShotgunItem <shotgun>5__2; private GrabbableObject[] <>s__3; private int <>s__4; private GrabbableObject <slot>5__5; private HauntedMaskItem <mask>5__6; private GrabbableObject[] <>s__7; private int <>s__8; private GrabbableObject <slot>5__9; private KnifeItem <knife>5__10; private float <elapsedTime>5__11; private GrabbableObject[] <>s__12; private int <>s__13; private GrabbableObject <slot>5__14; private Transform <camTransform>5__15; private Vector3 <currentAngles>5__16; private float <targetX>5__17; private float <smoothedX>5__18; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <<ForceSuicide>g__ForceSuicideCoroutine|47_0>d(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <shotgun>5__2 = null; <>s__3 = null; <slot>5__5 = null; <mask>5__6 = null; <>s__7 = null; <slot>5__9 = null; <knife>5__10 = null; <>s__12 = null; <slot>5__14 = null; <camTransform>5__15 = null; <>1__state = -2; } private bool MoveNext() { //IL_0381: Unknown result type (might be due to invalid IL or missing references) //IL_038b: Expected O, but got Unknown //IL_051d: Unknown result type (might be due to invalid IL or missing references) //IL_0522: Unknown result type (might be due to invalid IL or missing references) //IL_0575: Unknown result type (might be due to invalid IL or missing references) //IL_05e6: Unknown result type (might be due to invalid IL or missing references) //IL_05ec: Unknown result type (might be due to invalid IL or missing references) //IL_05bd: Unknown result type (might be due to invalid IL or missing references) //IL_05c7: Expected O, but got Unknown //IL_033e: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Expected O, but got Unknown //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Expected O, but got Unknown //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_0435: Unknown result type (might be due to invalid IL or missing references) //IL_043f: Expected O, but got Unknown //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Expected O, but got Unknown //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; <itemSlotIndex>5__1 = 0; if (hasShotgun) { Utils.FreezePlayer(Plugin.localPlayer, value: true); Plugin.localPlayer.activatingItem = true; <shotgun>5__2 = null; <>s__3 = Plugin.localPlayer.ItemSlots; for (<>s__4 = 0; <>s__4 < <>s__3.Length; <>s__4++) { <slot>5__5 = <>s__3[<>s__4]; if (!((Object)(object)<slot>5__5 == (Object)null)) { if (((Object)<slot>5__5.itemProperties).name == "Shotgun") { <shotgun>5__2 = (ShotgunItem)<slot>5__5; <itemSlotIndex>5__1 = MiscHelpers.IndexOf<GrabbableObject>((IEnumerable<GrabbableObject>)Plugin.localPlayer.ItemSlots, (GrabbableObject)(object)<shotgun>5__2); } <slot>5__5 = null; } } <>s__3 = null; if ((Object)(object)<shotgun>5__2 == (Object)null) { logger.LogError((object)"Couldnt find shotgun"); return false; } Plugin.localPlayer.SwitchToItemSlot(<itemSlotIndex>5__1, (GrabbableObject)(object)<shotgun>5__2); NetworkHandlerHeavyItemSCPs.Instance?.ShotgunSuicideServerRpc(NetworkObjectReference.op_Implicit(((NetworkBehaviour)<shotgun>5__2).NetworkObject), 5f); <>2__current = (object)new WaitForSeconds(10f); <>1__state = 2; return true; } if (hasMask) { Utils.FreezePlayer(Plugin.localPlayer, value: true); Plugin.localPlayer.activatingItem = true; <mask>5__6 = null; <>s__7 = Plugin.localPlayer.ItemSlots; for (<>s__8 = 0; <>s__8 < <>s__7.Length; <>s__8++) { <slot