Decompiled source of WoolCompany v1.0.2

WoolCompany/WoolCompany.dll

Decompiled 5 months ago
using System.Collections.Generic;
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.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using LethalLib.Modules;
using UnityEngine;
using WoolCompany.Behaviors;
using WoolCompany.Config;
using WoolCompany.Patches;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("WoolCompany")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("WoolCompany")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("0e91d429-b3f7-45e6-b963-da092a45c342")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace WoolCompany
{
	[BepInPlugin("Crystal.WoolCompany", "WoolCompany", "1.0.1.0")]
	public class WoolCompanyPlugin : BaseUnityPlugin
	{
		private const string GUID = "Crystal.WoolCompany";

		private const string NAME = "WoolCompany";

		private const string VERSION = "1.0.1.0";

		private readonly Harmony harmony = new Harmony("Crystal.WoolCompany");

		public static WoolCompanyPlugin instance;

		public static ManualLogSource mls;

		internal static AssetBundle bundle;

		public bool useNameGame = true;

		private void Awake()
		{
			instance = this;
			mls = Logger.CreateLogSource("Crystal.WoolCompany");
			mls.LogInfo((object)"Loading WoolCompany..");
			ConfigSettings.BindConfigSettings();
			string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "woolcompany");
			bundle = AssetBundle.LoadFromFile(text);
			Item val = bundle.LoadAsset<Item>("Assets/Prefabs/CandiceItem.asset");
			if ((Object)(object)val == (Object)null)
			{
				mls.LogError((object)"Failed to load item from asset bundle.");
				return;
			}
			DamagePlayerItem damagePlayerItem = val.spawnPrefab.AddComponent<DamagePlayerItem>();
			((GrabbableObject)damagePlayerItem).grabbable = true;
			((GrabbableObject)damagePlayerItem).grabbableToEnemies = true;
			((GrabbableObject)damagePlayerItem).itemProperties = val;
			NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab);
			Utilities.FixMixerGroups(val.spawnPrefab);
			Items.RegisterScrap(val, 1000, (LevelTypes)(-1));
			TerminalNode val2 = ScriptableObject.CreateInstance<TerminalNode>();
			if ((Object)(object)val2 == (Object)null)
			{
				mls.LogError((object)"Failed to create TerminalNode.");
				return;
			}
			val2.clearPreviousText = true;
			val2.displayText = "This is info about Candice\n\n";
			Items.RegisterShopItem(val, (TerminalNode)null, (TerminalNode)null, val2, 0);
			Items.UpdateShopItemPrice(val, 30);
			mls.LogInfo((object)"Loading WoolCompany Phase 2..");
			harmony.PatchAll(typeof(StartOfRoundPatch));
			harmony.PatchAll(typeof(CompanyMoodPatch));
			harmony.PatchAll(typeof(SpringManPatch));
			harmony.PatchAll(typeof(StunGrenadePatch));
			harmony.PatchAll(typeof(PullAlarmCordPatch));
			harmony.PatchAll(typeof(SprayPaintItemPatch));
			mls.LogInfo((object)"Loaded WoolCompany Successfully");
		}
	}
}
namespace WoolCompany.Patches
{
	[HarmonyPatch(typeof(SprayPaintItem))]
	internal class SprayPaintItemPatch
	{
		[HarmonyPatch("__initializeVariables")]
		[HarmonyPostfix]
		private static void SprayPaintItemPatchFunc(SprayPaintItem __instance)
		{
			__instance.sprayNeedsShakingSFX = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/SprayNeedsShaking.ogg");
			__instance.spraySFX = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/SpraySprayCan.ogg");
		}
	}
	[HarmonyPatch(typeof(ShipAlarmCord))]
	internal class PullAlarmCordPatch
	{
		[HarmonyPatch("__initializeVariables")]
		[HarmonyPostfix]
		private static void PullAlarmCordPatchFunc(ShipAlarmCord __instance)
		{
			__instance.cordPullSFX = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/PullLever2.ogg");
		}
	}
	[HarmonyPatch(typeof(StunGrenadeItem))]
	internal class StunGrenadePatch
	{
		[HarmonyPatch("__initializeVariables")]
		[HarmonyPostfix]
		private static void StunGrenadePatchFunc(StunGrenadeItem __instance)
		{
			__instance.pullPinSFX = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/PullLever2.ogg");
		}
	}
	[HarmonyPatch(typeof(SpringManAI))]
	internal class SpringManPatch
	{
		[HarmonyPatch("__initializeVariables")]
		[HarmonyPostfix]
		private static void SpringManPatchFunc(SpringManAI __instance)
		{
			AudioClip[] springNoises = __instance.springNoises;
			WoolCompanyPlugin.mls.LogInfo((object)"SpringManInit!");
			AudioClip[] array = springNoises;
			foreach (AudioClip val in array)
			{
				WoolCompanyPlugin.mls.LogInfo((object)("Audio Clip Name: " + ((object)val).ToString() + " - " + ((Object)val).name + "\n"));
			}
			__instance.springNoises[0] = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/Coilhead/Spring1.ogg");
			__instance.springNoises[1] = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/Coilhead/Spring2.ogg");
			__instance.springNoises[2] = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/Coilhead/Spring3.ogg");
			__instance.springNoises[3] = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/Coilhead/SpringWobble1.ogg");
			__instance.springNoises[4] = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/Coilhead/SpringWobble2.ogg");
		}
	}
	[HarmonyPatch(typeof(DepositItemsDesk))]
	internal class CompanyMoodPatch
	{
		[HarmonyPatch("Start")]
		[HarmonyPostfix]
		private static void SetCompanySoundPatch(DepositItemsDesk __instance)
		{
			if (WoolCompanyPlugin.instance.useNameGame)
			{
				__instance.currentMood.behindWallSFX = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/name_game.ogg");
			}
			CollectionExtensions.AddItem<AudioClip>((IEnumerable<AudioClip>)__instance.currentMood.attackSFX, WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/TentaclesAttack.ogg"));
		}
	}
	[HarmonyPatch(typeof(StartOfRound))]
	internal class StartOfRoundPatch
	{
		[HarmonyPatch("Start")]
		[HarmonyPostfix]
		private static void OverrideAudio(StartOfRound __instance)
		{
			__instance.suckedIntoSpaceSFX = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/SuckedIntoSpace.ogg");
			__instance.firedVoiceSFX = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/FiredVoiceline.ogg");
			__instance.firedVoiceSFX = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/FiredVoiceline.ogg");
			CollectionExtensions.AddItem<AudioClip>((IEnumerable<AudioClip>)__instance.shipCreakSFX, WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/baaa.ogg"));
			__instance.HUDSystemAlertSFX = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/Candice/oh-no.ogg");
			__instance.fallDamageSFX = WoolCompanyPlugin.bundle.LoadAsset<AudioClip>("Assets/AudoClip/Candice/whooaa.ogg");
		}
	}
}
namespace WoolCompany.Config
{
	public static class ConfigSettings
	{
		public static ConfigEntry<bool> name_game;

		public static Dictionary<string, ConfigEntryBase> currentConfigEntries = new Dictionary<string, ConfigEntryBase>();

		public static void BindConfigSettings()
		{
			name_game = AddConfigEntry("WoolCompany Audio", "Enable Name-Game", defaultValue: true, "If true, will enable the \"Name game\" music at the company. Played by the one and only Jeb.");
			((BaseUnityPlugin)WoolCompanyPlugin.instance).Config.Save();
			UseSettings();
		}

		public static void UseSettings()
		{
			WoolCompanyPlugin.instance.useNameGame = name_game.Value;
		}

		public static ConfigEntry<T> AddConfigEntry<T>(string section, string name, T defaultValue, string description)
		{
			ConfigEntry<T> val = ((BaseUnityPlugin)WoolCompanyPlugin.instance).Config.Bind<T>(section, name, defaultValue, description);
			currentConfigEntries.Add(((ConfigEntryBase)val).Definition.Key, (ConfigEntryBase)(object)val);
			return val;
		}
	}
}
namespace WoolCompany.Behaviors
{
	internal class LaunchPlayerItem : PhysicsProp
	{
		public RaycastHit hitLocation;

		private ManualLogSource Logger;

		public override void DiscardItem()
		{
			//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_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: 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)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			Vector3 throwDestination = GetThrowDestination();
			ManualLogSource logger = Logger;
			Vector3 val = throwDestination;
			logger.LogInfo((object)("Throwing Item1: " + ((object)(Vector3)(ref val)).ToString()));
			((GrabbableObject)this).DiscardItem();
			ManualLogSource logger2 = Logger;
			val = throwDestination;
			logger2.LogInfo((object)("Throwing Item: " + ((object)(Vector3)(ref val)).ToString()));
		}

		public Vector3 GetThrowDestination()
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_001d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0032: 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_0059: 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_00b6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: 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)
			//IL_00bc: 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_00c2: 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_00d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_012d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0105: 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_0114: 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_011e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0130: Unknown result type (might be due to invalid IL or missing references)
			Vector3 position = ((Component)this).transform.position;
			Debug.DrawRay(((Component)((GrabbableObject)this).playerHeldBy.gameplayCamera).transform.position, ((Component)((GrabbableObject)this).playerHeldBy.gameplayCamera).transform.forward, Color.yellow, 15f);
			Ray val = default(Ray);
			((Ray)(ref val))..ctor(((Component)((GrabbableObject)this).playerHeldBy.gameplayCamera).transform.position, ((Component)((GrabbableObject)this).playerHeldBy.gameplayCamera).transform.forward);
			position = ((!Physics.Raycast(val, ref hitLocation, 12f, StartOfRound.Instance.collidersAndRoomMaskAndDefault)) ? ((Ray)(ref val)).GetPoint(10f) : ((Ray)(ref val)).GetPoint(((RaycastHit)(ref hitLocation)).distance - 0.05f));
			Debug.DrawRay(position, Vector3.down, Color.blue, 15f);
			((Ray)(ref val))..ctor(position, Vector3.down);
			if (Physics.Raycast(val, ref hitLocation, 30f, StartOfRound.Instance.collidersAndRoomMaskAndDefault))
			{
				return ((RaycastHit)(ref hitLocation)).point + Vector3.up * 0.05f;
			}
			return ((Ray)(ref val)).GetPoint(30f);
		}
	}
	internal class DamagePlayerItem : PhysicsProp
	{
		public override void ItemActivate(bool used, bool buttonDown = true)
		{
			//IL_002e: 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)
			((GrabbableObject)this).ItemActivate(used, buttonDown);
			if (buttonDown)
			{
				if ((Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null)
				{
					((GrabbableObject)this).playerHeldBy.DamagePlayer(5, true, true, (CauseOfDeath)0, 0, false, default(Vector3));
				}
				else
				{
					Debug.Log((object)"Could not damage player!");
				}
			}
		}
	}
}