using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using Microsoft.CodeAnalysis; using Sniper1_1.SnipersScripts.NetcodePatcher; using SnipersScripts.Behaviors; using SnipersScripts.Editor; using SnipersScripts.Patches; using Unity.Netcode; using UnityEngine; using UnityEngine.Events; using UnityEngine.SceneManagement; using UnityEngine.Video; [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("DunGen")] [assembly: IgnoresAccessChecksTo("DunGen.Integration.ASPP")] [assembly: IgnoresAccessChecksTo("DunGen.Integration.UnityNav")] [assembly: IgnoresAccessChecksTo("EasyTextEffects")] [assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")] [assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")] [assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")] [assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")] [assembly: IgnoresAccessChecksTo("Unity.Burst")] [assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")] [assembly: IgnoresAccessChecksTo("Unity.Collections")] [assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem")] [assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")] [assembly: IgnoresAccessChecksTo("Unity.Jobs")] [assembly: IgnoresAccessChecksTo("Unity.Mathematics")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")] [assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")] [assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")] [assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")] [assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Components")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")] [assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")] [assembly: IgnoresAccessChecksTo("Unity.Services.QoS")] [assembly: IgnoresAccessChecksTo("Unity.Services.Relay")] [assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")] [assembly: IgnoresAccessChecksTo("Unity.Timeline")] [assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")] [assembly: IgnoresAccessChecksTo("Unity.XR.CoreUtils")] [assembly: IgnoresAccessChecksTo("Unity.XR.Management")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.ConformanceAutomation")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.MetaQuestSupport")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.MockRuntime")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.OculusQuestSupport")] [assembly: IgnoresAccessChecksTo("Unity.XR.OpenXR.Features.RuntimeDebugger")] [assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")] [assembly: IgnoresAccessChecksTo("UnityEngine.SpatialTracking")] [assembly: IgnoresAccessChecksTo("UnityEngine.UI")] [assembly: IgnoresAccessChecksTo("UnityEngine.XR.LegacyInputHelpers")] [assembly: AssemblyCompany("Sniper1_1.SnipersScripts")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+bcf9ebc8d0ff6c1bf9cc7ef7002670d989c7406e")] [assembly: AssemblyProduct("SnipersScripts")] [assembly: AssemblyTitle("Sniper1_1.SnipersScripts")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } [HarmonyPatch(typeof(NetworkManager))] internal static class NetworkPrefabPatch1 { private static readonly string MOD_GUID = "Sniper1_1.SnipersScripts"; [HarmonyPostfix] [HarmonyPatch("SetSingleton")] private static void RegisterPrefab() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(MOD_GUID + " Prefab"); ((Object)val).hideFlags = (HideFlags)(((Object)val).hideFlags | 0x3D); Object.DontDestroyOnLoad((Object)(object)val); NetworkObject val2 = val.AddComponent(); val2.GlobalObjectIdHash = GetHash(MOD_GUID); NetworkManager.Singleton.PrefabHandler.AddNetworkPrefab(val); static uint GetHash(string value) { return value?.Aggregate(17u, (uint current, char c) => (current * 31) ^ c) ?? 0; } } } namespace SnipersScripts { [BepInPlugin("Sniper1_1.SnipersScripts", "SnipersScripts", "1.0.0")] public class SnipersScripts : BaseUnityPlugin { public static SnipersScripts Instance { get; private set; } internal static ManualLogSource Logger { get; private set; } internal static Harmony? Harmony { get; set; } private void Awake() { Logger = ((BaseUnityPlugin)this).Logger; Instance = this; NetcodePatcher(); Patch(); Logger.LogInfo((object)"Sniper1_1.SnipersScripts v1.0.0 has loaded!"); } internal static void Patch() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (Harmony == null) { Harmony = new Harmony("Sniper1_1.SnipersScripts"); } Logger.LogDebug((object)"Patching..."); Harmony.PatchAll(); Logger.LogDebug((object)"Finished patching!"); } internal static void Unpatch() { Logger.LogDebug((object)"Unpatching..."); Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } Logger.LogDebug((object)"Finished unpatching!"); } private void NetcodePatcher() { Type[] types = Assembly.GetExecutingAssembly().GetTypes(); Type[] array = types; foreach (Type type in array) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array2 = methods; foreach (MethodInfo methodInfo in array2) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } } } public static class MyPluginInfo { public const string PLUGIN_GUID = "Sniper1_1.SnipersScripts"; public const string PLUGIN_NAME = "SnipersScripts"; public const string PLUGIN_VERSION = "1.0.0"; } } namespace SnipersScripts.Patches { [HarmonyPatch] internal class EntranceTeleportPatches { [HarmonyPostfix] [HarmonyPatch(typeof(RoundManager), "FinishGeneratingNewLevelClientRpc")] private static void CacheEntranceTeleports() { foreach (EntranceTeleportLock activeLocker in EntranceTeleportLock.ActiveLockers) { activeLocker.teleports = Object.FindObjectsOfType(false).ToList(); } } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "EndOfGame")] private static void ClearEntranceTeleportsCache() { foreach (EntranceTeleportLock activeLocker in EntranceTeleportLock.ActiveLockers) { activeLocker.teleports?.Clear(); } } [HarmonyPostfix] [HarmonyPatch(typeof(EntranceTeleport), "TeleportPlayer")] private static void UnlockLockedDoor(EntranceTeleport __instance) { if (__instance.exitScript.triggerScript.interactable) { return; } foreach (EntranceTeleportLock activeLocker in EntranceTeleportLock.ActiveLockers) { if (__instance.exitScript.isEntranceToBuilding) { activeLocker.UnlockIndividualOutside(__instance); } else if (!__instance.exitScript.isEntranceToBuilding) { activeLocker.UnlockIndividualInside(__instance); } } } } [HarmonyPatch] public class ItemDropDistancePatch { public static float CustomRaycastDistance = 80f; public static readonly float VanillaRaycastDistance = 80f; [HarmonyTargetMethods] private static IEnumerable TargetMethods() { yield return AccessTools.Method(typeof(GrabbableObject), "GetItemFloorPosition", (Type[])null, (Type[])null); yield return AccessTools.Method(typeof(GrabbableObject), "GetPhysicsRegionOfDroppedObject", (Type[])null, (Type[])null); yield return AccessTools.Method(typeof(GrabbableObject), "GetPhysicsRegionOfDroppedObjectSynced", (Type[])null, (Type[])null); } [HarmonyTranspiler] private static IEnumerable ChangeDropDistanceTranspiler(IEnumerable instructions, MethodBase original) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Expected O, but got Unknown //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Expected O, but got Unknown CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null); CodeMatch val2 = new CodeMatch((OpCode?)OpCodes.Ldc_R4, (object)VanillaRaycastDistance, (string)null); FieldInfo fieldInfo = AccessTools.Field(typeof(ItemDropDistancePatch), "CustomRaycastDistance"); val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1] { val2 }); while (val.IsValid) { val.SetInstructionAndAdvance(new CodeInstruction(OpCodes.Ldsfld, (object)fieldInfo)); SnipersScripts.Logger.LogDebug((object)"Patched raycast distance."); val.MatchForward(false, (CodeMatch[])(object)new CodeMatch[1] { val2 }); } return val.InstructionEnumeration(); } } [HarmonyPatch(typeof(PlayerControllerB))] public class PlayerPatches { [HarmonyPostfix] [HarmonyPatch(typeof(PlayerControllerB), "Update")] private static void GetLocalPlayer(PlayerControllerB __instance) { if (!((Object)(object)StartOfRound.Instance == (Object)null) && !((Object)(object)__instance != (Object)(object)StartOfRound.Instance.localPlayerController)) { TrackPlayerInShip(__instance); } } private static void TrackPlayerInShip(PlayerControllerB player) { PlayerInShipDetector[] array = PlayerInShipDetector.ActiveDetectors.ToArray(); foreach (PlayerInShipDetector playerInShipDetector in array) { playerInShipDetector.UpdatePlayerPosition(player); } } } [HarmonyPatch(typeof(RemoteProp))] internal class RemoteScrapPatch { [HarmonyPostfix] [HarmonyPatch(typeof(RemoteProp), "ItemActivate")] private static void ItemActivate_Postfix(RemoteProp __instance) { RemoteScrapEvents[] array = Object.FindObjectsOfType(); RemoteScrapEvents[] array2 = array; foreach (RemoteScrapEvents remoteScrapEvents in array2) { UnityEvent onRemoteClicked = remoteScrapEvents.onRemoteClicked; if (onRemoteClicked != null) { onRemoteClicked.Invoke(); } } } } [HarmonyPatch] internal class ShipPatches { [HarmonyPrefix] [HarmonyPatch(typeof(StartOfRound), "SetMagnetOn")] private static void MagnetTogglePrefix(bool on) { if (on) { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onMagnetEnable.Invoke(); } } else { foreach (ShipController activeController2 in ShipController.ActiveControllers) { activeController2.onMagnetDisable.Invoke(); } } foreach (ShipController activeController3 in ShipController.ActiveControllers) { activeController3.onMagnetToggle.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "EndOfGame")] private static void ShipEnterOrbit() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onShipEnterOrbit.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "ShipLeave")] private static void ShipAscend() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onShipAscend.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "OnShipLandedMiscEvents")] private static void ShipLanded() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onShipLand.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(RoundManager), "FinishGeneratingNewLevelClientRpc")] private static void ShipDescend() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onShipDescend.Invoke(); } } [HarmonyPrefix] [HarmonyPatch(typeof(HUDManager), "ReadOutDialogue")] private static void StartShipMessage() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onShipMessageStart.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(HUDManager), "ReadOutDialogue")] private static void EndShipMessage(ref IEnumerator __result) { __result = WaitForEnd(__result, delegate { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onShipMessageEnd.Invoke(); } }); } [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "DisableShipSpeakerLocalClient")] private static void SpeakerMute() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onSpeakerMute.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(HangarShipDoor), "SetDoorClosed")] private static void DoorClosed() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onDoorClose.Invoke(); activeController.onDoorToggle.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(HangarShipDoor), "SetDoorOpen")] private static void DoorOpened() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onDoorOpen.Invoke(); activeController.onDoorToggle.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(ManualCameraRenderer), "SwitchRadarTargetClientRpc")] private static void SwitchSpectateTarget() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onScreenSpectatorToggle.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(ManualCameraRenderer), "SwitchScreenOn")] private static void CheckScreenPowered(bool on) { if (on) { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onScreenTurnOn.Invoke(); } } else { foreach (ShipController activeController2 in ShipController.ActiveControllers) { activeController2.onScreenTurnOff.Invoke(); } } foreach (ShipController activeController3 in ShipController.ActiveControllers) { activeController3.onScreenPoweredToggle.Invoke(); } } [HarmonyPrefix] [HarmonyPatch(typeof(ShipTeleporter), "beamUpPlayer")] private static void TeleportNormal() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onTeleportStart.Invoke(); } } [HarmonyPrefix] [HarmonyPatch(typeof(ShipTeleporter), "beamOutPlayer")] private static void TeleportInverse() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onInverseStart.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(ShipTeleporter), "beamUpPlayer")] private static void TeleportEnd(ref IEnumerator __result) { __result = WaitForEnd(__result, delegate { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onTeleportEnd.Invoke(); } }); } [HarmonyPostfix] [HarmonyPatch(typeof(ShipTeleporter), "beamOutPlayer")] private static void InverseEnd(ref IEnumerator __result) { __result = WaitForEnd(__result, delegate { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onInverseEnd.Invoke(); } }); } [HarmonyPrefix] [HarmonyPatch(typeof(HUDManager), "DisplaySignalTranslatorMessage")] private static void TransmitStart() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onSignalTransmitStart.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(HUDManager), "DisplaySignalTranslatorMessage")] private static void TransmitEnd(ref IEnumerator __result) { __result = WaitForEnd(__result, delegate { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onSignalTransmitEnd.Invoke(); } }); } [HarmonyPrefix] [HarmonyPatch(typeof(ShipAlarmCord), "PullCordClientRpc")] private static void StartHorn() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onHornPull.Invoke(); } } [HarmonyPrefix] [HarmonyPatch(typeof(ShipAlarmCord), "Update")] private static void HoldCord(ShipAlarmCord __instance) { if (!__instance.hornBlaring) { return; } foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.whileHornPulled.Invoke(); } } [HarmonyPrefix] [HarmonyPatch(typeof(ShipAlarmCord), "StopPullingCordClientRpc")] private static void StopHorn() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onHornRelease.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(ShipLights), "ToggleShipLights")] private static void ToggleLights() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onShipLightsToggle.Invoke(); if (StartOfRound.Instance.shipRoomLights.areLightsOn) { activeController.onShipLightsTurnOn.Invoke(); } else { activeController.onShipLightsTurnOff.Invoke(); } } } [HarmonyPostfix] [HarmonyPatch(typeof(MoveToExitSpecialAnimation), "SetExitingDisabled")] private static void ClampToggle(bool disabled) { foreach (ShipController activeController in ShipController.ActiveControllers) { if (disabled) { activeController.onClampLock.Invoke(); } if (!disabled) { activeController.onClampUnlock.Invoke(); } activeController.onClampToggle.Invoke(); } } [HarmonyPrefix] [HarmonyPatch(typeof(MoveToExitSpecialAnimation), "shockChair")] private static void OnShockStart() { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onShockStart.Invoke(); } } [HarmonyPostfix] [HarmonyPatch(typeof(MoveToExitSpecialAnimation), "shockChair")] private static void OnShockEnd(ref IEnumerator __result) { __result = WaitForEnd(__result, delegate { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onShockEnd.Invoke(); } }); } [HarmonyPostfix] [HarmonyPatch(typeof(TVScript), "TurnTVOnOff")] private static void PowerTV(bool on) { foreach (ShipController activeController in ShipController.ActiveControllers) { if (on) { activeController.onTvTurnOn.Invoke(); } else { activeController.OnTvTurnOff.Invoke(); } activeController.onTvToggle.Invoke(); } } [HarmonyPrefix] [HarmonyPatch(typeof(TVScript), "TVFinishedClip")] private static bool HandleClipFinished(TVScript __instance) { if (!__instance.tvOn) { return false; } if ((Object)(object)ShipController.currentClipOverride != (Object)null) { TelevisionClipContainerSO currentClipOverride = ShipController.currentClipOverride; ShipController.currentClipOverride = null; ShipController.overrideVisiblyPlaying = false; foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onTvStationChange.Invoke(); } if (currentClipOverride.turnTVOff) { __instance.TurnTVOnOff(false); return false; } return true; } foreach (ShipController activeController2 in ShipController.ActiveControllers) { activeController2.onTvStationChange.Invoke(); } return true; } [HarmonyPostfix] [HarmonyPatch(typeof(TVScript), "Update")] private static void TrackOverridePlayback(TVScript __instance) { if ((Object)(object)ShipController.currentClipOverride == (Object)null) { return; } TelevisionClipContainerSO currentClipOverride = ShipController.currentClipOverride; ShipController.overrideElapsedTime += Time.deltaTime; if (__instance.tvOn && !ShipController.overrideVisiblyPlaying) { ShipController.overrideVisiblyPlaying = true; __instance.video.clip = currentClipOverride.clip; __instance.video.time = ShipController.overrideElapsedTime; __instance.video.Play(); if ((Object)(object)currentClipOverride.audio != (Object)null) { __instance.tvSFX.clip = currentClipOverride.audio; __instance.tvSFX.time = ShipController.overrideElapsedTime; __instance.tvSFX.Play(); } if (!ShipController.overrideStartedWithTvOff) { foreach (ShipController activeController in ShipController.ActiveControllers) { activeController.onTvStationChange.Invoke(); } } ShipController.overrideStartedWithTvOff = false; } else if (!__instance.tvOn && ShipController.overrideVisiblyPlaying) { ShipController.overrideVisiblyPlaying = false; __instance.video.Stop(); __instance.tvSFX.Stop(); } if (!__instance.tvOn && (double)ShipController.overrideElapsedTime >= currentClipOverride.clip.length) { ShipController.currentClipOverride = null; } } private static IEnumerator WaitForEnd(IEnumerator original, Action callback) { while (original.MoveNext()) { yield return original.Current; } callback?.Invoke(); } } [HarmonyPatch(typeof(StartOfRound))] public class StartOfRoundPatches { [HarmonyPostfix] [HarmonyPatch(typeof(StartOfRound), "Start")] private static void StartOfRound_Postfix(StartOfRound __instance) { ((MonoBehaviour)__instance).StartCoroutine(EnemyRequiresNestOverrideInternal.populateEnemyList()); } } } namespace SnipersScripts.Editor { [CreateAssetMenu(fileName = "Comment", menuName = "SnipersScripts/CommentSO")] public class CommentSO : ScriptableObject { [SerializeField] [TextArea(1, 20)] private string commentText = string.Empty; } [AddComponentMenu("SnipersScripts/CommentComponent")] public class CommentComponent : MonoBehaviour { [SerializeField] [TextArea(1, 5)] private string commentText = string.Empty; } [CreateAssetMenu(fileName = "ShipMessage", menuName = "SnipersScripts/ShipMessageSO")] public class ShipMessageSO : ScriptableObject { [SerializeField] [Tooltip("The alerts like the ones that appear when the ship leaves at midnight.")] public DialogueSegment[] shipMessage; } [CreateAssetMenu(fileName = "TVClip", menuName = "SnipersScripts/TelevisionClipContainerSO")] public class TelevisionClipContainerSO : ScriptableObject { [Tooltip("The clip to play.")] public VideoClip clip; [Tooltip("The audio to play.")] public AudioClip audio; [Tooltip("Forces the tv on if it isn't currently.")] public bool forceTVOn = true; [Tooltip("Turns the TV off after completion. If false, resumes normal channels.")] public bool turnTVOff = true; } } namespace SnipersScripts.Behaviors { [AddComponentMenu("SnipersScripts/AudioClipEvents")] public class AudioClipEvents : MonoBehaviour { [Tooltip("The AudioSource to use")] public AudioSource audioSource; [Tooltip("Event to run when the AudioClip starts playing")] public UnityEvent onAudioClipStart; [Tooltip("Event to run when the AudioClip finishes playing")] public UnityEvent onAudioClipEnd; [Tooltip("Event to run when the AudioClip is stopped")] public UnityEvent onAudioClipStop; private Coroutine audioCorutine = null; public void PlayAudioClip(AudioClip clip) { if ((Object)(object)audioSource == (Object)null) { SnipersScripts.Logger.LogWarning((object)"AudioSource is not assigned."); return; } audioSource.clip = clip; audioSource.Play(); onAudioClipStart.Invoke(); audioCorutine = ((MonoBehaviour)this).StartCoroutine(WaitForAudioClipEnd()); } public void StopAudioClip() { if ((Object)(object)audioSource == (Object)null) { SnipersScripts.Logger.LogWarning((object)"AudioSource is not assigned."); return; } if (audioCorutine != null) { ((MonoBehaviour)this).StopCoroutine(audioCorutine); audioCorutine = null; } audioSource.Stop(); onAudioClipStop.Invoke(); } private IEnumerator WaitForAudioClipEnd() { if (!((Object)(object)audioSource == (Object)null)) { yield return (object)new WaitUntil((Func)(() => !audioSource.isPlaying)); onAudioClipEnd.Invoke(); } } } internal class EnemyRequiresNestOverrideInternal { internal static List allEnemyTypes = new List(); public static IEnumerator populateEnemyList() { yield return (object)new WaitForSeconds(0.5f); allEnemyTypes.Clear(); SelectableLevel allEnemiesLevel = Object.FindObjectOfType().testAllEnemiesLevel; getEnemies(allEnemiesLevel.DaytimeEnemies); getEnemies(allEnemiesLevel.Enemies); getEnemies(allEnemiesLevel.OutsideEnemies); } private static void getEnemies(List enemyTypes) { foreach (SpawnableEnemyWithRarity enemyType in enemyTypes) { allEnemyTypes.Add(enemyType.enemyType); } } } [AddComponentMenu("SnipersScripts/EnemyRequiresNestOverride")] public class EnemyRequiresNestOverride : MonoBehaviour { [Tooltip("Events to run while enemy does not require nest.")] public UnityEvent onEnemyDoesNotRequireNest; public void ToggleEnemyNestRequirement(EnemyType enemyType) { foreach (EnemyType allEnemyType in EnemyRequiresNestOverrideInternal.allEnemyTypes) { if ((Object)(object)allEnemyType == (Object)(object)enemyType) { ((MonoBehaviour)this).StartCoroutine(CycleEnemyNestRequiement(allEnemyType)); break; } } } public void ToggleEnemyNestRequirement(string enemyName) { foreach (EnemyType allEnemyType in EnemyRequiresNestOverrideInternal.allEnemyTypes) { if (allEnemyType.enemyName == enemyName) { ToggleEnemyNestRequirement(allEnemyType); break; } } } private IEnumerator CycleEnemyNestRequiement(EnemyType enemy) { if ((Object)(object)enemy != (Object)null) { bool currentNestRequirement = enemy.requireNestObjectsToSpawn; enemy.requireNestObjectsToSpawn = false; onEnemyDoesNotRequireNest?.Invoke(enemy); yield return (object)new WaitForSeconds(0.5f); enemy.requireNestObjectsToSpawn = currentNestRequirement; } } } [AddComponentMenu("SnipersScripts/EntranceTeleportLock")] public class EntranceTeleportLock : NetworkBehaviour { internal static readonly List ActiveLockers = new List(); [HideInInspector] public List teleports = new List(); public string lockedMessage = "Door locked"; private void OnEnable() { ActiveLockers.Add(this); } private void OnDisable() { ActiveLockers.Remove(this); } public void LockAll() { LockInside(); LockOutside(); } public void UnlockAll() { UnlockInside(); UnlockOutside(); } public void LockInside() { LockMainInside(); LockFireInside(); } public void UnlockInside() { UnlockMainInside(); UnlockFireInside(); } public void LockMainInside() { foreach (EntranceTeleport teleport in teleports) { if (teleport.entranceId == 0) { LockIndividualInside(teleport); } } } public void UnlockMainInside() { foreach (EntranceTeleport teleport in teleports) { if (teleport.entranceId == 0) { UnlockIndividualInside(teleport); } } } public void LockFireInside() { foreach (EntranceTeleport teleport in teleports) { if (teleport.entranceId != 0) { LockIndividualInside(teleport); } } } public void UnlockFireInside() { foreach (EntranceTeleport teleport in teleports) { if (teleport.entranceId != 0) { UnlockIndividualInside(teleport); } } } public void LockIndividualInside(EntranceTeleport tp) { if (tp.isEntranceToBuilding) { Lock(tp.exitScript, locked: true); } else if (!tp.isEntranceToBuilding) { Lock(tp, locked: true); } } public void UnlockIndividualInside(EntranceTeleport tp) { if (tp.isEntranceToBuilding) { Lock(tp.exitScript, locked: false); } else if (!tp.isEntranceToBuilding) { Lock(tp, locked: false); } } public void LockOutside() { LockMainOutside(); LockFireOutside(); } public void UnlockOutside() { UnlockMainOutside(); UnlockFireOutside(); } public void LockMainOutside() { foreach (EntranceTeleport teleport in teleports) { if (teleport.entranceId == 0) { LockIndividualOutside(teleport); } } } public void UnlockMainOutside() { foreach (EntranceTeleport teleport in teleports) { if (teleport.entranceId == 0) { UnlockIndividualOutside(teleport); } } } public void LockFireOutside() { foreach (EntranceTeleport teleport in teleports) { if (teleport.entranceId != 0) { LockIndividualOutside(teleport); } } } public void UnlockFireOutside() { foreach (EntranceTeleport teleport in teleports) { if (teleport.entranceId != 0) { UnlockIndividualOutside(teleport); } } } public void LockIndividualOutside(EntranceTeleport tp) { if (!tp.isEntranceToBuilding) { Lock(tp.exitScript, locked: true); } else if (tp.isEntranceToBuilding) { Lock(tp, locked: true); } } public void UnlockIndividualOutside(EntranceTeleport tp) { if (!tp.isEntranceToBuilding) { Lock(tp.exitScript, locked: false); } else if (tp.isEntranceToBuilding) { Lock(tp, locked: false); } } [Rpc(/*Could not decode attribute arguments.*/)] public void SetLockedMessageRpc(string message = null) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: 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) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(3283938549u, val3, val, (SendTo)6, (RpcDelivery)0); bool flag = message != null; ((FastBufferWriter)(ref val2)).WriteValueSafe(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(message, false); } ((NetworkBehaviour)this).__endSendRpc(ref val2, 3283938549u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; lockedMessage = message; foreach (EntranceTeleport teleport in teleports) { teleport.triggerScript.disabledHoverTip = lockedMessage; } } private void Lock(EntranceTeleport teleport, bool locked) { if ((Object)(object)teleport != (Object)null && (Object)(object)teleport.triggerScript != (Object)null) { LockRpc(teleport.entranceId, locked, teleport.isEntranceToBuilding); } } [Rpc(/*Could not decode attribute arguments.*/)] private void LockRpc(int id, bool locked, bool outside) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: 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) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(3846296364u, val3, val, (SendTo)6, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, id); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref locked, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref outside, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendRpc(ref val2, 3846296364u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; SetLockedMessageRpc(lockedMessage); foreach (EntranceTeleport teleport in teleports) { if (teleport.entranceId == id && teleport.isEntranceToBuilding == outside) { teleport.triggerScript.interactable = !locked; } } } 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 ((NetworkBehaviour)this).__registerRpc(3283938549u, new RpcReceiveHandler(__rpc_handler_3283938549), "SetLockedMessageRpc"); ((NetworkBehaviour)this).__registerRpc(3846296364u, new RpcReceiveHandler(__rpc_handler_3846296364), "LockRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_3283938549(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_0061: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe(ref flag, default(ForPrimitives)); string lockedMessageRpc = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref lockedMessageRpc, false); } target.__rpc_exec_stage = (__RpcExecStage)1; ((EntranceTeleportLock)(object)target).SetLockedMessageRpc(lockedMessageRpc); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3846296364(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_0057: 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_006c: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int id = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref id); bool locked = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe(ref locked, default(ForPrimitives)); bool outside = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe(ref outside, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((EntranceTeleportLock)(object)target).LockRpc(id, locked, outside); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "EntranceTeleportLock"; } } [AddComponentMenu("SnipersScripts/ItemDropDistanceOverride")] public class ItemDropDistanceOverride : NetworkBehaviour { [Min(0f)] [Tooltip("The distance from which items can be dropped.")] public float itemDropDistance = ItemDropDistancePatch.VanillaRaycastDistance; [Tooltip("If true, the override will be applied on Start. If false, you can call ApplyDropDistanceOverride() manually.")] public bool applyOverrideOnStart = true; private void Start() { if (applyOverrideOnStart) { ApplyDropDistanceOverrideRpc(itemDropDistance); } } [Rpc(/*Could not decode attribute arguments.*/)] public void ApplyDropDistanceOverrideRpc(float distance) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(232351214u, val3, val, (SendTo)6, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref distance, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendRpc(ref val2, 232351214u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1) { base.__rpc_exec_stage = (__RpcExecStage)0; ItemDropDistancePatch.CustomRaycastDistance = distance; SnipersScripts.Logger.LogDebug((object)$"Item drop distance override applied: {distance}"); } } } private void OnDestroy() { ItemDropDistancePatch.CustomRaycastDistance = ItemDropDistancePatch.VanillaRaycastDistance; SnipersScripts.Logger.LogDebug((object)$"Item drop distance override removed, reset to {ItemDropDistancePatch.VanillaRaycastDistance}."); } 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 ((NetworkBehaviour)this).__registerRpc(232351214u, new RpcReceiveHandler(__rpc_handler_232351214), "ApplyDropDistanceOverrideRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_232351214(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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { float distance = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe(ref distance, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((ItemDropDistanceOverride)(object)target).ApplyDropDistanceOverrideRpc(distance); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "ItemDropDistanceOverride"; } } [AddComponentMenu("SnipersScripts/LoggerScript")] public class LoggerScript : MonoBehaviour { public enum type { Debug, Info, Warning, Error, Fatal } private static readonly string MESSAGE_STARTER = "SnipersScripts' LoggerScript says: "; [Tooltip("The message to log to the console on Start. Left empty, logs can only be printed by calling the print methods from other events.")] public string log = string.Empty; [Tooltip("The channel to log message to if log is not empty")] public type logType; [Tooltip("True: logs `Log` on start through the selected `Log Type` channel. False: logs only on manual invocation.")] public bool logOnStart = true; private void Start() { if (logOnStart) { PrintCurrentLogOnCurrentType(); } } public void PrintCurrentLogOnCurrentType() { if (!string.IsNullOrEmpty(log)) { if (logType == type.Debug) { PrintDebug(log); } if (logType == type.Info) { PrintInfo(log); } if (logType == type.Warning) { PrintWarning(log); } if (logType == type.Error) { PrintError(log); } if (logType == type.Fatal) { PrintFatal(log); } } } public void PrintDebug(string message) { SnipersScripts.Logger.LogDebug((object)(MESSAGE_STARTER + "\"" + message + "\"")); } public void PrintInfo(string message) { SnipersScripts.Logger.LogInfo((object)(MESSAGE_STARTER + "\"" + message + "\"")); } public void PrintWarning(string message) { SnipersScripts.Logger.LogWarning((object)(MESSAGE_STARTER + "\"" + message + "\"")); } public void PrintError(string message) { SnipersScripts.Logger.LogError((object)(MESSAGE_STARTER + "\"" + message + "\"")); } public void PrintFatal(string message) { SnipersScripts.Logger.LogFatal((object)(MESSAGE_STARTER + "\"" + message + "\"")); } } [AddComponentMenu("SnipersScripts/PlayerInShipDetector")] public class PlayerInShipDetector : MonoBehaviour { internal static readonly List ActiveDetectors = new List(); private readonly Dictionary previousShipRoomState = new Dictionary(); [Tooltip("If true, events invoke when player enters/exits ship. If false, events only run on a manual call to EvaluateIsInShipManualInvoke.")] public bool checkPassively = true; [Tooltip("If true, the detector will immediately check the player's position and fire the appropriate events, instead of waiting for the first swtich")] public bool checkImmediately = false; [Tooltip("The event to trigger when the player enters the ship.")] public UnityEvent onPlayerEnterShip; [Tooltip("The event to trigger when the player exits the ship.")] public UnityEvent onPlayerExitShip; [Tooltip("The event to trigger when the player switches between locations.")] public UnityEvent onPlayerSwitchLocation; private void OnEnable() { ActiveDetectors.Add(this); } private void OnDisable() { ActiveDetectors.Remove(this); } internal void UpdatePlayerPosition(PlayerControllerB player) { if (checkPassively) { EvaluateIsInShip(player, alwaysFireEnterExit: false); } } public void EvaluateIsInShipManualInvoke(PlayerControllerB player) { EvaluateIsInShip(player, alwaysFireEnterExit: true); } public bool EvaluateIsInShipManual(PlayerControllerB player) { return EvaluateIsInShip(player, alwaysFireEnterExit: true); } private bool EvaluateIsInShip(PlayerControllerB player, bool alwaysFireEnterExit) { bool value; bool flag = previousShipRoomState.TryGetValue(player, out value); bool flag2 = flag && player.isInHangarShipRoom != value; previousShipRoomState[player] = player.isInHangarShipRoom; if (flag2) { onPlayerSwitchLocation?.Invoke(player); } bool flag3 = !flag && checkImmediately; if (alwaysFireEnterExit || flag2 || flag3) { if (player.isInHangarShipRoom) { onPlayerEnterShip?.Invoke(player); } if (!player.isInHangarShipRoom) { onPlayerExitShip?.Invoke(player); } } return player.isInHangarShipRoom; } public void SetPassiveCheck(bool passiveCheck) { checkPassively = passiveCheck; } } [AddComponentMenu("SnipersScripts/Raycast")] internal class Raycast : MonoBehaviour { [Tooltip("Determins if the raycasts should run on Start or only when manually called")] public bool fireRaysOnStart = true; public List raycasts; private void Start() { if (fireRaysOnStart) { FireRays(); } } public void FireRays() { foreach (RaycastOptions raycast in raycasts) { FireRay(raycast); } } public void FireRay(int rayIndex) { if (rayIndex >= 0 && rayIndex < raycasts.Count) { FireRay(raycasts[rayIndex]); } else { SnipersScripts.Logger.LogError((object)$"Index {rayIndex} is not within the bounds of the Raycast Options list on {((Object)((Component)this).gameObject).name}"); } } public void FireRay(RaycastOptions ray) { //IL_0007: 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_002a: 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_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: 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_0049: 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_0054: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) Vector3 position = ((Component)this).transform.position; Vector3 val = ((!ray.globalAxis) ? ((Component)this).transform.TransformDirection(ray.direction) : ray.direction); ray.onRayStart?.Invoke(position); RaycastHit val2 = default(RaycastHit); if (Physics.Raycast(position, val, ref val2, ray.distance, LayerMask.op_Implicit(ray.mask))) { Vector3 point = ((RaycastHit)(ref val2)).point; ray.onRayHit?.Invoke(point); } else { ray.onRayFail?.Invoke(position); } } } [Serializable] public class RaycastOptions : ISerializationCallbackReceiver { [Tooltip("The direction to fire the raycast")] public Vector3 direction; [Min(0f)] [Tooltip("How far the ray should travel before failing")] public float distance; [Tooltip("If true, ray fires in the global rotation. If false, it fires relative to the attached game object's rotation.")] public bool globalAxis = false; [Tooltip("What layers the raycast hits successfully.")] public LayerMask mask; [Tooltip("Fires when the ray starts, with its start position.")] public UnityEvent onRayStart; [Tooltip("Fires when the ray hits something in the Mask, with its hit position.")] public UnityEvent onRayHit; [Tooltip("Fires when the ray fails to hit something in the Mask, with its start position.")] public UnityEvent onRayFail; [NonSerialized] private bool initialized = false; public void OnAfterDeserialize() { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) if (!initialized) { initialized = true; if (distance == 0f) { distance = 100f; } if (((LayerMask)(ref mask)).value == 0) { mask = LayerMask.op_Implicit(301992193); } } } public void OnBeforeSerialize() { } } [AddComponentMenu("SnipersScripts/RemoteScrapEvents")] public class RemoteScrapEvents : MonoBehaviour { [Tooltip("Event to run when the remote scrap item is clicked")] public UnityEvent onRemoteClicked; } [AddComponentMenu("SnipersScripts/ShipController")] public class ShipController : NetworkBehaviour { internal static readonly List ActiveControllers = new List(); [Header("Ship Magnet")] public UnityEvent onMagnetEnable; public UnityEvent onMagnetDisable; public UnityEvent onMagnetToggle; [Header("Ship Flight")] public UnityEvent onShipDescend; public UnityEvent onShipLand; public UnityEvent onShipAscend; public UnityEvent onShipEnterOrbit; [Header("Ship Communication")] [Tooltip("Events that trigger when a ship message starts")] public UnityEvent onShipMessageStart; [Tooltip("Events that trigger when a ship message ends")] public UnityEvent onShipMessageEnd; [Tooltip("Invokes when the ship speaker is muted")] public UnityEvent onSpeakerMute; public UnityEvent onSignalTransmitStart; public UnityEvent onSignalTransmitEnd; private SignalTranslator signalTranslator = null; public UnityEvent onHornPull; public UnityEvent whileHornPulled; public UnityEvent onHornRelease; private ShipAlarmCord shipHorn = null; [Header("Ship Doors")] public UnityEvent onDoorOpen; public UnityEvent onDoorClose; public UnityEvent onDoorToggle; [Header("Map Radar")] public UnityEvent onScreenTurnOn; public UnityEvent onScreenTurnOff; public UnityEvent onScreenPoweredToggle; public UnityEvent onScreenSpectatorToggle; [Header("Teleporters")] public UnityEvent onTeleportStart; public UnityEvent onTeleportEnd; public UnityEvent onInverseStart; public UnityEvent onInverseEnd; private ShipTeleporter teleporterNormal = null; private ShipTeleporter teleporterInverse = null; [Header("Lights")] public UnityEvent onShipLightsTurnOn; public UnityEvent onShipLightsTurnOff; public UnityEvent onShipLightsToggle; private AnimatedObjectTrigger lightSwitch = null; [Header("Electric Chair")] public UnityEvent onClampLock; public UnityEvent onClampUnlock; public UnityEvent onClampToggle; public UnityEvent onShockStart; public UnityEvent onShockEnd; private MoveToExitSpecialAnimation electricChair = null; [Header("TV")] public UnityEvent onTvTurnOn; public UnityEvent OnTvTurnOff; public UnityEvent onTvToggle; public UnityEvent onTvStationChange; private TVScript tv = null; [HideInInspector] public static TelevisionClipContainerSO currentClipOverride = null; [HideInInspector] public static float overrideElapsedTime = 0f; [HideInInspector] public static bool overrideVisiblyPlaying = false; [HideInInspector] public static bool overrideStartedWithTvOff = false; private void OnEnable() { ActiveControllers.Add(this); } private void OnDisable() { ActiveControllers.Remove(this); } public void SetMagnetPowered(bool powered) { if (powered != StartOfRound.Instance.magnetOn) { ToggleMagnetPower(); } } public void ToggleMagnetPower() { ToggleMagnetPower(powered: true); } private void ToggleMagnetPower(bool powered) { StartOfRound.Instance.SetMagnetOn(powered); StartOfRound.Instance.magnetLever.TriggerAnimation(StartOfRound.Instance.localPlayerController); } public void SetShipLanded(bool land) { if (land != StartOfRound.Instance.shipHasLanded) { ToggleShipFlight(); } } public void ToggleShipFlight() { ToggleShipFlightRpc(!StartOfRound.Instance.shipHasLanded); } [Rpc(/*Could not decode attribute arguments.*/)] private void ToggleShipFlightRpc(bool land) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(1734920772u, val3, val, (SendTo)6, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref land, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendRpc(ref val2, 1734920772u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; if (!((NetworkBehaviour)this).IsClient) { return; } if (Object.FindFirstObjectByType().triggerScript.interactable) { if (land) { Object.FindFirstObjectByType().LeverAnimation(); StartOfRound.Instance.StartGame(); } else { Object.FindFirstObjectByType().LeverAnimation(); StartOfRound.Instance.ShipLeave(); } } else { SnipersScripts.Logger.LogWarning((object)"Tried to move ship when lever can't be pulled. Cancelling action."); } } public void SetShipMessage(ShipMessageSO message) { HUDManager.Instance.ReadDialogue(message.shipMessage); } public void SetShipSpeakerAudio(AudioClip audioClip) { if ((Object)(object)audioClip != (Object)null && !StartOfRound.Instance.speakerAudioSource.isPlaying) { StartOfRound.Instance.speakerAudioSource.PlayOneShot(audioClip); } else if ((Object)(object)audioClip == (Object)null && StartOfRound.Instance.speakerAudioSource.isPlaying) { StartOfRound.Instance.DisableShipSpeaker(); } } public void SetTransmitterMessage(string message) { if ((Object)(object)signalTranslator == (Object)null && !FindShipComponent()) { SnipersScripts.Logger.LogWarning((object)"Tried to transmit over nonexisting transmitter. Cancelling."); } else { HUDManager.Instance.UseSignalTranslatorServerRpc(message); } } public void PullHorn() { if ((Object)(object)shipHorn == (Object)null && !FindShipComponent()) { SnipersScripts.Logger.LogWarning((object)"Tried to use non-existing horn. Cancelling."); return; } ShipAlarmCord obj = shipHorn; if (obj != null) { obj.HoldCordDown(); } } public void SetShipDoorOpen(bool open) { if (open == Object.FindFirstObjectByType().shipDoorsAnimator.GetBool("Closed")) { ToggleShipDoor(); } } public void ToggleShipDoor() { ToggleShipDoorRpc(!Object.FindFirstObjectByType().shipDoorsAnimator.GetBool("Closed")); } [Rpc(/*Could not decode attribute arguments.*/)] private void ToggleShipDoorRpc(bool powered) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(305821440u, val3, val, (SendTo)6, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref powered, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendRpc(ref val2, 305821440u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1) { base.__rpc_exec_stage = (__RpcExecStage)0; if (powered) { Object.FindFirstObjectByType().PlayDoorAnimation(true); } else { Object.FindFirstObjectByType().PlayDoorAnimation(false); } } } public void SetShipScreenOn(bool powered) { if (powered != StartOfRound.Instance.mapScreen.isScreenOn) { ToggleShipScreenPower(); } } public void ToggleShipScreenPower() { ToggleShipScreenPowerRpc(!StartOfRound.Instance.mapScreen.isScreenOn); } [Rpc(/*Could not decode attribute arguments.*/)] private void ToggleShipScreenPowerRpc(bool power) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(2203096438u, val3, val, (SendTo)6, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref power, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendRpc(ref val2, 2203096438u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1) { base.__rpc_exec_stage = (__RpcExecStage)0; if (power) { StartOfRound.Instance.mapScreen.SwitchScreenOnServerRpc(true); } else { StartOfRound.Instance.mapScreen.SwitchScreenOnServerRpc(false); } } } public void ToggleShipScreenSpectator() { StartOfRound.Instance.mapScreen.SwitchRadarTargetForward(true); } public void TeleportPlayer(bool inverse) { if (((!inverse && (Object)(object)teleporterNormal == (Object)null) || (inverse && (Object)(object)teleporterInverse == (Object)null)) && !FindShipComponent(inverse)) { SnipersScripts.Logger.LogWarning((object)"Tried to use non-existing teleporter. Cancelling."); } else if (!inverse && teleporterNormal.buttonTrigger.interactable) { ShipTeleporter obj = teleporterNormal; if (obj != null) { obj.PressTeleportButtonOnLocalClient(); } } else if (inverse && teleporterInverse.buttonTrigger.interactable) { ShipTeleporter obj2 = teleporterInverse; if (obj2 != null) { obj2.PressTeleportButtonOnLocalClient(); } } } public void SetShipLightsOn(bool on) { if (on != StartOfRound.Instance.shipRoomLights.areLightsOn) { ToggleShipLights(); } } public void ToggleShipLights() { if ((Object)(object)lightSwitch == (Object)null && !FindShipComponent()) { SnipersScripts.Logger.LogWarning((object)"Somehow the light switch is missing."); return; } AnimatedObjectTrigger obj = lightSwitch; if (obj != null) { obj.TriggerAnimation(StartOfRound.Instance.localPlayerController); } StartOfRound.Instance.shipRoomLights.ToggleShipLights(); } public void SetChairClamped(bool clamp) { if (FindElectricChair()) { if (clamp != electricChair.exitingDisabled) { ToggleChairClamps(); } } else { SnipersScripts.Logger.LogWarning((object)"Tried to interact with nonexisting electric chair. Cancelling."); } } public void ToggleChairClamps() { if (FindElectricChair()) { ToggleChairClamps(!electricChair.exitingDisabled); } else { SnipersScripts.Logger.LogWarning((object)"Tried to interact with nonexisting electric chair. Cancelling."); } } private void ToggleChairClamps(bool clamp) { electricChair.SetExitingDisabled(clamp); electricChair.animatedObjectTrigger.TriggerAnimation(StartOfRound.Instance.localPlayerController); } [Rpc(/*Could not decode attribute arguments.*/)] public void ShockElectricChairRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(1986244335u, val3, val, (SendTo)6, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendRpc(ref val2, 1986244335u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1) { base.__rpc_exec_stage = (__RpcExecStage)0; if (FindElectricChair()) { electricChair.OnShipPowerSurge(); } else { SnipersScripts.Logger.LogWarning((object)"Tried to interact with nonexisting electric chair. Cancelling."); } } } private bool FindElectricChair() { if ((Object)(object)electricChair != (Object)null) { return true; } return FindShipComponent(); } public void SetTvOn(bool on) { if (FindTv()) { if (on != tv.tvOn) { ToggleTv(); } } else { SnipersScripts.Logger.LogWarning((object)"Tried to interact with nonexisting TV. Cancelling."); } } public void ToggleTv() { if (FindTv()) { ToggleTv(!tv.tvOn); } else { SnipersScripts.Logger.LogWarning((object)"Tried to interact with nonexisting TV. Cancelling."); } } private void ToggleTv(bool on) { tv.SwitchTVLocalClient(); } private bool FindTv() { if ((Object)(object)tv != (Object)null) { return true; } return FindShipComponent(); } public void SetTvClip(TelevisionClipContainerSO clip) { if (FindTv() && (Object)(object)clip != (Object)null) { overrideStartedWithTvOff = !tv.tvOn; currentClipOverride = clip; overrideElapsedTime = 0f; overrideVisiblyPlaying = false; if (currentClipOverride.forceTVOn && !tv.tvOn) { tv.TurnTVOnOff(true); } } else { SnipersScripts.Logger.LogWarning((object)"Tried to interact with nonexisting TV. Cancelling."); } } private bool FindShipComponent(bool inverseTeleporter = false, string gameObjectName = "LightSwitch") { if (typeof(T) == typeof(ShipTeleporter)) { List list = FindObjectsInSampleScene(); foreach (ShipTeleporter item in list) { if (inverseTeleporter && item.isInverseTeleporter) { teleporterInverse = item; return true; } if (!inverseTeleporter && !item.isInverseTeleporter) { teleporterNormal = item; return true; } } } if (typeof(T) == typeof(SignalTranslator)) { foreach (SignalTranslator item2 in FindObjectsInSampleScene()) { signalTranslator = item2; if ((Object)(object)signalTranslator != (Object)null) { return true; } } } if (typeof(T) == typeof(ShipAlarmCord)) { foreach (ShipAlarmCord item3 in FindObjectsInSampleScene()) { shipHorn = item3; if ((Object)(object)shipHorn != (Object)null) { return true; } } } if (typeof(T) == typeof(AnimatedObjectTrigger) && gameObjectName == "LightSwitch") { foreach (AnimatedObjectTrigger item4 in FindObjectsInSampleScene()) { if (((Object)((Component)item4).gameObject).name == "LightSwitch") { lightSwitch = item4; if ((Object)(object)lightSwitch != (Object)null) { return true; } } } } if (typeof(T) == typeof(MoveToExitSpecialAnimation)) { foreach (MoveToExitSpecialAnimation item5 in FindObjectsInSampleScene()) { if (item5.electricChair) { electricChair = item5; return true; } } } if (typeof(T) == typeof(TVScript)) { foreach (TVScript item6 in FindObjectsInSampleScene()) { tv = item6; if ((Object)(object)tv != (Object)null) { return true; } } } return false; } private List FindObjectsInSampleScene() where T : Component { return Object.FindObjectsByType((FindObjectsInactive)1, (FindObjectsSortMode)0).Where(delegate(T component) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) Scene scene = ((Component)component).gameObject.scene; return ((Scene)(ref scene)).name == "SampleSceneRelay"; }).ToList(); } 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 ((NetworkBehaviour)this).__registerRpc(1734920772u, new RpcReceiveHandler(__rpc_handler_1734920772), "ToggleShipFlightRpc"); ((NetworkBehaviour)this).__registerRpc(305821440u, new RpcReceiveHandler(__rpc_handler_305821440), "ToggleShipDoorRpc"); ((NetworkBehaviour)this).__registerRpc(2203096438u, new RpcReceiveHandler(__rpc_handler_2203096438), "ToggleShipScreenPowerRpc"); ((NetworkBehaviour)this).__registerRpc(1986244335u, new RpcReceiveHandler(__rpc_handler_1986244335), "ShockElectricChairRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_1734920772(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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool land = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe(ref land, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((ShipController)(object)target).ToggleShipFlightRpc(land); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_305821440(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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool powered = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe(ref powered, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((ShipController)(object)target).ToggleShipDoorRpc(powered); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2203096438(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_0044: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool power = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe(ref power, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((ShipController)(object)target).ToggleShipScreenPowerRpc(power); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_1986244335(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((ShipController)(object)target).ShockElectricChairRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "ShipController"; } } [AddComponentMenu("SnipersScripts/WaitRandomTime")] internal class WaitRandomTime : NetworkBehaviour { [Min(0f)] public float minWaitTime = 1f; [Min(0f)] public float maxWaitTime = 5f; [Tooltip("True, timer starts automatically. False, timer must be started manually.")] public bool runOnStart = false; [Tooltip("If true, once a time is chosen between min and max, it will not be re-rolled on subsequent waits.")] public bool onlyRandomizeOnce = false; [Tooltip("Event to run when the wait starts")] public UnityEvent onWaitStart; [Tooltip("Event to run when the wait is complete")] public UnityEvent onWaitComplete; [Tooltip("Event to run when the wait is stopped")] public UnityEvent onWaitStop; private Coroutine waitCoroutine = null; private Random random; private bool timeIsLocked = false; private float currentWaitingTime = 0f; public void Start() { if (runOnStart) { StartWaitRpc(); } } [Rpc(/*Could not decode attribute arguments.*/)] public void StartWaitRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0109: 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) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(1171370140u, val3, val, (SendTo)6, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendRpc(ref val2, 1171370140u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; if (((NetworkBehaviour)this).IsClient) { if (random == null) { random = new Random(RoundManager.Instance.playersManager.randomMapSeed + (int)((Component)this).transform.position.x + (int)((Component)this).transform.position.y + (int)((Component)this).transform.position.z); } if (minWaitTime > maxWaitTime) { SnipersScripts.Logger.LogWarning((object)$"WaitRandomTime: minWaitTime ({minWaitTime}) is greater than maxWaitTime ({maxWaitTime}). Switching values."); float num = minWaitTime; minWaitTime = maxWaitTime; maxWaitTime = num; } waitCoroutine = ((MonoBehaviour)this).StartCoroutine(Wait()); } } private IEnumerator Wait() { UnityEvent obj = onWaitStart; if (obj != null) { obj.Invoke(); } yield return (object)new WaitForSeconds(GetWaitTime()); UnityEvent obj2 = onWaitComplete; if (obj2 != null) { obj2.Invoke(); } } private float GetWaitTime() { if (!timeIsLocked) { currentWaitingTime = minWaitTime + (float)(random.NextDouble() * (double)(maxWaitTime - minWaitTime)); if (onlyRandomizeOnce) { timeIsLocked = true; } } return currentWaitingTime; } [Rpc(/*Could not decode attribute arguments.*/)] public void StopWaitRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(3137626092u, val3, val, (SendTo)6, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendRpc(ref val2, 3137626092u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; if (((NetworkBehaviour)this).IsClient && waitCoroutine != null) { UnityEvent obj = onWaitStop; if (obj != null) { obj.Invoke(); } ((MonoBehaviour)this).StopCoroutine(waitCoroutine); waitCoroutine = null; } } 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 ((NetworkBehaviour)this).__registerRpc(1171370140u, new RpcReceiveHandler(__rpc_handler_1171370140), "StartWaitRpc"); ((NetworkBehaviour)this).__registerRpc(3137626092u, new RpcReceiveHandler(__rpc_handler_3137626092), "StopWaitRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_1171370140(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((WaitRandomTime)(object)target).StartWaitRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3137626092(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((WaitRandomTime)(object)target).StopWaitRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "WaitRandomTime"; } } [AddComponentMenu("SnipersScripts/WaterloggedSensor")] [RequireComponent(typeof(Collider))] internal class WaterloggedSensor : NetworkBehaviour { [Tooltip("If the check should run to invoke the events on start instead of only on switched state.")] public bool checkOnStart = true; [Tooltip("Invokes when game object under water.")] public UnityEvent onSubmerge; [Tooltip("Invokes when game object leaves water.")] public UnityEvent onEmerge; private void Start() { if (checkOnStart) { CheckSensorRpc(); } } [Rpc(/*Could not decode attribute arguments.*/)] public void CheckSensorRpc() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Invalid comparison between Unknown and I4 //IL_0043: 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_005f: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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_00bf: 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) { RpcAttributeParams val = new RpcAttributeParams { RequireOwnership = false }; RpcParams val3 = default(RpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendRpc(4200019624u, val3, val, (SendTo)6, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendRpc(ref val2, 4200019624u, val3, val, (SendTo)6, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; Collider[] array = Physics.OverlapSphere(((Component)this).transform.position, 1f); Collider[] array2 = array; foreach (Collider collider in array2) { if (VallidateCollider(collider)) { onSubmerge.Invoke(); return; } } onEmerge.Invoke(); } private void OnTriggerEnter(Collider collider) { if (VallidateCollider(collider)) { onSubmerge.Invoke(); } } private void OnTriggerExit(Collider collider) { if (VallidateCollider(collider)) { onEmerge.Invoke(); } } private bool VallidateCollider(Collider collider) { QuicksandTrigger val = default(QuicksandTrigger); return ((Component)collider).TryGetComponent(ref val) && (val.isWater || val.isInsideWater); } 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 ((NetworkBehaviour)this).__registerRpc(4200019624u, new RpcReceiveHandler(__rpc_handler_4200019624), "CheckSensorRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_4200019624(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { target.__rpc_exec_stage = (__RpcExecStage)1; ((WaterloggedSensor)(object)target).CheckSensorRpc(); target.__rpc_exec_stage = (__RpcExecStage)0; } } [MethodImpl(MethodImplOptions.NoInlining)] protected internal override string __getTypeName() { return "WaterloggedSensor"; } } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)] internal sealed class IgnoresAccessChecksToAttribute : Attribute { public IgnoresAccessChecksToAttribute(string assemblyName) { } } } namespace __GEN { internal class NetworkVariableSerializationHelper { [RuntimeInitializeOnLoadMethod] internal static void InitializeSerialization() { } } } namespace Sniper1_1.SnipersScripts.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }