Decompiled source of MaskedEnemyOverhaulModelAPIFix v1.0.2

MaskOverhaulModelAPI/LCThiccMaskCombination.dll

Decompiled 10 months ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Logging;
using HarmonyLib;
using ModelReplacement;
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("LCThiccMaskCombination")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("LCThiccMaskCombination")]
[assembly: AssemblyCopyright("Copyright ©  2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("0c098703-6551-44c4-a5b0-1325e3ba2fbb")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace LCThiccMaskCombination
{
	[BepInPlugin("FxRbit.LCThiccMaskCombination", "Lethal Masked Overhaul Model API Fix", "1.0.0.0")]
	public class ThiccMaskCombinationBase : BaseUnityPlugin
	{
		private const string modGUID = "FxRbit.LCThiccMaskCombination";

		private const string modName = "Lethal Masked Overhaul Model API Fix";

		private const string modVersion = "1.0.0.0";

		private readonly Harmony harmony = new Harmony("FxRbit.LCThiccMaskCombination");

		public static ThiccMaskCombinationBase Instance;

		public ManualLogSource Logger;

		public static SpawnableEnemyWithRarity maskedPrefab;

		public static SpawnableEnemyWithRarity flowerPrefab;

		private void Awake()
		{
			Logger = Logger.CreateLogSource("FxRbit.LCThiccMaskCombination");
			if ((Object)(object)Instance == (Object)null)
			{
				Instance = this;
			}
			harmony.PatchAll();
			Logger.LogInfo((object)"Plugin FxRbit.LCThiccMaskCombination is loaded! >:3");
			harmony.PatchAll(typeof(ThiccMaskCombinationBase));
		}

		public static void ResetMaskModelReplacement(ref MaskedPlayerEnemy __instance)
		{
			if (!((Object)(object)((Component)__instance).gameObject.GetComponent<BodyReplacementBase>() == (Object)null))
			{
				ModelReplacementAPI.Instance.Logger.LogInfo((object)("Reinstantiating model replacement for " + ((object)__instance)?.ToString() + " "));
				Type type = ((object)((Component)__instance).gameObject.GetComponent<BodyReplacementBase>()).GetType();
				Object.Destroy((Object)(object)((Component)__instance).gameObject.GetComponent<BodyReplacementBase>());
				((Component)__instance).gameObject.AddComponent(type);
			}
		}

		public static void SetMaskModelReplacement(ref MaskedPlayerEnemy __instance, Type type)
		{
			if (!type.IsSubclassOf(typeof(BodyReplacementBase)))
			{
				ModelReplacementAPI.Instance.Logger.LogError((object)("Cannot set body replacement of type " + type.Name + ", must inherit from BodyReplacementBase"));
			}
			else
			{
				if (!ModelReplacementAPI.isLan)
				{
					return;
				}
				Transform val = ((Component)__instance).transform.Find("ScavengerModel").Find("metarig");
				BodyReplacementBase component = ((Component)__instance).gameObject.GetComponent<BodyReplacementBase>();
				int currentSuitID = __instance.mimickingPlayer.currentSuitID;
				string unlockableName = StartOfRound.Instance.unlockablesList.unlockables[currentSuitID].unlockableName;
				if ((Object)(object)component != (Object)null)
				{
					if (((object)component).GetType() == type)
					{
						if (!(component.suitName != unlockableName))
						{
							return;
						}
						ModelReplacementAPI.Instance.Logger.LogInfo((object)$"Suit Change detected {component.suitName} => {unlockableName}, Replacing {type}.");
						Object.Destroy((Object)(object)component);
					}
					else
					{
						ModelReplacementAPI.Instance.Logger.LogInfo((object)$"Model Replacement Change detected {((object)component).GetType()} => {type}, changing model.");
						Object.Destroy((Object)(object)component);
					}
				}
				Component obj = ((Component)((Component)__instance).transform).gameObject.AddComponent(type);
				BodyReplacementBase val2 = (BodyReplacementBase)(object)((obj is BodyReplacementBase) ? obj : null);
				val2.suitName = unlockableName;
			}
		}
	}
}
namespace LCThiccMaskCombination.Patches
{
	[HarmonyPatch(typeof(MaskedPlayerEnemy))]
	public class ThiccMaskPatch
	{
		[HarmonyPatch("SetSuit")]
		[HarmonyPrefix]
		public static void SetModelReplacement(ref MaskedPlayerEnemy __instance, int suitId)
		{
			BodyReplacementBase component = ((Component)__instance.mimickingPlayer).gameObject.GetComponent<BodyReplacementBase>();
			if ((Object)(object)component == (Object)null && Chainloader.PluginInfos.ContainsKey("meow.ModelReplacementAPI"))
			{
				ThiccMaskCombinationBase.ResetMaskModelReplacement(ref __instance);
				ThiccMaskCombinationBase.SetMaskModelReplacement(ref __instance, ((object)((Component)__instance).gameObject.GetComponent<BodyReplacementBase>()).GetType());
			}
		}
	}
}