Decompiled source of TrueMimicVoice v1.0.0

TrueMimicVoice.dll

Decompiled 2 days ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using HarmonyLib;
using MelonLoader;
using Microsoft.CodeAnalysis;
using TrueMimicVoice;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: MelonInfo(typeof(TrueMimicVoiceMod), "TrueMimicVoice", "1.0.0", "CoiriNight", null)]
[assembly: MelonGame("ReLUGames", "MIMESIS")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyCompany("TrueMimicVoice")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("TrueMimicVoice")]
[assembly: AssemblyTitle("TrueMimicVoice")]
[assembly: AssemblyVersion("1.0.0.0")]
[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.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace TrueMimicVoice
{
	public class TrueMimicVoiceMod : MelonMod
	{
		private const string HarmonyId = "com.mimicvoicefix.fixed";

		public override void OnInitializeMelon()
		{
			//IL_0064: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Expected O, but got Unknown
			//IL_0085: Unknown result type (might be due to invalid IL or missing references)
			//IL_0092: Expected O, but got Unknown
			MelonLogger.Msg("TrueMimicVoice loaded.");
			try
			{
				Type type = Type.GetType("Mimic.Actors.ProtoActor+VoiceEffecter, Assembly-CSharp");
				if (type == null)
				{
					MelonLogger.Error("ProtoActor+VoiceEffecter not found.");
					return;
				}
				MethodInfo method = type.GetMethod("ApplyEffectPreset", BindingFlags.Instance | BindingFlags.NonPublic);
				if (method == null)
				{
					MelonLogger.Error("ApplyEffectPreset not found.");
					return;
				}
				Harmony val = new Harmony("com.mimicvoicefix.fixed");
				MethodInfo method2 = typeof(TrueMimicVoiceMod).GetMethod("ApplyEffectPresetPostfix", BindingFlags.Static | BindingFlags.NonPublic);
				val.Patch((MethodBase)method, (HarmonyMethod)null, new HarmonyMethod(method2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
				MelonLogger.Msg("ApplyEffectPreset patched.");
			}
			catch (Exception ex)
			{
				MelonLogger.Error("Init error: " + ex);
			}
		}

		private static void ApplyEffectPresetPostfix(object inType, object inEffectData)
		{
			try
			{
				if (inType != null && inEffectData != null && !(inType.ToString() == "Transmitter"))
				{
					object memberValue = GetMemberValue(inEffectData, "Preset");
					if (memberValue != null)
					{
						DisableFiltersOnObject(memberValue);
					}
				}
			}
			catch (Exception ex)
			{
				MelonLogger.Error("Patch error: " + ex);
			}
		}

		private static object GetMemberValue(object target, string name)
		{
			Type type = target.GetType();
			PropertyInfo property = type.GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			if (property != null)
			{
				return property.GetValue(target, null);
			}
			FieldInfo field = type.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
			if (field != null)
			{
				return field.GetValue(target);
			}
			return null;
		}

		private static void DisableFiltersOnObject(object target)
		{
			if (target != null)
			{
				Type type = target.GetType();
				DisableFilter(target, type, "LowPass");
				DisableFilter(target, type, "HighPass");
				DisableFilter(target, type, "Distortion");
				DisableFilter(target, type, "Chorus");
				DisableFilter(target, type, "Reverb");
				DisableFilter(target, type, "Echo");
				DisableFilter(target, type, "Amplifier");
			}
		}

		private static void DisableFilter(object filterRef, Type filterType, string propertyName)
		{
			try
			{
				PropertyInfo property = filterType.GetProperty(propertyName);
				if (property == null)
				{
					return;
				}
				object value = property.GetValue(filterRef, null);
				if (value != null)
				{
					PropertyInfo property2 = value.GetType().GetProperty("enabled");
					if (property2 != null)
					{
						property2.SetValue(value, false, null);
					}
				}
			}
			catch
			{
			}
		}
	}
}