using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using HarmonyLib;
using HostControlOnly.UI;
using Microsoft.CodeAnalysis;
using Unity.Netcode;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("HostControlOnly")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("HostControlOnly")]
[assembly: AssemblyTitle("HostControlOnly")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.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 HostControlOnly
{
public static class Constants
{
public const string GUID = "heiqi.arkgo.LCHostControlOnly";
public const string NAME = "LC Light Only Host Control";
public const string VERSION = "1.0.0";
}
[BepInPlugin("heiqi.arkgo.LCHostControlOnly", "LC Light Only Host Control", "1.0.0")]
public class HostControlOnly : BaseUnityPlugin
{
private readonly Harmony harmony = new Harmony("heiqi.arkgo.LCHostControlOnly");
public static HostControlOnly Instance;
private void Awake()
{
LogInfo("LC Light Only Host Control Mod is loading...\n=====\nHello\nHello\n=====\nLC Light Only Host Control Mod is loading...");
harmony.PatchAll(typeof(ShipLightsPatch));
harmony.PatchAll(typeof(ShipBuildControlPatch));
harmony.PatchAll(typeof(MenuPatch));
Instance = this;
}
internal void LogInfo(string message)
{
((BaseUnityPlugin)this).Logger.LogInfo((object)message);
}
}
[HarmonyPatch]
internal class ShipBuildControlPatch
{
private static bool canControl = false;
private static bool overrideCanControl = false;
private static Vector3 fixedPosition = new Vector3(0f, 0f, 0f);
public static bool _canControl
{
get
{
return canControl;
}
set
{
canControl = value;
}
}
public static bool _overrideCanControl
{
get
{
return overrideCanControl;
}
set
{
overrideCanControl = value;
}
}
[HarmonyPatch(typeof(ShipBuildModeManager), "PlaceShipObjectServerRpc")]
[HarmonyPrefix]
private static bool PrefixPlaceShipObjectServerRpc(ref Vector3 newPosition, ref Vector3 newRotation, ref NetworkObjectReference objectRef, int playerWhoMoved, ShipBuildModeManager __instance)
{
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0221: Unknown result type (might be due to invalid IL or missing references)
//IL_0226: Unknown result type (might be due to invalid IL or missing references)
//IL_0233: Unknown result type (might be due to invalid IL or missing references)
//IL_0238: Unknown result type (might be due to invalid IL or missing references)
//IL_0187: 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_0190: Unknown result type (might be due to invalid IL or missing references)
//IL_0195: Unknown result type (might be due to invalid IL or missing references)
//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
//IL_01a6: 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_0117: 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_015e: Unknown result type (might be due to invalid IL or missing references)
//IL_0163: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_0174: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)__instance).NetworkManager;
HostControlOnly.Instance.LogInfo($"可控:{canControl},覆盖控制:{overrideCanControl}");
if ((Object)(object)networkManager != (Object)null && networkManager.IsServer)
{
HostControlOnly.Instance.LogInfo("networkManager 不为空");
NetworkObjectReference val = objectRef;
if (overrideCanControl)
{
HostControlOnly.Instance.LogInfo("进入覆盖控制逻辑区域");
NetworkObject val2 = default(NetworkObject);
if (((NetworkObjectReference)(ref val)).TryGet(ref val2, (NetworkManager)null))
{
if (!((Object)(object)val2 == (Object)null))
{
PlaceableShipObject componentInChildren = ((Component)val2).GetComponentInChildren<PlaceableShipObject>();
string text = ((Object)componentInChildren.parentObject).name.ToLower();
if (text.Contains("teleporter") && !text.Contains("inverse"))
{
HostControlOnly.Instance.LogInfo("[ ShipBuildControlPatch ]使用手动保存并手动同步 Teleporter [test]");
newRotation = new Vector3(-90f, 0f, 0f);
newPosition = ((Component)componentInChildren).transform.position;
return true;
}
if (text.Contains("inverse") && text.Contains("teleporter"))
{
HostControlOnly.Instance.LogInfo("[ ShipBuildControlPatch ]使用手动保存并手动同步 Inverse Teleporter [test]");
newRotation = new Vector3(-90f, 0f, 0f);
newPosition = ((Component)componentInChildren).transform.position;
return true;
}
Quaternion rotation = ((Component)componentInChildren.mainMesh).transform.rotation;
newRotation = ((Quaternion)(ref rotation)).eulerAngles;
newPosition = ((Component)componentInChildren).transform.position;
return true;
}
HostControlOnly.Instance.LogInfo($"[ ShipBuildControlPatch ] Error! Could not get network object with id: {((NetworkObjectReference)(ref objectRef)).NetworkObjectId} in placeshipobjectClientRpc");
}
else
{
HostControlOnly.Instance.LogInfo($"无法获得对象; ID:{((NetworkObjectReference)(ref objectRef)).NetworkObjectId}");
}
}
else if (canControl)
{
return true;
}
HostControlOnly.Instance.LogInfo("[ ShipBuildControlPatch ] 非法操作");
return true;
}
if (overrideCanControl || canControl)
{
PlaceableShipObject componentInChildren2 = ((Component)networkManager).GetComponentInChildren<PlaceableShipObject>();
if ((Object)(object)componentInChildren2 != (Object)null && !StartOfRound.Instance.unlockablesList.unlockables[componentInChildren2.unlockableID].inStorage)
{
newRotation = componentInChildren2.parentObject.startingRotation;
newPosition = componentInChildren2.parentObject.startingPosition;
return true;
}
}
return true;
}
[HarmonyPatch(typeof(ShipBuildModeManager), "PlaceShipObject")]
[HarmonyPrefix]
private static bool PrefixPlaceShipObject(ref Vector3 placementPosition, ref Vector3 placementRotation, PlaceableShipObject placeableObject, bool placementSFX, ShipBuildModeManager __instance)
{
//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
//IL_02be: Unknown result type (might be due to invalid IL or missing references)
//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
//IL_028b: Unknown result type (might be due to invalid IL or missing references)
//IL_0290: Unknown result type (might be due to invalid IL or missing references)
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
//IL_0240: Unknown result type (might be due to invalid IL or missing references)
//IL_0245: Unknown result type (might be due to invalid IL or missing references)
//IL_0252: Unknown result type (might be due to invalid IL or missing references)
//IL_0257: Unknown result type (might be due to invalid IL or missing references)
//IL_016c: Unknown result type (might be due to invalid IL or missing references)
//IL_0171: Unknown result type (might be due to invalid IL or missing references)
//IL_0174: Unknown result type (might be due to invalid IL or missing references)
//IL_0179: 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_018a: 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)
//IL_00f2: 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_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0143: 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_0154: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)__instance).NetworkManager;
HostControlOnly.Instance.LogInfo($"可控:{canControl},覆盖控制:{overrideCanControl}");
Quaternion rotation;
if ((Object)(object)networkManager != (Object)null && networkManager.IsServer)
{
HostControlOnly.Instance.LogInfo("networkManager 不为空");
if (overrideCanControl)
{
HostControlOnly.Instance.LogInfo("进入覆盖控制逻辑区域");
if (!((Object)(object)placeableObject == (Object)null))
{
PlaceableShipObject componentInChildren = ((Component)placeableObject).GetComponentInChildren<PlaceableShipObject>();
string text = ((Object)componentInChildren.parentObject).name.ToLower();
if (text.Equals("teleporter") && !text.Equals("inverse"))
{
HostControlOnly.Instance.LogInfo("[ ShipBuildControlPatch ]使用手动保存并手动同步 Teleporter [test]");
placementRotation = new Vector3(-90f, 0f, 0f);
placementPosition = ((Component)componentInChildren).transform.position;
return true;
}
if (text.Equals("inverse") && text.Contains("teleporter"))
{
HostControlOnly.Instance.LogInfo("[ ShipBuildControlPatch ]使用手动保存并手动同步 Inverse Teleporter [test]");
placementRotation = new Vector3(-90f, 0f, 0f);
placementPosition = ((Component)componentInChildren).transform.position;
return true;
}
rotation = ((Component)componentInChildren.mainMesh).transform.rotation;
placementRotation = ((Quaternion)(ref rotation)).eulerAngles;
placementPosition = ((Component)componentInChildren).transform.position;
return true;
}
HostControlOnly.Instance.LogInfo($"[ ShipBuildControlPatch ] Error! Could not get network object with id: {((Object)placeableObject.parentObject).name} in placeshipobjectClientRpc");
}
else if (canControl)
{
return true;
}
HostControlOnly.Instance.LogInfo("[ ShipBuildControlPatch ] 非法操作");
return true;
}
if (overrideCanControl || canControl)
{
HostControlOnly.Instance.LogInfo("进入覆盖控制逻辑区域");
if (!((Object)(object)placeableObject == (Object)null))
{
PlaceableShipObject componentInChildren2 = ((Component)placeableObject).GetComponentInChildren<PlaceableShipObject>();
string text2 = ((Object)componentInChildren2.parentObject).name.ToLower();
if (text2.Contains("teleporter") && !text2.Contains("inverse teleporter"))
{
HostControlOnly.Instance.LogInfo("[ ShipBuildControlPatch ]使用手动保存并手动同步 Teleporter [test]");
placementRotation = new Vector3(-90f, 0f, 0f);
placementPosition = ((Component)componentInChildren2).transform.position;
return true;
}
if (((Object)componentInChildren2.parentObject).name.ToLower().Contains("inverse teleporter"))
{
placementRotation = new Vector3(-90f, 0f, 0f);
placementPosition = ((Component)componentInChildren2).transform.position;
return true;
}
rotation = ((Component)componentInChildren2.mainMesh).transform.rotation;
placementRotation = ((Quaternion)(ref rotation)).eulerAngles;
placementPosition = ((Component)componentInChildren2).transform.position;
return true;
}
HostControlOnly.Instance.LogInfo($"[ ShipBuildControlPatch ] Error! Could not get network object with id: {((Object)placeableObject.parentObject).name} in placeshipobjectClientRpc");
}
return true;
}
public static void ResetAllBuild()
{
PlaceableShipObject[] array = Object.FindObjectsOfType<PlaceableShipObject>();
foreach (PlaceableShipObject val in array)
{
string name = ((Object)val).name;
int instanceID = ((Object)val).GetInstanceID();
HostControlOnly.Instance.LogInfo($"名称:{name},ID:{instanceID}");
ShipBuildModeManager.Instance.ResetShipObjectToDefaultPosition(val);
}
}
}
[HarmonyPatch]
internal class ShipLightsPatch
{
private static bool canControl;
private static bool overrideControl;
private static bool mainLightControl;
public static bool _canControl
{
get
{
return canControl;
}
set
{
canControl = value;
}
}
public static bool _overrideControl
{
get
{
return overrideControl;
}
set
{
overrideControl = value;
}
}
public static bool _mainLightControl => mainLightControl;
[HarmonyPatch(typeof(ShipLights), "SetShipLightsServerRpc")]
[HarmonyPrefix]
private static bool PrefixSetShipLightsServerRpc(ref bool setLightsOn, ShipLights __instance)
{
NetworkManager networkManager = ((NetworkBehaviour)__instance).NetworkManager;
if ((Object)(object)networkManager == (Object)null)
{
if (__instance.areLightsOn != setLightsOn)
{
setLightsOn = __instance.areLightsOn;
}
mainLightControl = setLightsOn;
return true;
}
if (overrideControl)
{
HostControlOnly.Instance.LogInfo("覆盖控制激活,强制设置灯光为开启状态");
setLightsOn = true;
__instance.areLightsOn = true;
mainLightControl = true;
return true;
}
if (networkManager.IsServer)
{
__instance.areLightsOn = setLightsOn;
mainLightControl = setLightsOn;
HostControlOnly.Instance.LogInfo("主机正在控制灯光状态");
return true;
}
if (canControl)
{
HostControlOnly.Instance.LogInfo("客户端尝试修改灯光状态,但由于 canControl 为 true 而被阻止");
if (__instance.areLightsOn != setLightsOn)
{
setLightsOn = __instance.areLightsOn;
}
mainLightControl = setLightsOn;
return true;
}
HostControlOnly.Instance.LogInfo("客户端尝试修改灯光状态");
mainLightControl = setLightsOn;
return true;
}
[HarmonyPatch(typeof(StartOfRound), "SyncShipUnlockablesClientRpc")]
[HarmonyPrefix]
private static bool PrefixSyncShipUnlockablesClientRpc(int[] playerSuitIDs, ref bool shipLightsOn, Vector3[] placeableObjectPositions, Vector3[] placeableObjectRotations, int[] placeableObjects, int[] storedItems, int[] scrapValues, int[] itemSaveData, StartOfRound __instance)
{
NetworkManager networkManager = ((NetworkBehaviour)__instance).NetworkManager;
if ((networkManager.IsServer || networkManager.IsHost) && !networkManager.IsClient)
{
if (overrideControl)
{
shipLightsOn = true;
return true;
}
return true;
}
if (networkManager.IsClient && (overrideControl || canControl))
{
shipLightsOn = true;
return true;
}
return true;
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "HostControlOnly";
public const string PLUGIN_NAME = "HostControlOnly";
public const string PLUGIN_VERSION = "1.0.0";
}
}
namespace HostControlOnly.UI
{
[HarmonyPatch(typeof(QuickMenuManager))]
public class MenuPatch
{
[HarmonyPatch("OpenQuickMenu")]
[HarmonyPostfix]
public static void PostfixOpen()
{
if (((NetworkBehaviour)StartOfRound.Instance).IsHost)
{
UI.SetMenuForAll(value: true);
}
}
[HarmonyPatch("CloseQuickMenu")]
[HarmonyPostfix]
public static void PostfixClose()
{
if (((NetworkBehaviour)StartOfRound.Instance).IsHost)
{
UI.SetMenuForAll(value: false);
}
}
}
public class UI : MonoBehaviour
{
private static readonly List<UI> Instances = new List<UI>();
public static bool ShowButton = false;
private bool _menuOpen;
private bool lightControl;
private bool lightControlOverride;
private bool shipBuildControl;
private bool shipBuildControlOverride;
private Rect _windowRect;
private StartOfRound startOfRound = StartOfRound.Instance;
private readonly GUILayoutOption[] _options = (GUILayoutOption[])(object)new GUILayoutOption[2]
{
GUILayout.Width(800f),
GUILayout.Height(400f)
};
private Rect buttonRect = new Rect(10f, 10f, 150f, 75f);
private void Awake()
{
Instances.Add(this);
}
private void OnDestroy()
{
Instances.Remove(this);
}
private void OnGUI()
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Expected O, but got Unknown
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
if (((NetworkBehaviour)startOfRound).IsServer && _menuOpen)
{
_windowRect = GUILayout.Window(GUIUtility.GetControlID((FocusType)2), _windowRect, new WindowFunction(DrawUI), "黑崎管理终端 V1.0.0", _options);
}
}
public static void SetMenuForAll(bool value)
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
ShowButton = value;
if (Instances.Count == 0 && value)
{
new GameObject("黑崎管理终端").AddComponent<UI>();
Debug.Log((object)"正在创建UI");
}
foreach (UI instance in Instances)
{
instance.SetMenu(value);
}
}
private void SetMenu(bool value)
{
_menuOpen = value;
}
private void DrawUI(int windowID)
{
//IL_043d: Unknown result type (might be due to invalid IL or missing references)
//IL_0221: Unknown result type (might be due to invalid IL or missing references)
//IL_0226: Unknown result type (might be due to invalid IL or missing references)
//IL_0247: Unknown result type (might be due to invalid IL or missing references)
//IL_024c: Unknown result type (might be due to invalid IL or missing references)
//IL_0267: Unknown result type (might be due to invalid IL or missing references)
//IL_028c: Unknown result type (might be due to invalid IL or missing references)
//IL_0305: Unknown result type (might be due to invalid IL or missing references)
//IL_030a: Unknown result type (might be due to invalid IL or missing references)
//IL_032b: Unknown result type (might be due to invalid IL or missing references)
//IL_0330: Unknown result type (might be due to invalid IL or missing references)
//IL_034b: Unknown result type (might be due to invalid IL or missing references)
//IL_0370: Unknown result type (might be due to invalid IL or missing references)
GUILayout.BeginVertical(Array.Empty<GUILayoutOption>());
bool flag = GUILayout.Toggle(lightControl, "锁定船灯(服务端可控)", Array.Empty<GUILayoutOption>());
if (flag != lightControl)
{
lightControl = flag;
ShipLightsPatch._canControl = lightControl;
}
bool flag2 = GUILayout.Toggle(lightControlOverride, "锁定船灯(不可控制强制为开)", Array.Empty<GUILayoutOption>());
if (flag2 != lightControlOverride)
{
lightControlOverride = flag2;
ShipLightsPatch._overrideControl = lightControlOverride;
}
bool flag3 = GUILayout.Toggle(shipBuildControl, "锁定船上建筑到默认位置(服务端可控)", Array.Empty<GUILayoutOption>());
if (flag3 != shipBuildControl)
{
shipBuildControl = flag3;
ShipBuildControlPatch._canControl = shipBuildControl;
}
bool flag4 = GUILayout.Toggle(shipBuildControlOverride, "锁定船上建筑到默认位置(不可控制强制放到默认位置)", Array.Empty<GUILayoutOption>());
if (flag4 != shipBuildControlOverride)
{
shipBuildControlOverride = flag4;
ShipBuildControlPatch._overrideCanControl = shipBuildControlOverride;
}
if (GUILayout.Button("强制将所有建筑放到默认位置", Array.Empty<GUILayoutOption>()))
{
PlaceableShipObject[] array = Object.FindObjectsOfType<PlaceableShipObject>();
for (int i = 0; i < array.Length && !startOfRound.unlockablesList.unlockables[array[i].unlockableID].inStorage; i++)
{
if (startOfRound.unlockablesList.unlockables[array[i].unlockableID].alreadyUnlocked && !startOfRound.unlockablesList.unlockables[array[i].unlockableID].spawnPrefab)
{
array[i].parentObject.disableObject = false;
HostControlOnly.Instance.LogInfo($"[ UI ] 已经将 {((Object)array[i].parentObject).name}@{array[i].unlockableID} 的位置重置");
ShipBuildModeManager.Instance.ResetShipObjectToDefaultPosition(array[i]);
continue;
}
PlaceableShipObject val = array[i];
string text = ((Object)val.parentObject).name.ToLower();
if (((Object)val.parentObject).name.ToLower().Contains("inverse teleporter"))
{
HostControlOnly.Instance.LogInfo("[ UI ]使用手动保存并手动同步 Teleporter [test]");
try
{
startOfRound.unlockablesList.unlockables[val.unlockableID].placedPosition = Vector3.zero;
startOfRound.unlockablesList.unlockables[val.unlockableID].placedRotation = Vector3.zero;
val.parentObjectSecondary.position = new Vector3(5.79f, 2.14f, -12.23f);
((Component)val.parentObjectSecondary).transform.eulerAngles = new Vector3(0f, 0f, 0f);
}
catch (Exception arg)
{
HostControlOnly.Instance.LogInfo($"[ UI ] 出现错误 {arg}");
}
}
else if (text.Contains("teleporter") && !text.Contains("inverse teleporter"))
{
HostControlOnly.Instance.LogInfo("[ UI ]使用手动保存并手动同步 Inverse Teleporter [test]");
try
{
startOfRound.unlockablesList.unlockables[val.unlockableID].placedPosition = Vector3.zero;
startOfRound.unlockablesList.unlockables[val.unlockableID].placedRotation = Vector3.zero;
val.parentObjectSecondary.position = new Vector3(0.9315f, 0.5234f, -12.9f);
((Component)val.parentObjectSecondary).transform.eulerAngles = new Vector3(0f, 64.7f, 0f);
}
catch (Exception arg2)
{
HostControlOnly.Instance.LogInfo($"[ UI ] 出现错误 {arg2}");
}
}
}
try
{
startOfRound.SyncShipUnlockablesServerRpc();
HostControlOnly.Instance.LogInfo("[ UI ] 成功将强制移动到原位同步到所有人");
}
catch (Exception arg3)
{
HostControlOnly.Instance.LogInfo($"[ UI ] 出现错误 {arg3}");
}
}
GUILayout.BeginHorizontal(Array.Empty<GUILayoutOption>());
if (GUILayout.Button("使用遥控器控制灯光 Beta", Array.Empty<GUILayoutOption>()))
{
try
{
Object.FindObjectOfType<ShipLights>().ToggleShipLightsOnLocalClientOnly();
}
catch (Exception arg4)
{
HostControlOnly.Instance.LogInfo($"{arg4}");
}
}
GUILayout.EndHorizontal();
GUILayout.EndVertical();
GUI.DragWindow(new Rect(0f, 0f, 10000f, 500f));
}
}
}
namespace HostControlOnly.ReflectionUntils
{
public class ReflectionUtils
{
public static void InvokeMethod(object obj, string methodName, object[] parameters)
{
obj.GetType().GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Invoke(obj, parameters);
}
public static void InvokeMethod(object obj, Type forceType, string methodName, object[] parameters)
{
forceType.GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Invoke(obj, parameters);
}
public static void SetPropertyValue(object obj, string propertyName, object value)
{
obj.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).SetValue(obj, value);
}
public static T InvokeMethod<T>(object obj, string methodName, object[] parameters)
{
return (T)obj.GetType().GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).Invoke(obj, parameters);
}
public static T GetFieldValue<T>(object obj, string fieldName)
{
return (T)obj.GetType().GetField(fieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).GetValue(obj);
}
public static void SetFieldValue(object obj, string fieldName, object value)
{
obj.GetType().GetField(fieldName, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic).SetValue(obj, value);
}
}
}
namespace HostControlOnly.Logger
{
public class Log
{
internal readonly string Prefix;
private readonly float _time = Time.realtimeSinceStartup;
private readonly string _message;
public Log(string message, string prefix = "Info")
{
_message = message;
Prefix = prefix;
}
public string GetTimeFormattedString()
{
return $"[{TimeSpan.FromSeconds(_time):hh':'mm':'ss}] [{Prefix}] {_message}";
}
}
}