Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of KuchQOL Server v1.2.3
KuchQOL_Server.dll
Decompiled 3 hours agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using KuchQOL_Server.NetcodePatcher; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyVersion("0.0.0.0")] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace LethalKuchQOL.Lobby { [HarmonyPatch(typeof(ItemDropship), "Update")] public static class FastDelivery { private static readonly FieldRef<ItemDropship, Terminal> TerminalRef = AccessTools.FieldRefAccess<ItemDropship, Terminal>("terminalScript"); [HarmonyPrefix] private static void Prefix(ItemDropship __instance) { if (!Plugin.CfgFastDelivery.Value || !((NetworkBehaviour)__instance).IsServer || __instance.deliveringOrder) { return; } Terminal val = TerminalRef.Invoke(__instance); if (!((Object)(object)val == (Object)null) && (val.orderedItemsFromTerminal.Count > 0 || val.orderedVehicleFromTerminal != -1) && !((Object)(object)StartOfRound.Instance == (Object)null) && StartOfRound.Instance.shipHasLanded) { float num = 40f - Plugin.CfgDeliverySeconds.Value; if (__instance.shipTimer < num) { __instance.shipTimer = num; } __instance.playersFirstOrder = false; } } } public class KuchNet : NetworkBehaviour { public NetworkVariable<bool> AllowClientSell = new NetworkVariable<bool>(true, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0); public NetworkVariable<bool> AnnounceSells = new NetworkVariable<bool>(true, (NetworkVariableReadPermission)0, (NetworkVariableWritePermission)0); public static KuchNet Instance { get; private set; } public override void OnNetworkSpawn() { if (!((Component)this).gameObject.activeSelf) { ((Component)this).gameObject.SetActive(true); } Instance = this; Plugin.Log.LogInfo((object)("KuchNet ready (" + (((NetworkBehaviour)this).IsServer ? "host" : "client") + ").")); if (((NetworkBehaviour)this).IsServer) { AllowClientSell.Value = Plugin.CfgAllowClientSell.Value; AnnounceSells.Value = Plugin.CfgAnnounceSells.Value; } ((NetworkBehaviour)this).OnNetworkSpawn(); } public override void OnNetworkDespawn() { if ((Object)(object)Instance == (Object)(object)this) { Instance = null; } ((NetworkBehaviour)this).OnNetworkDespawn(); } public void RequestSell(List<GrabbableObject> items) { //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) NetworkObjectReference[] array = (from g in items where (Object)(object)g != (Object)null select ((Component)g).GetComponent<NetworkObject>() into n where (Object)(object)n != (Object)null select n).Select((Func<NetworkObject, NetworkObjectReference>)((NetworkObject n) => new NetworkObjectReference(n))).ToArray(); if (array.Length != 0) { SellServerRpc(array); } } [ServerRpc(RequireOwnership = false)] private void SellServerRpc(NetworkObjectReference[] refs, ServerRpcParams rpc = default(ServerRpcParams)) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: 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_0160: 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_01ee: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { FastBufferWriter val = ((NetworkBehaviour)this).__beginSendServerRpc(1458917724u, rpc, (RpcDelivery)0); bool flag = refs != null; ((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val)).WriteValueSafe<NetworkObjectReference>(refs, default(ForNetworkSerializable)); } ((NetworkBehaviour)this).__endSendServerRpc(ref val, 1458917724u, rpc, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost)) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; ulong senderClientId = rpc.Receive.SenderClientId; Plugin.Log.LogInfo((object)$"Sell request from client {senderClientId}: {refs.Length} items"); if (senderClientId != 0L && !AllowClientSell.Value) { Plugin.Log.LogInfo((object)"Sell denied: client selling disabled"); DeniedClientRpc(Target(senderClientId)); return; } DepositItemsDesk val2 = Object.FindObjectOfType<DepositItemsDesk>(); if ((Object)(object)val2 == (Object)null || (Object)(object)StartOfRound.Instance == (Object)null || StartOfRound.Instance.inShipPhase) { Plugin.Log.LogWarning((object)$"Sell aborted: desk={(Object)(object)val2 != (Object)null} inShipPhase={StartOfRound.Instance?.inShipPhase}"); return; } List<GrabbableObject> list = new List<GrabbableObject>(); NetworkObject val4 = default(NetworkObject); for (int i = 0; i < refs.Length; i++) { NetworkObjectReference val3 = refs[i]; if (((NetworkObjectReference)(ref val3)).TryGet(ref val4, (NetworkManager)null)) { GrabbableObject componentInChildren = ((Component)val4).GetComponentInChildren<GrabbableObject>(); if ((Object)(object)componentInChildren != (Object)null && !componentInChildren.isHeld && componentInChildren.itemProperties.isScrap) { list.Add(componentInChildren); } } } if (list.Count == 0) { Plugin.Log.LogWarning((object)"Sell aborted: none of the items could be resolved on the host"); } else { ((MonoBehaviour)this).StartCoroutine(SellRoutine(val2, list, refs, senderClientId)); } } private static ClientRpcParams Target(ulong id) { //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_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) return new ClientRpcParams { Send = new ClientRpcSendParams { TargetClientIds = new ulong[1] { id } } }; } private IEnumerator SellRoutine(DepositItemsDesk desk, List<GrabbableObject> items, NetworkObjectReference[] refs, ulong sender) { HideItemsClientRpc(refs); int value = (int)((float)items.Sum((GrabbableObject g) => g.scrapValue) * StartOfRound.Instance.companyBuyingRate); foreach (GrabbableObject item in items) { NetworkObject component = ((Component)item).GetComponent<NetworkObject>(); if (!((Object)(object)component == (Object)null) && !desk.itemsOnCounter.Contains(item)) { desk.itemsOnCounter.Add(item); desk.itemsOnCounterNetworkObjects.Add(component); desk.AddObjectToDeskClientRpc(NetworkObjectReference.op_Implicit(component)); } } int creditsBefore = Object.FindObjectOfType<Terminal>().groupCredits; Plugin.Log.LogInfo((object)$"Placed {items.Count} items on the desk (counter now {desk.itemsOnCounter.Count}), selling for ~${value}"); yield return (object)new WaitForSeconds(0.5f); desk.SellItemsOnServer(); Plugin.Log.LogInfo((object)$"Sold. Credits {creditsBefore} -> {Object.FindObjectOfType<Terminal>().groupCredits}"); if (AnnounceSells.Value) { PlayerControllerB val = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB x) => x.actualClientId == sender)); AnnounceClientRpc(((Object)(object)val != (Object)null) ? val.playerUsername : "Someone", items.Count, value); } } [ClientRpc] private void HideItemsClientRpc(NetworkObjectReference[] refs) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: 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_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val2 = default(ClientRpcParams); FastBufferWriter val = ((NetworkBehaviour)this).__beginSendClientRpc(755129494u, val2, (RpcDelivery)0); bool flag = refs != null; ((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val)).WriteValueSafe<NetworkObjectReference>(refs, default(ForNetworkSerializable)); } ((NetworkBehaviour)this).__endSendClientRpc(ref val, 755129494u, val2, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; DepositItemsDesk val3 = Object.FindObjectOfType<DepositItemsDesk>(); if ((Object)(object)val3 == (Object)null) { return; } NetworkObject val5 = default(NetworkObject); for (int i = 0; i < refs.Length; i++) { NetworkObjectReference val4 = refs[i]; if (((NetworkObjectReference)(ref val4)).TryGet(ref val5, (NetworkManager)null)) { GrabbableObject componentInChildren = ((Component)val5).GetComponentInChildren<GrabbableObject>(); if (!((Object)(object)componentInChildren == (Object)null)) { componentInChildren.EnablePhysics(false); componentInChildren.EnableItemMeshes(false); ((Component)componentInChildren).transform.SetParent(((Component)val3.deskObjectsContainer).transform); ((Component)componentInChildren).transform.localPosition = Vector3.zero; } } } } [ClientRpc] private void AnnounceClientRpc(string who, int count, int value) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0119: 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_00bc: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val2 = default(ClientRpcParams); FastBufferWriter val = ((NetworkBehaviour)this).__beginSendClientRpc(4231591934u, val2, (RpcDelivery)0); bool flag = who != null; ((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val)).WriteValueSafe(who, false); } BytePacker.WriteValueBitPacked(val, count); BytePacker.WriteValueBitPacked(val, value); ((NetworkBehaviour)this).__endSendClientRpc(ref val, 4231591934u, val2, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; HUDManager instance = HUDManager.Instance; if (instance != null) { instance.DisplayTip("Scrap sold", $"{who} sold {count} items for ${value}.", false, false, "LC_Tip1"); } } } [ClientRpc] private void DeniedClientRpc(ClientRpcParams p = default(ClientRpcParams)) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { FastBufferWriter val = ((NetworkBehaviour)this).__beginSendClientRpc(2774942980u, p, (RpcDelivery)0); ((NetworkBehaviour)this).__endSendClientRpc(ref val, 2774942980u, p, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; HUDManager instance = HUDManager.Instance; if (instance != null) { instance.DisplayTip("Sell denied", "The host has disabled client selling.", true, false, "LC_Tip1"); } } } public void SetAllowClientSell(bool v) { if (((NetworkBehaviour)this).IsServer) { AllowClientSell.Value = v; Plugin.CfgAllowClientSell.Value = v; } } public void SetAnnounceSells(bool v) { if (((NetworkBehaviour)this).IsServer) { AnnounceSells.Value = v; Plugin.CfgAnnounceSells.Value = v; } } protected override void __initializeVariables() { if (AllowClientSell == null) { throw new Exception("KuchNet.AllowClientSell cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)AllowClientSell).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)AllowClientSell, "AllowClientSell"); base.NetworkVariableFields.Add((NetworkVariableBase)(object)AllowClientSell); if (AnnounceSells == null) { throw new Exception("KuchNet.AnnounceSells cannot be null. All NetworkVariableBase instances must be initialized."); } ((NetworkVariableBase)AnnounceSells).Initialize((NetworkBehaviour)(object)this); ((NetworkBehaviour)this).__nameNetworkVariable((NetworkVariableBase)(object)AnnounceSells, "AnnounceSells"); base.NetworkVariableFields.Add((NetworkVariableBase)(object)AnnounceSells); ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(1458917724u, new RpcReceiveHandler(__rpc_handler_1458917724), "SellServerRpc"); ((NetworkBehaviour)this).__registerRpc(755129494u, new RpcReceiveHandler(__rpc_handler_755129494), "HideItemsClientRpc"); ((NetworkBehaviour)this).__registerRpc(4231591934u, new RpcReceiveHandler(__rpc_handler_4231591934), "AnnounceClientRpc"); ((NetworkBehaviour)this).__registerRpc(2774942980u, new RpcReceiveHandler(__rpc_handler_2774942980), "DeniedClientRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_1458917724(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0068: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); NetworkObjectReference[] refs = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref refs, default(ForNetworkSerializable)); } ServerRpcParams server = rpcParams.Server; target.__rpc_exec_stage = (__RpcExecStage)1; ((KuchNet)(object)target).SellServerRpc(refs, server); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_755129494(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); NetworkObjectReference[] refs = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref refs, default(ForNetworkSerializable)); } target.__rpc_exec_stage = (__RpcExecStage)1; ((KuchNet)(object)target).HideItemsClientRpc(refs); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_4231591934(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_007b: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); string who = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref who, false); } int count = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref count); int value = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref value); target.__rpc_exec_stage = (__RpcExecStage)1; ((KuchNet)(object)target).AnnounceClientRpc(who, count, value); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2774942980(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ClientRpcParams client = rpcParams.Client; target.__rpc_exec_stage = (__RpcExecStage)1; ((KuchNet)(object)target).DeniedClientRpc(client); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "KuchNet"; } } public class LobbyPanel : MonoBehaviour { private bool open; private GUIStyle panel; private GUIStyle title; private GUIStyle label; private GUIStyle hint; private GUIStyle on; private GUIStyle off; private bool styled; private CursorLockMode prevLock; private void Update() { Keyboard current = Keyboard.current; if (current != null && ((ButtonControl)current.f9Key).wasPressedThisFrame) { SetOpen(!open); } } private void SetOpen(bool o) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) open = o; PlayerControllerB val = GameNetworkManager.Instance?.localPlayerController; if (o) { prevLock = Cursor.lockState; Cursor.lockState = (CursorLockMode)0; Cursor.visible = true; if ((Object)(object)val != (Object)null) { val.disableLookInput = true; } return; } if ((Object)(object)val != (Object)null) { val.disableLookInput = false; } if ((Object)(object)val != (Object)null && !val.quickMenuManager.isMenuOpen && !val.inTerminalMenu) { Cursor.lockState = (CursorLockMode)1; Cursor.visible = false; } else { Cursor.lockState = prevLock; } Plugin.Save(); } private static Texture2D Solid(Color c) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000a: 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_0017: Expected O, but got Unknown Texture2D val = new Texture2D(1, 1); val.SetPixel(0, 0, c); val.Apply(); return val; } private void Style() { //IL_001b: 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_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Expected O, but got Unknown //IL_0061: Expected O, but got Unknown //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: 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_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Expected O, but got Unknown //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Expected O, but got Unknown //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0167: 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_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0198: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: 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_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Expected O, but got Unknown //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_021e: Unknown result type (might be due to invalid IL or missing references) //IL_0228: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Expected O, but got Unknown if (!styled) { styled = true; GUIStyle val = new GUIStyle(GUI.skin.box); val.normal.background = Solid(new Color(0.06f, 0.09f, 0.12f, 0.96f)); val.padding = new RectOffset(18, 18, 14, 14); panel = val; GUIStyle val2 = new GUIStyle(GUI.skin.label) { fontSize = 20, fontStyle = (FontStyle)1 }; val2.normal.textColor = new Color(0.45f, 0.75f, 1f); title = val2; GUIStyle val3 = new GUIStyle(GUI.skin.label) { fontSize = 14 }; val3.normal.textColor = new Color(0.92f, 0.94f, 0.97f); label = val3; GUIStyle val4 = new GUIStyle(GUI.skin.label) { fontSize = 11, wordWrap = true }; val4.normal.textColor = new Color(0.55f, 0.62f, 0.7f); hint = val4; Texture2D background = Solid(new Color(0.45f, 0.75f, 1f)); Texture2D background2 = Solid(new Color(0.22f, 0.25f, 0.3f)); GUIStyle val5 = new GUIStyle(GUI.skin.button) { fixedWidth = 54f, fixedHeight = 24f, fontSize = 11, fontStyle = (FontStyle)1 }; val5.normal.background = background; val5.normal.textColor = Color.black; val5.hover.background = background; val5.hover.textColor = Color.black; val5.active.background = background; on = val5; GUIStyle val6 = new GUIStyle(on); val6.normal.background = background2; val6.normal.textColor = new Color(0.85f, 0.85f, 0.9f); val6.hover.background = background2; val6.hover.textColor = Color.white; val6.active.background = background2; off = val6; } } private void OnGUI() { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) if (!open) { return; } Style(); float num = 460f; float num2 = 420f; Rect val = default(Rect); ((Rect)(ref val))..ctor(((float)Screen.width - num) / 2f, ((float)Screen.height - num2) / 2f, num, num2); GUI.Box(val, GUIContent.none, panel); GUILayout.BeginArea(new Rect(((Rect)(ref val)).x + 18f, ((Rect)(ref val)).y + 14f, num - 36f, num2 - 28f)); GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>()); GUILayout.Label("KuchQOL Server", title, Array.Empty<GUILayoutOption>()); GUILayout.FlexibleSpace(); GUILayout.Label("v1.2.3 F9 to close", hint, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(130f) }); GUILayout.EndHorizontal(); GUILayout.Space(8f); NetworkManager singleton = NetworkManager.Singleton; KuchNet instance = KuchNet.Instance; bool flag = (Object)(object)singleton != (Object)null && singleton.IsListening; bool flag2 = flag && singleton.IsHost; string obj = ((!flag) ? "Not in a lobby" : ((!((Object)(object)instance == (Object)null)) ? (flag2 ? "Synced. You are the host." : "Synced with host.") : (flag2 ? "Spawning..." : "Host does not have KuchQOL Server"))); GUILayout.Label("STATUS", hint, Array.Empty<GUILayoutOption>()); GUILayout.Label(obj, label, Array.Empty<GUILayoutOption>()); GUILayout.Space(10f); GUILayout.Label(flag2 ? "HOST OPTIONS (synced to everyone)" : "HOST OPTIONS (read-only)", hint, Array.Empty<GUILayoutOption>()); bool flag3 = (((Object)(object)instance != (Object)null) ? instance.AllowClientSell.Value : Plugin.CfgAllowClientSell.Value); bool flag4 = (((Object)(object)instance != (Object)null) ? instance.AnnounceSells.Value : Plugin.CfgAnnounceSells.Value); if (Row("Clients can use sell commands", "Non-host players may sell via the terminal.", flag3, flag2 || (Object)(object)instance == (Object)null)) { flag3 = !flag3; if ((Object)(object)instance != (Object)null) { instance.SetAllowClientSell(flag3); } else { Plugin.CfgAllowClientSell.Value = flag3; } } if (Row("Announce sells to everyone", "HUD tip with who sold what for how much.", flag4, flag2 || (Object)(object)instance == (Object)null)) { flag4 = !flag4; if ((Object)(object)instance != (Object)null) { instance.SetAnnounceSells(flag4); } else { Plugin.CfgAnnounceSells.Value = flag4; } } bool value = Plugin.CfgFastDelivery.Value; bool flag5 = flag2 || !flag; if (Row("Fast item delivery", "Dropship arrives after the time below instead of 40 s.", value, flag5)) { Plugin.CfgFastDelivery.Value = !value; } if (Plugin.CfgFastDelivery.Value) { GUILayout.BeginHorizontal(GUI.skin.box, Array.Empty<GUILayoutOption>()); GUILayout.Label("Delivery time", label, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(150f) }); GUI.enabled = flag5; float num3 = Mathf.Round(GUILayout.HorizontalSlider(Plugin.CfgDeliverySeconds.Value, 0f, 40f, (GUILayoutOption[])(object)new GUILayoutOption[1] { GUILayout.Width(160f) })); GUI.enabled = true; GUILayout.Label(num3 + " s", label, Array.Empty<GUILayoutOption>()); GUILayout.EndHorizontal(); if (flag5 && !Mathf.Approximately(num3, Plugin.CfgDeliverySeconds.Value)) { Plugin.CfgDeliverySeconds.Value = num3; } } GUILayout.Space(6f); GUILayout.Label("Settings save to the host's config and apply to the next lobby too. Client features live in KuchQOL Client (F12).", hint, Array.Empty<GUILayoutOption>()); GUILayout.EndArea(); } private bool Row(string name, string desc, bool value, bool editable) { GUILayout.BeginHorizontal(GUI.skin.box, Array.Empty<GUILayoutOption>()); GUILayout.BeginVertical(Array.Empty<GUILayoutOption>()); GUILayout.Label(name, label, Array.Empty<GUILayoutOption>()); GUILayout.Label(desc, hint, Array.Empty<GUILayoutOption>()); GUILayout.EndVertical(); GUILayout.FlexibleSpace(); GUILayout.BeginVertical(Array.Empty<GUILayoutOption>()); GUILayout.Space(8f); GUI.enabled = editable; bool num = GUILayout.Button(value ? "ON" : "OFF", value ? on : off, Array.Empty<GUILayoutOption>()); GUI.enabled = true; GUILayout.EndVertical(); GUILayout.EndHorizontal(); return num && editable; } } [BepInPlugin("ishred.LethalKuchServer", "KuchQOL_Server", "1.2.3")] public class Plugin : BaseUnityPlugin { [HarmonyPatch] private static class Patches { [HarmonyPatch(typeof(GameNetworkManager), "Start")] [HarmonyPostfix] private static void RegisterPrefab() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (!((Object)(object)Prefab != (Object)null)) { GameObject val = new GameObject("ishred.LethalKuchServer Prefabs"); val.SetActive(false); ((Object)val).hideFlags = (HideFlags)61; Object.DontDestroyOnLoad((Object)(object)val); Prefab = new GameObject("ishred.LethalKuchServer Prefab"); ((Object)Prefab).hideFlags = (HideFlags)61; Prefab.transform.SetParent(val.transform); NetworkObject obj = Prefab.AddComponent<NetworkObject>(); typeof(NetworkObject).GetField("GlobalObjectIdHash", BindingFlags.Instance | BindingFlags.NonPublic).SetValue(obj, Hash("ishred.LethalKuchServer")); Prefab.AddComponent<KuchNet>(); NetworkManager.Singleton.AddNetworkPrefab(Prefab); Log.LogInfo((object)"Network prefab registered."); } } [HarmonyPatch(typeof(StartOfRound), "Awake")] [HarmonyPostfix] private static void SpawnOnHost() { NetworkManager singleton = NetworkManager.Singleton; if (!((Object)(object)singleton == (Object)null) && singleton.IsHost && !((Object)(object)Prefab == (Object)null)) { Object.Instantiate<GameObject>(Prefab).GetComponent<NetworkObject>().Spawn(false); Log.LogInfo((object)"KuchNet spawned by host."); } } } public const string GUID = "ishred.LethalKuchServer"; public const string NAME = "KuchQOL_Server"; public const string VERSION = "1.2.3"; internal static ManualLogSource Log; internal static GameObject Prefab; internal static ConfigEntry<bool> CfgAllowClientSell; internal static ConfigEntry<bool> CfgAnnounceSells; internal static ConfigEntry<bool> CfgFastDelivery; internal static ConfigEntry<float> CfgDeliverySeconds; private static Plugin inst; internal static void Save() { Plugin plugin = inst; if (plugin != null) { ((BaseUnityPlugin)plugin).Config.Save(); } } private void Awake() { //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Expected O, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Expected O, but got Unknown //IL_00ec: Unknown result type (might be due to invalid IL or missing references) inst = this; Log = ((BaseUnityPlugin)this).Logger; CfgAllowClientSell = ((BaseUnityPlugin)this).Config.Bind<bool>("Host", "AllowClientSell", false, "Host only: non-host players may use the sell terminal commands."); CfgAnnounceSells = ((BaseUnityPlugin)this).Config.Bind<bool>("Host", "AnnounceSells", false, "Host only: show everyone a HUD tip when scrap is sold via command."); CfgFastDelivery = ((BaseUnityPlugin)this).Config.Bind<bool>("Host", "FastDelivery", false, "Host only: item dropship arrives faster."); CfgDeliverySeconds = ((BaseUnityPlugin)this).Config.Bind<float>("Host", "DeliverySeconds", 3f, new ConfigDescription("Seconds of landed time before the dropship comes. Vanilla 40 (20 first order).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 40f), Array.Empty<object>())); NetcodeInit(); Harmony val = new Harmony("ishred.LethalKuchServer"); val.PatchAll(typeof(Patches)); val.PatchAll(typeof(FastDelivery)); GameObject val2 = new GameObject("KuchQOL Server"); Object.DontDestroyOnLoad((Object)val2); ((Object)val2).hideFlags = (HideFlags)61; val2.AddComponent<LobbyPanel>(); Log.LogInfo((object)"KuchQOL_Server 1.2.3 loaded. F9 opens the server panel."); } private static void NetcodeInit() { Type[] types = Assembly.GetExecutingAssembly().GetTypes(); for (int i = 0; i < types.Length; i++) { MethodInfo[] methods = types[i].GetMethods(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic); foreach (MethodInfo methodInfo in methods) { if (methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false).Length != 0) { methodInfo.Invoke(null, null); } } } } private static uint Hash(string s) { return s.Aggregate(17u, (uint c, char ch) => (c * 31) ^ ch); } } } namespace __GEN { internal class NetworkVariableSerializationHelper { [RuntimeInitializeOnLoadMethod] internal static void InitializeSerialization() { NetworkVariableSerializationTypes.InitializeSerializer_UnmanagedByMemcpy<bool>(); NetworkVariableSerializationTypes.InitializeEqualityChecker_UnmanagedIEquatable<bool>(); } } } namespace KuchQOL_Server.NetcodePatcher { [AttributeUsage(AttributeTargets.Module)] internal class NetcodePatchedAssemblyAttribute : Attribute { } }