using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx.Preloader.Core.Patching;
using Mono.Cecil;
using Mono.Cecil.Cil;
using Mono.Cecil.Rocks;
using MonoMod.Utils;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(/*Could not decode attribute arguments.*/)]
[assembly: TargetFramework(".NETCoreApp,Version=v10.0", FrameworkDisplayName = ".NET 10.0")]
[assembly: AssemblyCompany("BetterAudioFilterSettingsPatcher")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+dc2cc50f597ebbc57073d6d232f1acee15ab1bbc")]
[assembly: AssemblyProduct("BetterAudioFilterSettingsPatcher")]
[assembly: AssemblyTitle("BetterAudioFilterSettingsPatcher")]
[assembly: AssemblyVersion("1.0.0.0")]
[module: RefSafetyRules(11)]
namespace BetterAudioFilterSettings;
[PatcherPluginInfo("art0007i.BetterAudioFilterSettings", "Better AudioFilterSettings", "1.0.0")]
public class Patcher : BasePatcher
{
public const string GUID = "art0007i.BetterAudioFilterSettings";
public const string Name = "Better AudioFilterSettings";
public const string Version = "1.0.0";
[TargetAssembly("FrooxEngine.dll")]
public bool PatchFrooxEngine(ref AssemblyDefinition assembly, string filename)
{
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Expected O, but got Unknown
//IL_00c9: 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_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Expected O, but got Unknown
//IL_0157: Unknown result type (might be due to invalid IL or missing references)
//IL_015e: Expected O, but got Unknown
//IL_016d: Unknown result type (might be due to invalid IL or missing references)
//IL_0177: Unknown result type (might be due to invalid IL or missing references)
TypeDefinition type = assembly.MainModule.GetType("FrooxEngine.AudioInputFilteringSettings");
TypeDefinition type2 = assembly.MainModule.GetType("FrooxEngine.SettingSwitchValue");
TypeDefinition type3 = assembly.MainModule.GetType("FrooxEngine.World");
MethodDefinition val = Enumerable.First<MethodDefinition>((global::System.Collections.Generic.IEnumerable<MethodDefinition>)assembly.MainModule.GetType("FrooxEngine.SettingComponent").Methods, (Func<MethodDefinition, bool>)((MethodDefinition x) => "IsValidSetOfSwitches" == ((MemberReference)x).Name));
MethodDefinition val2 = new MethodDefinition(((MemberReference)val).Name, (MethodAttributes)(val.Attributes & 0xFEFF), ((MethodReference)val).ReturnType);
type.Methods.Add(val2);
val2.Body.InitLocals = true;
ILProcessor iLProcessor = val2.Body.GetILProcessor();
Extensions.AddRange<ParameterDefinition>(((MethodReference)val2).Parameters, (global::System.Collections.Generic.IEnumerable<ParameterDefinition>)((MethodReference)val).Parameters);
iLProcessor.Emit(OpCodes.Ldarg_0);
iLProcessor.Emit(OpCodes.Ldarg_1);
iLProcessor.Emit(OpCodes.Call, (MethodReference)(object)val);
iLProcessor.Emit(OpCodes.Ret);
MethodDefinition val3 = new MethodDefinition("GetDefaultSettingSwitches", (MethodAttributes)150, (TypeReference)(object)TypeReferenceRocks.MakeGenericInstanceType(assembly.MainModule.ImportReference(typeof(List<>)), (TypeReference[])(object)new TypeReference[1] { (TypeReference)type2 }));
type.Methods.Add(val3);
val3.Body.InitLocals = true;
ILProcessor iLProcessor2 = val3.Body.GetILProcessor();
ParameterDefinition val4 = new ParameterDefinition("world", (ParameterAttributes)0, (TypeReference)(object)type3);
((MethodReference)val3).Parameters.Add(val4);
iLProcessor2.Emit(OpCodes.Ldnull);
iLProcessor2.Emit(OpCodes.Ret);
return true;
}
}