using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: IgnoresAccessChecksTo("AmazingAssets.TerrainToMesh")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")]
[assembly: IgnoresAccessChecksTo("Assembly-CSharp")]
[assembly: IgnoresAccessChecksTo("ClientNetworkTransform")]
[assembly: IgnoresAccessChecksTo("DissonanceVoip")]
[assembly: IgnoresAccessChecksTo("Facepunch Transport for Netcode for GameObjects")]
[assembly: IgnoresAccessChecksTo("Facepunch.Steamworks.Win64")]
[assembly: IgnoresAccessChecksTo("Unity.AI.Navigation")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging")]
[assembly: IgnoresAccessChecksTo("Unity.Animation.Rigging.DocCodeExamples")]
[assembly: IgnoresAccessChecksTo("Unity.Burst")]
[assembly: IgnoresAccessChecksTo("Unity.Burst.Unsafe")]
[assembly: IgnoresAccessChecksTo("Unity.Collections")]
[assembly: IgnoresAccessChecksTo("Unity.Collections.LowLevel.ILSupport")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem")]
[assembly: IgnoresAccessChecksTo("Unity.InputSystem.ForUI")]
[assembly: IgnoresAccessChecksTo("Unity.Jobs")]
[assembly: IgnoresAccessChecksTo("Unity.Mathematics")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.Common")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.MetricTypes")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStats")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Component")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsMonitor.Implementation")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetStatsReporting")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkProfiler.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Multiplayer.Tools.NetworkSolutionInterface")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Components")]
[assembly: IgnoresAccessChecksTo("Unity.Netcode.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.Networking.Transport")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Csg")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.KdTree")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Poly2Tri")]
[assembly: IgnoresAccessChecksTo("Unity.ProBuilder.Stl")]
[assembly: IgnoresAccessChecksTo("Unity.Profiling.Core")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.Core.ShaderLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Config.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.HighDefinition.Runtime")]
[assembly: IgnoresAccessChecksTo("Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Authentication")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Analytics")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Configuration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Device")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Environments.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Internal")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Networking")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Registration")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Scheduler")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Telemetry")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Core.Threading")]
[assembly: IgnoresAccessChecksTo("Unity.Services.QoS")]
[assembly: IgnoresAccessChecksTo("Unity.Services.Relay")]
[assembly: IgnoresAccessChecksTo("Unity.TextMeshPro")]
[assembly: IgnoresAccessChecksTo("Unity.Timeline")]
[assembly: IgnoresAccessChecksTo("Unity.VisualEffectGraph.Runtime")]
[assembly: IgnoresAccessChecksTo("UnityEngine.ARModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.NVIDIAModule")]
[assembly: IgnoresAccessChecksTo("UnityEngine.UI")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("madkarma.RicardoBracken")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("0.0.0.0")]
[assembly: AssemblyInformationalVersion("0.0.0-dev")]
[assembly: AssemblyProduct("RicardoBracken")]
[assembly: AssemblyTitle("madkarma.RicardoBracken")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: UnverifiableCode]
[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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[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 RicardoBracken
{
[BepInPlugin("madkarma.RicardoBracken", "RicardoBracken", "0.0.0")]
public class RicardoBracken : BaseUnityPlugin
{
public static RicardoBracken Instance { get; private set; } = null;
internal static ManualLogSource Logger { get; private set; } = null;
internal static Harmony? Harmony { get; set; }
internal static Dictionary<string, AudioClip> Sfx { get; private set; } = new Dictionary<string, AudioClip>();
internal static Dictionary<string, GameObject> Models { get; private set; } = new Dictionary<string, GameObject>();
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
Instance = this;
Patch();
if (LoadBundles())
{
Logger.LogInfo((object)"madkarma.RicardoBracken v0.0.0 has loaded!");
}
else
{
Unpatch();
}
}
internal static void Patch()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
if (Harmony == null)
{
Harmony = new Harmony("madkarma.RicardoBracken");
}
Logger.LogDebug((object)"Patching...");
Harmony.PatchAll();
Logger.LogDebug((object)"Finished patching!");
}
internal static void Unpatch()
{
Logger.LogDebug((object)"Unpatching...");
Harmony? harmony = Harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
Logger.LogDebug((object)"Finished unpatching!");
}
internal static bool LoadBundles()
{
bool result = true;
string location = ((BaseUnityPlugin)Instance).Info.Location;
location = location.TrimEnd("madkarma.RicardoBracken.dll".ToCharArray());
AssetBundle val = AssetBundle.LoadFromFile(location + "audios");
AssetBundle val2 = AssetBundle.LoadFromFile(location + "models");
if ((Object)(object)val != (Object)null)
{
AudioClip[] array = val.LoadAllAssets<AudioClip>();
List<AudioClip> list = new List<AudioClip>(array.Length);
list.AddRange(array);
List<AudioClip> list2 = list;
list2.ForEach(delegate(AudioClip sound)
{
Sfx.Add(((Object)sound).name, sound);
Logger.LogInfo((object)("Loaded sound " + ((Object)sound).name));
});
Logger.LogInfo((object)"Successfully loaded the audio files");
}
else
{
result = false;
Logger.LogError((object)"Failed to load audio files");
}
if ((Object)(object)val2 != (Object)null)
{
GameObject[] array2 = val2.LoadAllAssets<GameObject>();
List<GameObject> list3 = new List<GameObject>(array2.Length);
list3.AddRange(array2);
List<GameObject> list4 = list3;
list4.ForEach(delegate(GameObject model)
{
Models.Add(((Object)model).name, model);
Logger.LogInfo((object)("Loaded model " + ((Object)model).name));
});
Logger.LogInfo((object)"Successfully loaded the model files");
}
else
{
result = false;
Logger.LogError((object)"Failed to load model files");
}
return result;
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "madkarma.RicardoBracken";
public const string PLUGIN_NAME = "RicardoBracken";
public const string PLUGIN_VERSION = "0.0.0";
}
}
namespace RicardoBracken.Patches
{
[HarmonyPatch(typeof(FlowermanAI))]
internal class FlowermanAIModelReplacement
{
[HarmonyPatch("Start")]
[HarmonyPostfix]
private static void ReplaceFlowermanModelPatch(FlowermanAI __instance)
{
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
Renderer[] componentsInChildren = ((Component)((Component)__instance).transform.Find("FlowermanModel")).GetComponentsInChildren<Renderer>();
Renderer[] array = componentsInChildren;
foreach (Renderer val in array)
{
val.enabled = false;
}
RicardoBracken.Logger.LogInfo((object)"Default bracken model hidden");
if (RicardoBracken.Models.TryGetValue("ricardo", out GameObject value))
{
GameObject val2 = Object.Instantiate<GameObject>(value, ((Component)__instance).gameObject.transform);
((Object)val2).name = "Ricardo(Clone)";
val2.transform.localPosition = Vector3.zero;
Transform transform = val2.transform;
transform.localScale += new Vector3(0.6f, 0.6f, 0.6f);
val2.SetActive(true);
}
}
[HarmonyPatch("KillEnemy")]
[HarmonyPostfix]
private static void DeleteFlowermanModelOnKilledPatch(FlowermanAI __instance)
{
((Component)((Component)__instance).transform.Find("Ricardo(Clone)")).gameObject.SetActive(false);
}
}
[HarmonyPatch(typeof(FlowermanAI))]
internal class FlowermanAIPatch
{
[HarmonyPatch("Start")]
[HarmonyPostfix]
private static void CrackNeckSoundPatch(FlowermanAI __instance)
{
if (RicardoBracken.Sfx.TryGetValue("crackneck", out AudioClip value))
{
__instance.crackNeckSFX = value;
__instance.crackNeckAudio.clip = value;
}
}
[HarmonyPatch("Start")]
[HarmonyPostfix]
private static void AngerSoundPatch(FlowermanAI __instance)
{
if (RicardoBracken.Sfx.TryGetValue("anger", out AudioClip value))
{
__instance.creatureAngerVoice.clip = value;
}
}
[HarmonyPatch("Start")]
[HarmonyPostfix]
private static void DeathSoundPatch(FlowermanAI __instance)
{
if (RicardoBracken.Sfx.TryGetValue("death", out AudioClip value))
{
((EnemyAI)__instance).dieSFX = value;
}
}
[HarmonyPatch("Start")]
[HarmonyPostfix]
private static void ScanTagPatch(FlowermanAI __instance)
{
((Component)__instance).GetComponentInChildren<ScanNodeProperties>().headerText = "Ricardo Milos";
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}