Decompiled source of SolidCompany v1.0.1

SolidCompany.dll

Decompiled 9 months ago
using System;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LethalLib.Modules;
using SolidCompany.Patches;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("SolidCompany")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("SolidCompany")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("b316263b-eb86-414e-afd1-282161c28d53")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace SolidCompany
{
	[BepInPlugin("Fusition.SolidCompany", "Solid Company", "1.1.1.0")]
	public class SCModBase : BaseUnityPlugin
	{
		private const string modGUID = "Fusition.SolidCompany";

		private const string modName = "Solid Company";

		private const string modVersion = "1.1.1.0";

		private readonly Harmony harmony = new Harmony("Fusition.SolidCompany");

		private static SCModBase Instance;

		private readonly float scrollSpeed = 0.4f;

		internal ManualLogSource fusLogSource;

		private void Awake()
		{
			//IL_0123: Unknown result type (might be due to invalid IL or missing references)
			//IL_0131: Expected O, but got Unknown
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
			fusLogSource = Logger.CreateLogSource("Fusition.SolidCompany");
			string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "solidcompanyassets");
			AssetBundle val = AssetBundle.LoadFromFile(text);
			string[] allAssetNames = val.GetAllAssetNames();
			foreach (string text2 in allAssetNames)
			{
				fusLogSource.LogInfo((object)text2);
			}
			Item val2 = val.LoadAsset<Item>("Assets/Scrap/CheeseWheelItem.asset");
			if ((Object)(object)val2 == (Object)null)
			{
				fusLogSource.LogError((object)"Failed to load prefab from asset bundle");
			}
			NetworkPrefabs.RegisterNetworkPrefab(val2.spawnPrefab);
			Utilities.FixMixerGroups(val2.spawnPrefab);
			Items.RegisterScrap(val2, 60, (LevelTypes)(-1));
			fusLogSource.LogInfo((object)"SolidCompany awoken");
			MethodInfo methodInfo = AccessTools.Method(typeof(PlayerControllerB), "RaycastSpectateCameraAroundPivot", (Type[])null, (Type[])null);
			MethodInfo methodInfo2 = AccessTools.Method(typeof(PlayerControllerB_Patch), "RaycastSpectateCameraAroundPivot_Patch", (Type[])null, (Type[])null);
			harmony.Patch((MethodBase)methodInfo, new HarmonyMethod(methodInfo2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
		}

		private void Update()
		{
			//IL_0006: 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)
			if (UnityInput.Current.mouseScrollDelta.y != 0f)
			{
				PlayerControllerB_Patch.zoomDistance = (PlayerControllerB_Patch.zoomDistance + UnityInput.Current.mouseScrollDelta.y / -120f * scrollSpeed).Clamp(1f, 15f);
			}
			if (UnityInput.Current.GetKeyDown((KeyCode)112))
			{
				PlayerControllerB_Patch.firstPersonSpectatorToggle = !PlayerControllerB_Patch.firstPersonSpectatorToggle;
			}
		}
	}
	internal static class Util
	{
		public static T Clamp<T>(this T val, T min, T max) where T : IComparable<T>
		{
			if (val.CompareTo(min) < 0)
			{
				return min;
			}
			if (val.CompareTo(max) > 0)
			{
				return max;
			}
			return val;
		}
	}
}
namespace SolidCompany.Patches
{
	[HarmonyPatch(typeof(PlayerControllerB))]
	public class PlayerControllerB_Patch
	{
		public static float zoomDistance = 1.4f;

		public static bool firstPersonSpectatorToggle = false;

		[HarmonyPatch("Update")]
		[HarmonyPrefix]
		public static bool RaycastSpectateCameraAroundPivot_Patch(PlayerControllerB __instance, RaycastHit ___hit, int ___walkableSurfacesNoPlayersMask)
		{
			//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e8: 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_0019: 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_0092: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			if (!firstPersonSpectatorToggle)
			{
				Ray val = default(Ray);
				((Ray)(ref val))..ctor(__instance.spectateCameraPivot.position, -__instance.spectateCameraPivot.forward);
				if (Physics.Raycast(val, ref ___hit, zoomDistance, ___walkableSurfacesNoPlayersMask, (QueryTriggerInteraction)1))
				{
					((Component)__instance.playersManager.spectateCamera).transform.position = ((Ray)(ref val)).GetPoint(((RaycastHit)(ref ___hit)).distance - 0.25f);
				}
				else
				{
					((Component)__instance.playersManager.spectateCamera).transform.position = ((Ray)(ref val)).GetPoint(zoomDistance - 0.1f);
				}
				((Component)__instance.playersManager.spectateCamera).transform.LookAt(__instance.spectateCameraPivot);
			}
			else
			{
				((Component)__instance.playersManager.spectateCamera).transform.position = __instance.spectateCameraPivot.position + new Vector3(0f, 0.0354f, 0f);
			}
			return false;
		}
	}
}