using System;
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.Logging;
using HarmonyLib;
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("WheezerBug")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("WheezerBug")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("291b9de5-a65e-4e92-b966-1d39130771d4")]
[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 WheezerBug
{
[BepInPlugin("KadenBiel.WheezerBug", "WheezerBug", "1.0.1")]
public class BugBase : BaseUnityPlugin
{
private const string modGUID = "KadenBiel.WheezerBug";
private const string modName = "WheezerBug";
private const string modVersion = "1.0.1";
private readonly Harmony harmony = new Harmony("KadenBiel.WheezerBug");
private static BugBase Instance;
public static ManualLogSource mls;
public static AssetBundle BugAssets;
public static GameObject BugPrefab;
public static AudioClip Chat1;
public static AudioClip Chat2;
public static AudioClip Chat3;
public static AudioClip Chat4;
public static AudioClip Chat5;
public static AudioClip Chat6;
public static AudioClip Chat7;
public static AudioClip Holly;
public static AudioClip Mad1;
public static AudioClip Mad2;
public static AudioClip Mad3;
public static string modDir;
private void Awake()
{
if ((Object)(object)Instance == (Object)null)
{
Instance = this;
}
modDir = ((BaseUnityPlugin)this).Info.Location;
mls = Logger.CreateLogSource("KadenBiel.WheezerBug");
LoadAssets();
mls.LogInfo((object)"WheezerBug is awake");
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null);
}
private static void LoadAssets()
{
try
{
BugAssets = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(modDir), "wheezerbug"));
}
catch (Exception ex)
{
mls.LogError((object)("AssetBundle failed to load -- " + ex.Message));
return;
}
try
{
BugPrefab = BugAssets.LoadAsset<GameObject>("WheezerBug.prefab");
Chat1 = BugAssets.LoadAsset<AudioClip>("AlmostAsPretty.ogg");
Holly = BugAssets.LoadAsset<AudioClip>("BuddyHolly.ogg");
Chat2 = BugAssets.LoadAsset<AudioClip>("CROISSANT.ogg");
Chat3 = BugAssets.LoadAsset<AudioClip>("DeadPDF.ogg");
Mad1 = BugAssets.LoadAsset<AudioClip>("DontFeelGood.ogg");
Mad2 = BugAssets.LoadAsset<AudioClip>("GonnaCry.ogg");
Chat4 = BugAssets.LoadAsset<AudioClip>("HiJimmysMom.ogg");
Chat5 = BugAssets.LoadAsset<AudioClip>("HiMrsNeutron.ogg");
Chat6 = BugAssets.LoadAsset<AudioClip>("Pincones.ogg");
Chat7 = BugAssets.LoadAsset<AudioClip>("Valentine.ogg");
Mad3 = BugAssets.LoadAsset<AudioClip>("WhatWeHave.ogg");
mls.LogInfo((object)"Wheezer Assets Loaded");
}
catch (Exception ex2)
{
mls.LogError((object)("Failed to load assets -- " + ex2.Message));
}
}
}
}
namespace WheezerBug.Patches
{
[HarmonyPatch]
internal class BugPatch
{
[HarmonyPatch(typeof(HoarderBugAI), "Start")]
[HarmonyPostfix]
private static void addController(ButlerEnemyAI __instance)
{
((Component)__instance).gameObject.AddComponent<CarlController>();
BugBase.mls.LogInfo((object)"Carl Instantiated");
}
}
internal class CarlController : MonoBehaviour
{
private static GameObject Carl;
private HoarderBugAI BugAI { get; set; }
private Animator Animator { get; set; }
private bool IsDead { get; set; }
private Vector3 prevPosition { get; set; }
private void LoadAudio()
{
BugAI.chitterSFX = (AudioClip[])(object)new AudioClip[7]
{
BugBase.Chat1,
BugBase.Chat2,
BugBase.Chat3,
BugBase.Chat4,
BugBase.Chat5,
BugBase.Chat6,
BugBase.Chat7
};
BugAI.angryScreechSFX = (AudioClip[])(object)new AudioClip[3]
{
BugBase.Mad1,
BugBase.Mad2,
BugBase.Mad3
};
BugAI.bugFlySFX = BugBase.Holly;
BugBase.mls.LogInfo((object)"Audio Replaced");
}
private void HideBugModel()
{
try
{
BugBase.mls.LogInfo((object)"Attempting to find bug");
Renderer[] componentsInChildren = ((Component)((Component)BugAI).transform.Find("HoarderBugModel")).GetComponentsInChildren<Renderer>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
componentsInChildren[i].enabled = false;
}
BugBase.mls.LogInfo((object)"Bug Hidden");
}
catch (Exception ex)
{
for (int j = 0; j < ((Component)BugAI).transform.childCount - 1; j++)
{
BugBase.mls.LogInfo((object)("Index: " + j + " Name: " + ((Object)((Component)BugAI).transform.GetChild(j)).name));
}
BugBase.mls.LogError((object)("Failed to find Bug Model: " + ex.Message));
}
}
private void EnableCarl()
{
try
{
MeshRenderer[] componentsInChildren = Carl.GetComponentsInChildren<MeshRenderer>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
((Renderer)componentsInChildren[i]).enabled = true;
}
}
catch (Exception ex)
{
BugBase.mls.LogError((object)("Failed to find Carl Model: " + ex.Message));
}
}
private void Start()
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
BugBase.mls.LogInfo((object)"Carl Started");
BugAI = ((Component)this).GetComponent<HoarderBugAI>();
Carl = Object.Instantiate<GameObject>(BugBase.BugPrefab, ((Component)BugAI).transform.position, Quaternion.identity, ((Component)BugAI).transform);
Animator = Carl.GetComponent<Animator>();
LoadAudio();
HideBugModel();
EnableCarl();
}
private void Update()
{
//IL_0029: 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)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
Animator.SetBool("isFlying", ((EnemyAI)BugAI).movingTowardsTargetPlayer);
Animator.SetBool("isMoving", prevPosition != ((Component)this).transform.position);
prevPosition = ((Component)this).transform.position;
if (((EnemyAI)BugAI).isEnemyDead && !IsDead)
{
KillGoku();
}
}
private void KillGoku()
{
Animator.SetBool("isDead", true);
IsDead = true;
BugBase.mls.LogInfo((object)"Carl Died");
}
}
}