Decompiled source of HostFixes v1.0.21
plugins/HostFixes.dll
Decompiled 5 days 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.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using HostFixes.UI; using LobbyCompatibility.Enums; using LobbyCompatibility.Features; using Microsoft.CodeAnalysis; using Netcode.Transports.Facepunch; using Steamworks; using Steamworks.Data; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: IgnoresAccessChecksTo("ClientNetworkTransform")] [assembly: IgnoresAccessChecksTo("DissonanceVoip")] [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.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("CharlesE2")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyDescription("Lethal Company server-side anticheat mod.")] [assembly: AssemblyFileVersion("1.0.21.0")] [assembly: AssemblyInformationalVersion("1.0.21+86b602b2c115d0edcc3810b56dbd1d15d4496b2d")] [assembly: AssemblyProduct("Host Fixes")] [assembly: AssemblyTitle("com.github.CharlesE2.HostFixes")] [assembly: AssemblyMetadata("RepositoryUrl", "https://github.com/Charlese2/HostFixes")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.21.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace HostFixes { internal class Patches { [HarmonyPatch(typeof(StartOfRound), "SyncShipUnlockablesServerRpc")] internal static class Fix_SyncShipUnlockablesServerRpc_Crash { public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { bool flag = false; int num = -1; List<CodeInstruction> list = new List<CodeInstruction>(instructions); for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Call && list[i].operand is MethodInfo methodInfo && methodInfo.Name == "FindObjectsOfType") { num = i; flag = true; break; } } if (flag) { list.Insert(num + 1, Transpilers.EmitDelegate<Func<IEnumerable<PlaceableShipObject>, IEnumerable<PlaceableShipObject>>>((Func<IEnumerable<PlaceableShipObject>, IEnumerable<PlaceableShipObject>>)((IEnumerable<PlaceableShipObject> placeableShipObjects) => placeableShipObjects.Where((PlaceableShipObject placeableShipObject) => (Object)(object)placeableShipObject.parentObject != (Object)null)))); } else { Plugin.Log.LogWarning((object)"Could not patch SyncShipUnlockablesServerRpc's Crash"); } return list.AsEnumerable(); } } [HarmonyPatch(typeof(StartOfRound), "SyncAlreadyHeldObjectsServerRpc")] internal static class SyncAlreadyHeldObjects_NullRef { public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { //IL_0002: 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_0035: Expected O, but got Unknown //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Expected O, but got Unknown //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Expected O, but got Unknown CodeMatcher val = new CodeMatcher(instructions, (ILGenerator)null).MatchForward(false, (CodeMatch[])(object)new CodeMatch[1] { new CodeMatch((OpCode?)OpCodes.Ldfld, (object)AccessTools.Field(typeof(GrabbableObject), "isHeld"), (string)null) }); if (!val.ReportFailure(MethodBase.GetCurrentMethod(), (Action<string>)Plugin.Log.LogWarning)) { val.SetOperandAndAdvance((object)AccessTools.Field(typeof(GrabbableObject), "playerHeldBy")); val.InsertAndAdvance((CodeInstruction[])(object)new CodeInstruction[2] { new CodeInstruction(OpCodes.Ldnull, (object)null), new CodeInstruction(OpCodes.Call, (object)AccessTools.Method(typeof(Object), "op_Inequality", (Type[])null, (Type[])null)) }); } return val.InstructionEnumeration(); } } [HarmonyPatch(typeof(StartOfRound), "SyncAlreadyHeldObjectsClientRpc")] internal static class SyncAlreadyHeldObjectsToCallingClient { public static IEnumerable<CodeInstruction> Transpiler(IEnumerable<CodeInstruction> instructions) { //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Expected O, but got Unknown bool flag = false; int num = -1; List<CodeInstruction> list = new List<CodeInstruction>(instructions); for (int i = 0; i < list.Count; i++) { if (list[i].opcode == OpCodes.Call && list[i].operand is MethodInfo methodInfo && methodInfo.Name == "__beginSendClientRpc") { num = i; flag = true; break; } } if (flag) { list.Insert(num - 1, new CodeInstruction(OpCodes.Ldarg, (object)5)); list.Insert(num, Transpilers.EmitDelegate<Func<ClientRpcParams, ulong, ClientRpcParams>>((Func<ClientRpcParams, ulong, ClientRpcParams>)delegate(ClientRpcParams clientRpcParams, ulong senderClientId) { //IL_0002: 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_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) ClientRpcParams val = default(ClientRpcParams); val.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; return clientRpcParams = val; })); } else { Plugin.Log.LogWarning((object)"Could not patch SyncAlreadyHeldObjectsClientRpc"); } return list.AsEnumerable(); } } [HarmonyWrapSafe] [HarmonyPatch(typeof(FacepunchTransport), "Steamworks.ISocketManager.OnConnecting")] private class Identity_Fix { public static void Prefix(ref Connection connection, ref ConnectionInfo info) { //IL_000b: 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) Plugin.SteamIdtoConnectionIdMap[((NetIdentity)(ref info.identity)).SteamId.Value] = ((Connection)(ref connection)).Id; Plugin.ConnectionIdtoSteamIdMap[((Connection)(ref connection)).Id] = ((NetIdentity)(ref info.identity)).SteamId.Value; } } [HarmonyWrapSafe] [HarmonyPatch(typeof(FacepunchTransport), "Steamworks.ISocketManager.OnDisconnected")] private class SteamIdDictionary_Cleanup { public static void Prefix(ref Connection connection, ref ConnectionInfo info) { //IL_001e: 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) NetworkManager singleton = NetworkManager.Singleton; if (singleton != null && singleton.IsListening) { Plugin.SteamIdtoConnectionIdMap.Remove(((NetIdentity)(ref info.identity)).SteamId.Value); Plugin.ConnectionIdtoSteamIdMap.Remove(((Connection)(ref connection)).Id); Plugin.playerSteamNames.Remove(((NetIdentity)(ref info.identity)).SteamId.Value); } } } [HarmonyWrapSafe] [HarmonyPatch(typeof(NetworkConnectionManager), "OnClientDisconnectFromServer")] private class ClientIdToSteamId_Cleanup { public static void Prefix(ulong clientId) { if (NetworkManager.Singleton.IsHost && Plugin.ClientIdToSteamIdMap.TryGetValue(clientId, out var value)) { Plugin.SteamIdtoClientIdMap.Remove(value); Plugin.ClientIdToSteamIdMap.Remove(clientId); } } } [HarmonyWrapSafe] [HarmonyPatch(typeof(StartOfRound), "OnClientConnect")] private class OnClientConnect { public static void Postfix(StartOfRound __instance, ulong clientId) { if (((NetworkBehaviour)__instance).IsServer && clientId != 0L && !GameNetworkManager.Instance.disableSteam && StartOfRound.Instance.ClientPlayerList.TryGetValue(clientId, out var value)) { StartOfRound.Instance.allPlayerScripts[value].playerSteamId = Plugin.ClientIdToSteamIdMap[clientId]; } } } [HarmonyWrapSafe] [HarmonyPatch(typeof(GameNetworkManager), "ConnectionApproval")] private class MapSteamIdToClientId { public static void Postfix(GameNetworkManager __instance, ref ConnectionApprovalRequest request, ref ConnectionApprovalResponse response) { if (__instance.disableSteam) { return; } ulong num = NetworkManager.Singleton.ConnectionManager.ClientIdToTransportId(request.ClientNetworkId); if (Plugin.ConnectionIdtoSteamIdMap.TryGetValue((uint)num, out var value)) { Plugin.SteamIdtoClientIdMap[value] = request.ClientNetworkId; Plugin.ClientIdToSteamIdMap[request.ClientNetworkId] = value; StartOfRound instance = StartOfRound.Instance; if (instance != null && instance.KickedClientIds.Contains(value)) { if (response.Reason == "") { response.Reason = "You cannot rejoin after being kicked."; } response.Approved = false; } string[] array = Encoding.ASCII.GetString(request.Payload).Split(","); if (array.Length >= 2 && array[1] != value.ToString()) { Plugin.Log.LogInfo((object)$"SteamID sent by client ({array[1]}) doesn't match SteamID from steam ({value})."); } } else { Plugin.Log.LogError((object)$"[ConnectionApproval] Could not get steamId from transportId ({num})"); } } } [HarmonyWrapSafe] [HarmonyPatch(typeof(Terminal), "Awake")] private class HostInitialization { public static void Postfix(Terminal __instance) { ((MonoBehaviour)Plugin.Instance).StartCoroutine(Plugin.TerminalAwakeWait(__instance)); new InfoPanel(); } } [HarmonyWrapSafe] [HarmonyPatch(typeof(NetworkConnectionManager), "Initialize")] private class SetupIdMap { public static void Prefix() { //IL_0011: 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_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) if (!GameNetworkManager.Instance.disableSteam) { Plugin.SteamIdtoClientIdMap[SteamId.op_Implicit(SteamClient.SteamId)] = 0uL; Plugin.ClientIdToSteamIdMap[0uL] = SteamId.op_Implicit(SteamClient.SteamId); Plugin.SteamIdtoConnectionIdMap[SteamId.op_Implicit(SteamClient.SteamId)] = 0u; Plugin.ConnectionIdtoSteamIdMap[0u] = SteamId.op_Implicit(SteamClient.SteamId); } } } [HarmonyWrapSafe] [HarmonyPatch(typeof(NetworkManager), "OnEnable")] private class RegisterNetworkManagerEvents { public static void Postfix() { NetworkManager.Singleton.OnServerStopped -= Plugin.ServerStopped; NetworkManager.Singleton.OnServerStopped += Plugin.ServerStopped; } } [HarmonyWrapSafe] [HarmonyPatch(typeof(HUDManager), "AddPlayerChatMessageClientRpc")] private class AddPlayerChatMessageClientRpc_Patch { public static bool Prefix(HUDManager __instance, int playerId) { NetworkManager networkManager = ((NetworkBehaviour)__instance).NetworkManager; if ((Object)(object)networkManager == (Object)null || !networkManager.IsListening) { return false; } if (!networkManager.IsHost && (playerId < 0 || playerId >= StartOfRound.Instance.allPlayerScripts.Length)) { return false; } return true; } } [HarmonyWrapSafe] [HarmonyPatch(typeof(PlayerControllerB), "SwitchToItemSlot")] private class SwitchToItemSlot_Patch { public static void Prefix(PlayerControllerB __instance, ref int slot) { slot = Mathf.Clamp(slot, 0, __instance.ItemSlots.Length - 1); } } [HarmonyWrapSafe] [HarmonyPatch(typeof(PlayerControllerB), "NextItemSlot")] private class NextItemSlot_Patch { public static void Prefix(PlayerControllerB __instance) { __instance.currentItemSlot = Mathf.Clamp(__instance.currentItemSlot, 0, __instance.ItemSlots.Length - 1); } } [HarmonyWrapSafe] [HarmonyPatch(typeof(StartOfRound), "OnPlayerDC")] private class OnPlayerDC_Patch { public static void Postfix(ulong clientId) { if (Plugin.votedToLeaveEarlyPlayers.Remove(clientId)) { TimeOfDay.Instance.votesForShipToLeaveEarly = Plugin.votedToLeaveEarlyPlayers.Count; } } } [HarmonyWrapSafe] [HarmonyPatch(typeof(StartOfRound), "ShipLeave")] private class ShipLeave_Patch { public static void Prefix() { Plugin.votedToLeaveEarlyPlayers.Clear(); } } } [BepInPlugin("com.github.CharlesE2.HostFixes", "Host Fixes", "1.0.21")] public class Plugin : BaseUnityPlugin { internal class ConnectionEvents { internal static void ConnectionAttempt(Lobby _, Friend member) { //IL_0011: 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_0034: 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) if (NetworkManager.Singleton.IsHost && !playerSteamNames.TryAdd(member.Id.Value, ((Friend)(ref member)).Name)) { Log.LogWarning((object)$"SteamId: ({member.Id.Value}) Name: ({((Friend)(ref member)).Name}) is already in the playerSteamNames list."); } } internal static void ConnectionCleanup(Lobby _, Friend member) { //IL_0016: 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_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) if (NetworkManager.Singleton.IsHost && !GameNetworkManager.Instance.steamIdsInLobby.Remove(SteamId.op_Implicit(member.Id.Value))) { Log.LogWarning((object)$"({member.Id.Value}) already removed from steamIdsInLobby."); } } internal static void LobbyCreated(Result result, Lobby lobby) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Invalid comparison between Unknown and I4 //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) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) if ((int)result == 1) { Dictionary<ulong, string> playerSteamNames = Plugin.playerSteamNames; ulong value = ((Lobby)(ref lobby)).Owner.Id.Value; Friend owner = ((Lobby)(ref lobby)).Owner; if (!playerSteamNames.TryAdd(value, ((Friend)(ref owner)).Name)) { Log.LogWarning((object)"Host is already in playerSteamNames."); } } } } public class HostFixesServerReceiveRpcs { public void BuyItemsServerRpc(int[] boughtItems, int newGroupCredits, int numItemsInShip, Terminal instance, ServerRpcParams serverRpcParams) { //IL_0000: 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_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009d: 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_00b2: 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_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0215: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Unknown result type (might be due to invalid IL or missing references) //IL_0301: Unknown result type (might be due to invalid IL or missing references) //IL_030b: Unknown result type (might be due to invalid IL or missing references) //IL_031e: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Unknown result type (might be due to invalid IL or missing references) //IL_0327: 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) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[BuyItemsServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } if (!configCheckPrices.Value) { instance.BuyItemsServerRpc(boughtItems, newGroupCredits, numItemsInShip); return; } string playerUsername = StartOfRound.Instance.allPlayerScripts[value].playerUsername; int num = 0; if (instance.numberOfItemsInDropship + boughtItems.Length > 12) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to buy too many items."); ClientRpcParams val = default(ClientRpcParams); val.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams = val; HostFixesServerSendRpcs.Instance.SyncTerminalValuesClientRpc(instance.groupCredits, instance.numberOfItemsInDropship, instance.hasWarrantyTicket, instance, clientRpcParams); return; } if (newGroupCredits < 0) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried tried to set credits to a negative number while buying items."); ClientRpcParams val = default(ClientRpcParams); val.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams2 = val; HostFixesServerSendRpcs.Instance.SyncTerminalValuesClientRpc(instance.groupCredits, instance.numberOfItemsInDropship, instance.hasWarrantyTicket, instance, clientRpcParams2); return; } Dictionary<int, int> dictionary = (from item in boughtItems group item by item).ToDictionary((IGrouping<int, int> item) => item.Key, (IGrouping<int, int> item) => item.Count()); foreach (int key in dictionary.Keys) { if (key < 0 || key >= instance.buyableItemsList.Length || key >= instance.itemSalesPercentages.Length) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to buy an item that was not in the host's shop. Item #{key}"); ClientRpcParams val = default(ClientRpcParams); val.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams3 = val; HostFixesServerSendRpcs.Instance.SyncTerminalValuesClientRpc(instance.groupCredits, instance.numberOfItemsInDropship, instance.hasWarrantyTicket, instance, clientRpcParams3); return; } num += (int)((float)instance.buyableItemsList[key].creditsWorth * ((float)instance.itemSalesPercentages[key] / 100f) * (float)dictionary[key]); } if (instance.groupCredits - num != newGroupCredits) { Log.LogInfo((object)($"Player #{value} ({playerUsername}) credits spent on items does not match item price. " + $"Spent credits: {instance.groupCredits - newGroupCredits} Cost Of items: {num}")); ClientRpcParams val = default(ClientRpcParams); val.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams4 = val; HostFixesServerSendRpcs.Instance.SyncTerminalValuesClientRpc(instance.groupCredits, instance.numberOfItemsInDropship, instance.hasWarrantyTicket, instance, clientRpcParams4); } else { instance.BuyItemsServerRpc(boughtItems, newGroupCredits, numItemsInShip); } } public void PlayTerminalAudioServerRpc(int clipIndex, Terminal instance, ServerRpcParams _) { if (!terminalSoundPlaying) { ((MonoBehaviour)Instance).StartCoroutine(TerminalSoundCooldown()); instance.PlayTerminalAudioServerRpc(clipIndex); } } public void BuyShipUnlockableServerRpc(int unlockableID, int newGroupCreditsAmount, StartOfRound instance, ServerRpcParams serverRpcParams) { //IL_0000: 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) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[BuyShipUnlockableServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } Terminal val = Object.FindObjectOfType<Terminal>(); if (senderClientId == 0L) { instance.BuyShipUnlockableServerRpc(unlockableID, newGroupCreditsAmount); } else if (!buyShipUnlockableOnCooldown) { ((MonoBehaviour)Instance).StartCoroutine(BuyShipUnlockableCooldown()); string playerUsername = StartOfRound.Instance.allPlayerScripts[value].playerUsername; int value2; if (unlockableID < 0 || unlockableID >= StartOfRound.Instance.unlockablesList.unlockables.Count) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to buy unlockable that is not in the unlockables list. ({unlockableID})."); } else if (StartOfRound.Instance.unlockablesList.unlockables[unlockableID].alreadyUnlocked) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to unlock an unlockable multiple times"); } else if (!unlockablePrices.TryGetValue(unlockableID, out value2)) { Log.LogError((object)$"Could not find price of ship unlockable #{unlockableID}"); } else if (newGroupCreditsAmount < 0) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried tried to set credits to a negative number unlocking ship unlockable."); } else if (senderClientId != 0L && val.groupCredits - value2 != newGroupCreditsAmount) { Log.LogInfo((object)($"Player #{value} ({playerUsername}) calculated credit amount does not match sent credit amount for unlockable. " + $"Current credits: {val.groupCredits} Unlockable cost: {value2} Sent credit Amount: {newGroupCreditsAmount}")); } else if (newGroupCreditsAmount < val.groupCredits) { instance.BuyShipUnlockableServerRpc(unlockableID, newGroupCreditsAmount); } else { Log.LogInfo((object)($"Player #{senderClientId} ({playerUsername}) attempted to increase credits while buying ship unlockables." + $" Attempted credit value: {newGroupCreditsAmount} Old credit value: {val.groupCredits}")); } } } public void ChangeLevelServerRpc(int levelID, int newGroupCreditsAmount, StartOfRound instance, ServerRpcParams serverRpcParams) { //IL_0000: 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_00b5: 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_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0141: 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_0148: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: 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_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_02cf: Unknown result type (might be due to invalid IL or missing references) //IL_02d1: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_0355: Unknown result type (might be due to invalid IL or missing references) //IL_035f: Unknown result type (might be due to invalid IL or missing references) //IL_0372: Unknown result type (might be due to invalid IL or missing references) //IL_0374: Unknown result type (might be due to invalid IL or missing references) //IL_0379: Unknown result type (might be due to invalid IL or missing references) //IL_037b: Unknown result type (might be due to invalid IL or missing references) //IL_0399: Unknown result type (might be due to invalid IL or missing references) //IL_03ec: Unknown result type (might be due to invalid IL or missing references) //IL_03f6: Unknown result type (might be due to invalid IL or missing references) //IL_0409: Unknown result type (might be due to invalid IL or missing references) //IL_040b: Unknown result type (might be due to invalid IL or missing references) //IL_0410: Unknown result type (might be due to invalid IL or missing references) //IL_0412: Unknown result type (might be due to invalid IL or missing references) //IL_0430: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[ChangeLevelServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } string playerUsername = StartOfRound.Instance.allPlayerScripts[value].playerUsername; if (changeLevelCooldown.TryGetValue(value, out var value2) && value2) { return; } ((MonoBehaviour)Instance).StartCoroutine(ChangeLevelCooldown(value)); if (senderClientId == 0L) { instance.ChangeLevelServerRpc(levelID, newGroupCreditsAmount); return; } Terminal val = Object.FindObjectOfType<Terminal>(); if (StartOfRound.Instance.allPlayerScripts[value].isPlayerDead) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to change the moon while they are dead on the server."); ClientRpcParams val2 = default(ClientRpcParams); val2.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams = val2; HostFixesServerSendRpcs.Instance.SyncTerminalValuesClientRpc(val.groupCredits, val.numberOfItemsInDropship, val.hasWarrantyTicket, val, clientRpcParams); return; } if (newGroupCreditsAmount < 0) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to set credits to a negative number while changing levels."); ClientRpcParams val2 = default(ClientRpcParams); val2.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams2 = val2; HostFixesServerSendRpcs.Instance.SyncTerminalValuesClientRpc(val.groupCredits, val.numberOfItemsInDropship, val.hasWarrantyTicket, val, clientRpcParams2); return; } if (!configCheckPrices.Value) { instance.ChangeLevelServerRpc(levelID, newGroupCreditsAmount); return; } if (moons.Count == 0) { moons = (from moon in val.terminalNodes.allKeywords.First((TerminalKeyword keyword) => ((Object)keyword).name == "Route").compatibleNouns group moon by moon.noun into moon select moon.First() into moon select moon.result.terminalOptions.First((CompatibleNoun option) => ((Object)option.noun).name == "Confirm")).ToDictionary((CompatibleNoun option) => option.result.buyRerouteToMoon, (CompatibleNoun option) => option.result.itemCost); } if (!moons.ContainsKey(levelID)) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) sent levelID ({levelID}) that is not in the moons array."); ClientRpcParams val2 = default(ClientRpcParams); val2.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams3 = val2; HostFixesServerSendRpcs.Instance.SyncTerminalValuesClientRpc(val.groupCredits, val.numberOfItemsInDropship, val.hasWarrantyTicket, val, clientRpcParams3); return; } int num = moons[levelID]; if (val.groupCredits - num != newGroupCreditsAmount) { Log.LogInfo((object)($"Player #{value} ({playerUsername}) calculated credit amount does not match sent credit amount for moon. " + $"Spent credits: {val.groupCredits - newGroupCreditsAmount} Moon cost: {num}")); ClientRpcParams val2 = default(ClientRpcParams); val2.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams4 = val2; HostFixesServerSendRpcs.Instance.SyncTerminalValuesClientRpc(val.groupCredits, val.numberOfItemsInDropship, val.hasWarrantyTicket, val, clientRpcParams4); } else if (newGroupCreditsAmount > val.groupCredits) { Log.LogInfo((object)($"Player #{value} ({playerUsername}) attempted to increase credits by changing levels. " + $"Attempted Credit Value: {newGroupCreditsAmount} Old Credit Value: {val.groupCredits}")); ClientRpcParams val2 = default(ClientRpcParams); val2.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams5 = val2; HostFixesServerSendRpcs.Instance.SyncTerminalValuesClientRpc(val.groupCredits, val.numberOfItemsInDropship, val.hasWarrantyTicket, val, clientRpcParams5); } else { instance.ChangeLevelServerRpc(levelID, newGroupCreditsAmount); } } public void AddPlayerChatMessageServerRpc(string chatMessage, int playerId, HUDManager instance, ServerRpcParams serverRpcParams) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) if (string.IsNullOrWhiteSpace(chatMessage)) { return; } ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)($"[AddPlayerChatMessageServerRpc] Failed to get the playerId from senderClientId: ({senderClientId}) " + "Message: (" + chatMessage + ")")); return; } string playerUsername = StartOfRound.Instance.allPlayerScripts[value].playerUsername; if (StartOfRound.Instance.allPlayerScripts[value].isPlayerDead) { Log.LogInfo((object)($"Player #{value} ({playerUsername}) tried sending a chat message while they are dead on the server. " + "Message: (" + chatMessage + ")")); return; } if (playerId < 0 || playerId >= StartOfRound.Instance.allPlayerScripts.Length) { Log.LogInfo((object)($"Player #{value} ({playerUsername}) tried to chat with a playerId ({playerId}) that is not a valid player. " + "Message: (" + chatMessage + ")")); return; } string text = Regex.Replace(chatMessage, "<(\\S+?)>", "($+)"); if (string.IsNullOrWhiteSpace(text)) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) Chat message was empty after sanitization. Original Message: ({chatMessage})"); return; } if (playerId == value) { instance.AddPlayerChatMessageServerRpc(text, playerId); return; } Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to send message as another player #({playerId}) Message: ({chatMessage})"); } public void AddTextMessageServerRpc(string chatMessage, HUDManager instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[AddTextMessageServerRpc] Failed to get the playerId from senderClientId: ({senderClientId}) Message: ({chatMessage})"); return; } string playerUsername = StartOfRound.Instance.allPlayerScripts[value].playerUsername; ulong playerSteamId = StartOfRound.Instance.allPlayerScripts[value].playerSteamId; if (GameNetworkManager.Instance.disableSteam) { HUDManager.Instance.AddTextMessageServerRpc(chatMessage); } else if (!chatMessage.EndsWith(" started the ship.")) { if (!playerSteamNames.TryGetValue(playerSteamId, out string value2)) { Log.LogError((object)$"Failed to get steam username from playerlist for steamId: {playerSteamId} Message: ({chatMessage})"); } else if (senderClientId == 0L || chatMessage.Equals(playerUsername + " joined the ship.") || chatMessage.Equals(value2 + " joined the ship.") || chatMessage.Equals(value2 + "... joined the ship.") || chatMessage.Equals(playerUsername + " was left behind.") || chatMessage.StartsWith($"[morecompanycosmetics];{value};")) { instance.AddTextMessageServerRpc(chatMessage); } else { Log.LogInfo((object)$"Player #{value} ({value2}) tried to send message as the server: ({chatMessage})"); } } } public void SetShipLeaveEarlyServerRpc(TimeOfDay instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[SetShipLeaveEarlyServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); } else if (!votedToLeaveEarlyPlayers.Contains(senderClientId) && StartOfRound.Instance.allPlayerScripts[value].isPlayerDead) { votedToLeaveEarlyPlayers.Add(senderClientId); int val = StartOfRound.Instance.connectedPlayersAmount + 1 - StartOfRound.Instance.livingPlayers; if (votedToLeaveEarlyPlayers.Count >= Math.Max(val, configMinimumVotesToLeaveEarly.Value)) { instance.votesForShipToLeaveEarly = votedToLeaveEarlyPlayers.Count; instance.SetShipLeaveEarlyClientRpc(instance.normalizedTimeOfDay + 0.1f, instance.votesForShipToLeaveEarly); } else { instance.votesForShipToLeaveEarly++; instance.AddVoteForShipToLeaveEarlyClientRpc(); } } else { string playerUsername = StartOfRound.Instance.allPlayerScripts[value].playerUsername; Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to force the vote to leave."); } } public void PlaceShipObjectServerRpc(Vector3 newPosition, Vector3 newRotation, NetworkObjectReference objectRef, int playerWhoMoved, ShipBuildModeManager instance, ServerRpcParams serverRpcParams) { //IL_0000: 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_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_0139: 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) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_028a: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_0359: Unknown result type (might be due to invalid IL or missing references) //IL_035a: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[PlaceShipObjectServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); } else { if (playerMovedShipObject.TryGetValue(value, out var value2) && value2) { return; } ((MonoBehaviour)Instance).StartCoroutine(PlaceShipObjectCooldown(value)); PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (playerWhoMoved != value) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to place a ship object while spoofing another player."); return; } if (val.isPlayerDead) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to place a ship object while dead on the server."); return; } GameObject val2 = NetworkObjectReference.op_Implicit(objectRef); if ((Object)(object)val2 == (Object)null) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to move a ship object that doesn't exist."); return; } PlaceableShipObject componentInChildren = val2.GetComponentInChildren<PlaceableShipObject>(); if ((Object)(object)componentInChildren == (Object)null) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to move a ship object using an invalid object. ({((Object)val2).name})"); return; } if (configShipObjectRotationCheck.Value && (Mathf.RoundToInt(newRotation.x) != Mathf.RoundToInt(((Component)componentInChildren.mainMesh).transform.eulerAngles.x) || Mathf.RoundToInt(newRotation.z) != Mathf.RoundToInt(((Component)componentInChildren.mainMesh).transform.eulerAngles.z))) { ManualLogSource log = Log; string[] obj = new string[6] { $"Player #{value} ({val.playerUsername}) ", "tried to place a ship object (", null, null, null, null }; AutoParentToShip parentObject = componentInChildren.parentObject; obj[2] = ((parentObject != null) ? ((Object)parentObject).name : null); obj[3] = ") with the wrong rotation. "; obj[4] = $"x: ({newRotation.x}) ({((Component)componentInChildren.mainMesh).transform.eulerAngles.x}) "; obj[5] = $"z: ({newRotation.z}) ({((Component)componentInChildren.mainMesh).transform.eulerAngles.z})"; log.LogInfo((object)string.Concat(obj)); return; } Bounds bounds = StartOfRound.Instance.shipInnerRoomBounds.bounds; if (!((Bounds)(ref bounds)).Contains(newPosition)) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to place a ship object ouside of the ship."); return; } if (senderClientId == 0L) { instance.PlaceShipObjectServerRpc(newPosition, newRotation, objectRef, playerWhoMoved); return; } ShipTeleporter val3 = default(ShipTeleporter); if ((Object)(object)componentInChildren != (Object)null && (Object)(object)componentInChildren.parentObject != (Object)null && ((object)componentInChildren.parentObject).GetType() == typeof(ShipTeleporter) && ((Component)componentInChildren.parentObject).TryGetComponent<ShipTeleporter>(ref val3) && val3.isInverseTeleporter && pressTeleportButtonOnCooldown.Contains(val3)) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) moved inverse teleporter while it is currently teleporting."); } if (configLogShipObjects.Value) { ManualLogSource log2 = Log; object arg = value; string playerUsername = val.playerUsername; object arg2; if (componentInChildren == null) { arg2 = null; } else { AutoParentToShip parentObject2 = componentInChildren.parentObject; arg2 = ((parentObject2 != null) ? ((Object)parentObject2).name : null); } log2.LogInfo((object)$"Player #{arg} ({playerUsername}) moved ship object. ({arg2})"); } instance.PlaceShipObjectServerRpc(newPosition, newRotation, objectRef, playerWhoMoved); } } public void DespawnEnemyServerRpc(NetworkObjectReference enemyNetworkObject, RoundManager instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: 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_0046: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[DespawnEnemyServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } GameObject val = NetworkObjectReference.op_Implicit(enemyNetworkObject); if (senderClientId == 0L) { instance.DespawnEnemyServerRpc(enemyNetworkObject); return; } string playerUsername = StartOfRound.Instance.allPlayerScripts[value].playerUsername; Log.LogInfo((object)($"Player #{value} ({playerUsername}) attemped to despawn an enemy on the server: " + $"{((val != null) ? ((Object)val).name : null)} {((NetworkObjectReference)(ref enemyNetworkObject)).NetworkObjectId}")); } public void EndGameServerRpc(int playerClientId, StartOfRound instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[EndGameServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } if (senderClientId == 0L) { instance.EndGameServerRpc(playerClientId); return; } if (endGameOnCoolown.TryGetValue(value, out var value2) && value2) { ((MonoBehaviour)Instance).StartCoroutine(EndGameCooldown(value)); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (playerClientId != value) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to end the game while spoofing another player."); return; } if (val.isPlayerDead) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to end the game while dead on the server."); return; } float num = Vector3.Distance(((Component)Object.FindFirstObjectByType<StartMatchLever>()).transform.position, ((Component)val).transform.position); if ((float)configLimitShipLeverDistance.Value > 1f && num > (float)configLimitShipLeverDistance.Value) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to end the game while too far away ({num})."); } else { instance.EndGameServerRpc(playerClientId); } } public void PlayerLoadedServerRpc(ulong clientId, StartOfRound instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (senderClientId == 0L) { instance.PlayerLoadedServerRpc(clientId); return; } if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[PlayerLoadedServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (clientId != senderClientId) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to call PlayerLoadedServerRpc for another client."); } else if (!instance.fullyLoadedPlayers.Contains(clientId)) { instance.PlayerLoadedServerRpc(clientId); } } public void FinishedGeneratingLevelServerRpc(ulong clientId, RoundManager instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (senderClientId == 0L) { instance.FinishedGeneratingLevelServerRpc(clientId); return; } if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[FinishedGeneratingLevelServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (clientId != senderClientId) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to call FinishedGeneratingLevelServerRpc for another client."); } else if (!instance.playersFinishedGeneratingFloor.Contains(clientId)) { instance.FinishedGeneratingLevelServerRpc(clientId); } } public void SendNewPlayerValuesServerRpc(ulong newPlayerSteamId, PlayerControllerB instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[SendNewPlayerValuesServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (instance.actualClientId != senderClientId) { Log.LogInfo((object)($"Player #{value} ({val.playerUsername}) " + $"tried to call SendNewPlayerValuesServerRpc with input value ({newPlayerSteamId}) " + $"on player #{instance.playerClientId} ({instance.playerUsername}).")); return; } if (GameNetworkManager.Instance.disableSteam) { instance.SendNewPlayerValuesServerRpc(newPlayerSteamId); return; } if (!ClientIdToSteamIdMap.TryGetValue(senderClientId, out var value2)) { Log.LogError((object)$"[SendNewPlayerValuesServerRpc] Could not get steamId ({value2}) in steamIdtoClientIdMap"); return; } if (((NetworkBehaviour)instance).OwnerClientId != senderClientId) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) SteamId:({value2}) sent SendNewPlayerValuesServerRpc for the wrong player."); return; } if (value2 != newPlayerSteamId) { Log.LogInfo((object)$"Client sent incorrect steamId. Player's steamId: ({value2}) Sent steamId: ({newPlayerSteamId})"); } instance.SendNewPlayerValuesServerRpc(value2); } public void DamagePlayerFromOtherClientServerRpc(int damageAmount, Vector3 hitDirection, int playerWhoHit, PlayerControllerB instance, ServerRpcParams serverRpcParams) { //IL_0000: 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_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[DamagePlayerFromOtherClientServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } string playerUsername = StartOfRound.Instance.allPlayerScripts[value].playerUsername; PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (senderClientId == 0L && playerWhoHit == -1) { instance.DamagePlayerFromOtherClientServerRpc(damageAmount, hitDirection, playerWhoHit); } else { if (damagePlayerFromOtherClientOnCooldown.TryGetValue(value, out var value2) && value2) { return; } ((MonoBehaviour)instance).StartCoroutine(DamageOtherPlayerCooldown(value)); if (playerWhoHit != value) { Log.LogInfo((object)($"Player #{value} ({playerUsername}) tried to spoof ({damageAmount}) damage from player #{playerWhoHit} " + "on (" + instance.playerUsername + ").")); return; } if (val.isPlayerDead) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to damage ({instance.playerUsername}) while they are dead on the server."); return; } if (Vector3.Distance(((Component)val).transform.position, ((Component)instance).transform.position) > 10f) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to damage ({instance.playerUsername}) from too far away."); return; } Shovel obj = Object.FindFirstObjectByType<Shovel>((FindObjectsInactive)1); if (obj != null && obj.shovelHitForce == 1 && damageAmount > 20) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to damage ({instance.playerUsername}) for extra damage ({damageAmount})"); return; } if (configDisablePvpInShip.Value) { Bounds bounds = StartOfRound.Instance.shipInnerRoomBounds.bounds; if (((Bounds)(ref bounds)).Contains(((Component)instance).transform.position)) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to damage ({instance.playerUsername}) inside the ship."); return; } } if (configLogPvp.Value) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) damaged ({instance.playerUsername}) for ({damageAmount}) damage."); } instance.DamagePlayerFromOtherClientServerRpc(damageAmount, hitDirection, playerWhoHit); } } public void ShootGunServerRpc(Vector3 shotgunPosition, Vector3 shotgunForward, ShotgunItem instance, ServerRpcParams serverRpcParams) { //IL_0000: 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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_004f: 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_00cf: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[ShootGunServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } if (senderClientId == 0L && (Object)(object)((GrabbableObject)instance).playerHeldBy == (Object)null) { instance.ShootGunServerRpc(shotgunPosition, shotgunForward); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (Vector3.Distance(((Component)instance).transform.position, shotgunPosition) > val.grabDistance + 7f) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to shoot shotgun from too far away from shotgun position."); } else if (instance.shellsLoaded < 1) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to force shotgun to shoot with no ammo."); } else { instance.ShootGunClientRpc(shotgunPosition, shotgunForward); } } public void ReloadGunEffectsServerRpc(bool start, ShotgunItem instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[ReloadGunEffectsServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (reloadGunEffectsOnCooldown.TryGetValue(value, out var value2) && value2) { return; } ((MonoBehaviour)Instance).StartCoroutine(ReloadGunEffectsCooldown(value)); int num = instance.FindAmmoInInventory(); if (num == -1) { return; } if ((Object)(object)val.ItemSlots[num] == (Object)null) { Log.LogWarning((object)"Item slot was null while reloading shotgun. Should never be null."); } if (instance.shellsLoaded < 2) { if (((object)val.ItemSlots[num]).GetType() == typeof(GunAmmo)) { val.DestroyItemInSlot(num); } else { Log.LogWarning((object)$"[ReloadGunEffectsServerRpc] Found item type that wasn't GunAmmo {((object)val.ItemSlots[num]).GetType()}"); } instance.shellsLoaded++; instance.ReloadGunEffectsServerRpc(start); } } public void ChangeOwnershipOfPropServerRpc(ulong NewOwner, GrabbableObject instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[ChangeOwnershipOfPropServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (senderClientId != 0L) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) called ChangeOwnershipOfPropServerRpc while not the host."); } else { instance.ChangeOwnershipOfPropServerRpc(NewOwner); } } public void GrabObjectServerRpc(NetworkObjectReference grabbedObject, PlayerControllerB instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: 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_007f: 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_009c: 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_00a3: 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_00ad: 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_00fe: 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_02aa: Unknown result type (might be due to invalid IL or missing references) //IL_019d: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01da: 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_0366: Unknown result type (might be due to invalid IL or missing references) //IL_032d: Unknown result type (might be due to invalid IL or missing references) //IL_0337: Unknown result type (might be due to invalid IL or missing references) //IL_034a: Unknown result type (might be due to invalid IL or missing references) //IL_034c: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_0353: Unknown result type (might be due to invalid IL or missing references) //IL_035b: Unknown result type (might be due to invalid IL or missing references) //IL_035d: Unknown result type (might be due to invalid IL or missing references) //IL_02d7: 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_026a: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_027f: Unknown result type (might be due to invalid IL or missing references) //IL_0284: 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_028e: Unknown result type (might be due to invalid IL or missing references) //IL_0290: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[GrabObjectServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } string playerUsername = StartOfRound.Instance.allPlayerScripts[value].playerUsername; PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (val.isPlayerDead) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to pickup an object while they are dead on the server."); ClientRpcParams val2 = default(ClientRpcParams); val2.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams = val2; HostFixesServerSendRpcs.Instance.GrabObjectClientRpc(grabValidated: false, grabbedObject, instance, clientRpcParams); return; } GameObject val3 = NetworkObjectReference.op_Implicit(grabbedObject); if ((Object)(object)val3 == (Object)null) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) sent a network object that does not exist. ({((NetworkObjectReference)(ref grabbedObject)).NetworkObjectId})"); } else if (!configLimitGrabDistance.Value) { instance.GrabObjectServerRpc(grabbedObject); } else { GrabbableObject val4 = default(GrabbableObject); if (!val3.TryGetComponent<GrabbableObject>(ref val4)) { return; } if (val4.isHeld && (Object)(object)val4.playerHeldBy != (Object)null && (Object)(object)val4.playerHeldBy != (Object)(object)val) { Log.LogInfo((object)($"Player #{value} ({playerUsername}) tried to pickup an object held by someone else " + "(" + val4.playerHeldBy.playerUsername + "). Syncing (" + ((Object)val4).name + ")")); ClientRpcParams val2 = default(ClientRpcParams); val2.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams2 = val2; HostFixesServerSendRpcs.Instance.GrabObjectClientRpc(grabValidated: false, grabbedObject, instance, clientRpcParams2); ((MonoBehaviour)Instance).StartCoroutine(Call_GrabObjectClientRpc_AfterOneFrame(grabValidated: true, grabbedObject, val4.playerHeldBy, clientRpcParams2)); } else if (configLimitTwoHandedItemPickup.Value && val4.itemProperties.twoHanded && instance.ItemSlots.Any((GrabbableObject item) => (Object)(object)item != (Object)null && item.itemProperties.twoHanded)) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to pickup an extra two-handed object ({((Object)val4).name}"); ClientRpcParams val2 = default(ClientRpcParams); val2.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams3 = val2; HostFixesServerSendRpcs.Instance.GrabObjectClientRpc(grabValidated: false, grabbedObject, instance, clientRpcParams3); } else { float num = Vector3.Distance(val3.transform.position, ((Component)val).transform.position); bool flag = (Object)(object)val3.GetComponent<RagdollGrabbableObject>() == (Object)null; if (instance.isInHangarShipRoom && val4.isInShipRoom) { instance.GrabObjectServerRpc(grabbedObject); } else if (num > instance.grabDistance + 7f && flag) { Log.LogInfo((object)($"Player #{value} ({playerUsername}) " + $"Object ({((Object)val3).name}) pickup distance ({num}) is too far away. Could be desync.")); ClientRpcParams val2 = default(ClientRpcParams); val2.Send = new ClientRpcSendParams { TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(senderClientId) }; ClientRpcParams clientRpcParams4 = val2; HostFixesServerSendRpcs.Instance.GrabObjectClientRpc(grabValidated: false, grabbedObject, instance, clientRpcParams4); } else { instance.GrabObjectServerRpc(grabbedObject); } } } } public void EquipItemServerRpc(GrabbableObject instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[EquipItemServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (!val.isPlayerDead) { if (!val.ItemSlots.Contains(instance)) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) equipped item is not in ItemSlots. {((Object)instance).name}"); } else { instance.EquipItemServerRpc(); } } } public void ThrowObjectServerRpc(NetworkObjectReference grabbedObject, bool droppedInElevator, bool droppedInShipRoom, Vector3 targetFloorPosition, int floorYRot, PlayerControllerB instance, ServerRpcParams serverRpcParams) { //IL_0000: 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_0069: 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_004d: 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_00ac: 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_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: 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_00f6: 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_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013a: 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_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0107: 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) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: 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_0169: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0184: 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_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01f8: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[ThrowObjectServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } if (!configExperimentalChanges.Value) { instance.ThrowObjectServerRpc(grabbedObject, droppedInElevator, droppedInShipRoom, targetFloorPosition, floorYRot); return; } string playerUsername = StartOfRound.Instance.allPlayerScripts[value].playerUsername; GameObject val = NetworkObjectReference.op_Implicit(grabbedObject); if ((Object)(object)val == (Object)null) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to throw an object that doesn't exist. ({grabbedObject.m_NetworkObjectId})"); return; } StunGrenadeItem val2 = default(StunGrenadeItem); if (val.TryGetComponent<StunGrenadeItem>(ref val2)) { instance.ThrowObjectServerRpc(grabbedObject, droppedInElevator, droppedInShipRoom, targetFloorPosition, floorYRot); return; } GrabbableObject val3 = default(GrabbableObject); if (!val.TryGetComponent<GrabbableObject>(ref val3)) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to throw an object that isn't a GrabbleObject. ({((Object)val).name})"); return; } Vector3 itemFloorPosition = val3.GetItemFloorPosition(default(Vector3)); Vector3 val4; Vector3 val5; if (droppedInElevator) { val4 = instance.playersManager.elevatorTransform.TransformPoint(targetFloorPosition); val5 = instance.playersManager.elevatorTransform.InverseTransformPoint(itemFloorPosition); } else { val4 = instance.playersManager.propsContainer.TransformPoint(targetFloorPosition); val5 = instance.playersManager.propsContainer.InverseTransformPoint(itemFloorPosition); } float num = Vector3.Distance(new Vector3(((Component)instance).transform.position.x, ((Component)instance).transform.position.z, 0f), new Vector3(val4.x, val4.z, 0f)); if (num > instance.grabDistance + 7f) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to throw an object to far away. ({num}) ({((Object)val).name})"); instance.ThrowObjectServerRpc(grabbedObject, instance.isInElevator, instance.isInHangarShipRoom, val5, floorYRot); } else { instance.ThrowObjectServerRpc(grabbedObject, droppedInElevator, droppedInShipRoom, targetFloorPosition, floorYRot); } } public void PlaceObjectServerRpc(NetworkObjectReference grabbedObject, NetworkObjectReference parentObject, Vector3 placePositionOffset, bool matchRotationOfParent, PlayerControllerB instance, ServerRpcParams serverRpcParams) { //IL_0000: 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_0069: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: 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_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_0323: Unknown result type (might be due to invalid IL or missing references) //IL_0324: Unknown result type (might be due to invalid IL or missing references) //IL_0325: 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_0286: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_0227: Unknown result type (might be due to invalid IL or missing references) //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_0307: Unknown result type (might be due to invalid IL or missing references) //IL_0310: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[ThrowObjectServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } if (!configExperimentalChanges.Value) { instance.PlaceObjectServerRpc(grabbedObject, parentObject, placePositionOffset, matchRotationOfParent); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; string playerUsername = val.playerUsername; GameObject val2 = NetworkObjectReference.op_Implicit(grabbedObject); if ((Object)(object)val2 == (Object)null) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) sent a grabbed item that doesn't exist ({((NetworkObjectReference)(ref grabbedObject)).NetworkObjectId})"); return; } GameObject val3 = NetworkObjectReference.op_Implicit(parentObject); if ((Object)(object)val3 == (Object)null) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) sent a parent object that doesn't exist ({((NetworkObjectReference)(ref parentObject)).NetworkObjectId})"); return; } GrabbableObject val4 = default(GrabbableObject); if (!val2.TryGetComponent<GrabbableObject>(ref val4)) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to place an object that isn't a grabbable object ({((Object)val2).name})"); return; } if (val4.isHeld && (Object)(object)val4.playerHeldBy != (Object)null && (Object)(object)val4.playerHeldBy != (Object)(object)val) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to place an object held by someone else. ({((Object)val4).name}) ({val4.playerHeldBy})"); return; } float num = Vector3.Distance(((Component)instance).transform.position, val3.transform.position); Vector3 itemFloorPosition = val4.GetItemFloorPosition(default(Vector3)); Vector3 val5 = ((!instance.isInElevator) ? instance.playersManager.propsContainer.InverseTransformPoint(itemFloorPosition) : instance.playersManager.elevatorTransform.InverseTransformPoint(itemFloorPosition)); DepositItemsDesk val6 = default(DepositItemsDesk); if (num > instance.grabDistance + 7f) { if (itemFloorPosition == ((Component)instance).transform.position) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to place an object too far away and it didn't fall. {((Object)val4).name} {itemFloorPosition}"); } Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to place an object too far away. ({(int)num}) ({((Object)val4).name})"); instance.ThrowObjectServerRpc(grabbedObject, instance.isInElevator, instance.isInHangarShipRoom, val5, (int)((Component)instance).transform.localEulerAngles.y); } else if ((Object)(object)val3.transform.parent != (Object)null && ((Component)val3.transform.parent).TryGetComponent<DepositItemsDesk>(ref val6) && ((Component)val6.deskObjectsContainer).GetComponentsInChildren<GrabbableObject>().Length > 12) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to place extra items on the company desk."); instance.ThrowObjectServerRpc(grabbedObject, instance.isInElevator, instance.isInHangarShipRoom, val5, (int)((Component)instance).transform.localEulerAngles.y); } else { instance.PlaceObjectServerRpc(grabbedObject, parentObject, placePositionOffset, matchRotationOfParent); } } public void AddObjectToDeskServerRpc(NetworkObjectReference grabbableObjectNetObject, DepositItemsDesk instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: 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_0163: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[ThrowObjectServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } if (!configExperimentalChanges.Value) { instance.AddObjectToDeskServerRpc(grabbableObjectNetObject); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; string playerUsername = val.playerUsername; GameObject val2 = NetworkObjectReference.op_Implicit(grabbableObjectNetObject); if ((Object)(object)val2 == (Object)null) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) sent a grabbable object that doesn't exist. ({((NetworkObjectReference)(ref grabbableObjectNetObject)).NetworkObjectId})"); } else if (!(Vector3.Distance(((Component)val).transform.position, ((Component)instance.deskObjectsContainer).transform.position) > val.grabDistance + 7f)) { GrabbableObject val3 = default(GrabbableObject); if (((Component)instance.deskObjectsContainer).GetComponentsInChildren<GrabbableObject>().Length > 12) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to add extra items to the company desk."); } else if (!val2.TryGetComponent<GrabbableObject>(ref val3)) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to add an object to the desk that isn't a grabbable object ({((Object)val2).name})"); } else if (val3.isHeld && (Object)(object)val3.playerHeldBy != (Object)(object)val) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to add an object to the desk held by someone else. ({((Object)val3).name})"); } else { instance.AddObjectToDeskServerRpc(grabbableObjectNetObject); } } } public void SetTimesHeardNoiseServerRpc(float valueChange, DepositItemsDesk instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) if (serverRpcParams.Receive.SenderClientId == 0L) { instance.SetTimesHeardNoiseServerRpc(valueChange * (float)(StartOfRound.Instance.connectedPlayersAmount + 1)); } } public void SetPatienceServerRpc(float valueChange, DepositItemsDesk instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var _)) { Log.LogError((object)$"[SetPatienceServerRpc] Failed to get the playerId from clientId: {senderClientId}"); } else if (senderClientId == 0L) { instance.SetPatienceServerRpc(valueChange * (float)(StartOfRound.Instance.connectedPlayersAmount + 1)); } } public void SetShipLightsServerRpc(bool setLightsOn, ShipLights instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: 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_00bb: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[SetShipLightsServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); } else if (senderClientId == 0L) { StartOfRound.Instance.shipRoomLights.SetShipLightsServerRpc(setLightsOn); } else { if (shipLightsOnCooldown) { return; } ((MonoBehaviour)Instance).StartCoroutine(ShipLightsCooldown()); string playerUsername = StartOfRound.Instance.allPlayerScripts[value].playerUsername; PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (val.isPlayerDead) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to toggle ship lights while they are dead on the server."); return; } float num = Vector3.Distance(((Component)instance).transform.position, ((Component)val).transform.position); if (num > 20f && !val.ItemSlots.Any((GrabbableObject item) => (Object)(object)item != (Object)null && new Func<RemoteProp>(((Component)item).GetComponent<RemoteProp>) != null)) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to toggle ship lights without a remote from too faw away. ({num})"); } else { instance.SetShipLightsServerRpc(setLightsOn); } } } public void UseSignalTranslatorServerRpc(string signalMessage, HUDManager instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[UseSignalTranslatorServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; string playerUsername = val.playerUsername; if (StartOfRound.Instance.allPlayerScripts[value].isPlayerDead) { Log.LogInfo((object)($"Player #{value} ({playerUsername}) tried to send a Signal Translator message while they are dead on the server." + " Message: (" + signalMessage + ")")); return; } if (configLogSignalTranslatorMessages.Value) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) sent signal translator message: ({signalMessage})"); } if (Vector3.Distance(((Component)Object.FindObjectOfType<Terminal>()).transform.position, ((Component)val).transform.position) > 20f) { Log.LogInfo((object)$"Player #{value} ({playerUsername}) tried to send signal translator message to far away from terminal."); } else { instance.UseSignalTranslatorServerRpc(signalMessage); } } public void TeleportPlayerServerRpc(int playerObj, EntranceTeleport instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[TeleportPlayerServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } if (senderClientId == 0L) { instance.TeleportPlayerServerRpc(playerObj); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (playerObj != value) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to teleport another player using an entrance teleport)"); return; } float num = Vector3.Distance(instance.entrancePoint.position, ((Component)val).transform.position); if (num > 10f) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) too far away from entrance to teleport ({num})"); return; } Transform exitPoint = instance.exitPoint; if ((Object)(object)exitPoint == (Object)null) { instance.FindExitPoint(); exitPoint = instance.exitPoint; } playerPositions[(ulong)value] = exitPoint.position; instance.TeleportPlayerServerRpc(playerObj); } public void PressTeleportButtonServerRpc(ShipTeleporter instance, ServerRpcParams serverRpcParams) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: 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_00b0: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[PressTeleportButtonServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); } else { if (pressTeleportButtonOnCooldown.Contains(instance)) { return; } ((MonoBehaviour)Instance).StartCoroutine(PressTeleportButtonCooldown(instance)); if (senderClientId == 0L) { instance.PressTeleportButtonServerRpc(); return; } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; if (val.isPlayerDead) { Log.LogInfo((object)$"Player #{value} ({val.playerUsername}) tried to press teleporter button while they are dead on the server."); return; } float num = Vector3.Distance(((Component)val).transform.position, ((Component)instance.buttonTrigger).transform.position); if ((float)configLimitTeleporterButtonDistance.Value > 1f && num > (float)configLimitTeleporterButtonDistance.Value) { Log.LogInfo((object)($"Player #{value} ({val.playerUsername}) tried to press teleporter button from too far away " + $"({num})")); } else { instance.PressTeleportButtonServerRpc(); } } } public void TeleportPlayerOutServerRpc(int playerObj, Vector3 teleportPos, ShipTeleporter instance, ServerRpcParams serverRpcParams) { //IL_0000: 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_007e: 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) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[TeleportPlayerOutServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } if (playerObj != value) { Log.LogInfo((object)$"[TeleportPlayerOutServerRpc] playerObj ({playerObj}) != senderPlayerId ({value})"); } PlayerControllerB val = StartOfRound.Instance.allPlayerScripts[value]; playerPositions[val.playerClientId] = ((Component)val).transform.localPosition; instance.TeleportPlayerOutServerRpc(playerObj, teleportPos); } public void UpdatePlayerPositionServerRpc(Vector3 newPos, bool inElevator, bool inShipRoom, bool exhausted, bool isPlayerGrounded, PlayerControllerB instance, ServerRpcParams serverRpcParams) { //IL_0000: 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_0070: 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_0075: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (!StartOfRound.Instance.ClientPlayerList.TryGetValue(senderClientId, out var value)) { Log.LogError((object)$"[UpdatePlayerPositionServerRpc] Failed to get the playerId from senderClientId: {senderClientId}"); return; } if (instance.isPlayerDead) { allowedMovement[instance.playerClientId] = false; return; } Vector3 val = (inElevator ? ((Component)instance).transform.localPosition : ((Component)instance).transform.position); if (!onShip.TryGetValue(instance.playerClientId, out var value2) || value2 != inElevator) { playerPositions[instance.playerClientId] = val; positionCacheUpdateTime[instance.playerClientId] = Time.time; onShip[instance.playerClientId] = inElevator; } PlayerControllerB val2 = StartOfRound.Instance.allPlayerScripts[value]; if (configExperimentalPositionCheck.Value && !StartOfRound.Instance.suckingPlayersOutOfShip && !StartOfRound.Instance.inShipPhase) { Vector3 val3 = newPos - val; if (!(Vector3.Dot(((Vector3)(ref val3)).normalized, Vector3.down) > 0.3f)) { if (Vector3.Distance(newPos, playerPositions[instance.playerClientId]) > 150f) { InfoPanel.Instance.Log($"Player #{value} ({val2.playerUsername}) UpdatePlayerPositionServerRpc {Vector3.Distance(newPos, playerPositions[instance.playerClientId])}"); allowedMovement[instance.playerClientId] = false; } else { allowedMovement[instance.playerClientId] = true; instance.UpdatePlayerPositionServerRpc(newPos, inElevator, inShipRoom, exhausted, isPlayerGrounded); } return; } } instance.UpdatePlayerPositionServerRpc(newPos, inElevator, inShipRoom, exhausted, isPlayerGrounded); allowedMovement[instance.playerClientId] = true; } public void UpdatePlayerRotationServerRpc(short newRot, short newYRot, PlayerControllerB instance, ServerRpcParams _) { if (!allowedMovement.ContainsKey(instance.playerClientId) || allowedMovement[instance.playerClientId]) { instance.UpdatePlayerRotationSer