Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of FreminetButlerMod v1.0.4
FreminetButler.dll
Decompiled 2 years agousing 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 LCSoundTool; 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("FreminetButler")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("FreminetButler")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("965165e6-32a4-4610-8b74-1b17e406293b")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] namespace FreminetButler; [BepInPlugin("FreminetButler", "GoblinKingShmeesFreminetButler", "1.0.0")] public class FremModBase : BaseUnityPlugin { public class PenguinFacingDirection : MonoBehaviour { public ButlerBeesEnemyAI butlerBeesEnemyAI; public Vector3 prevPosition; private void Update() { //IL_000c: 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_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)butlerBeesEnemyAI).transform.position - prevPosition; val.y = 0f; if (val != Vector3.zero) { Quaternion rotation = Quaternion.LookRotation(val); PenguinObject.transform.rotation = rotation; } prevPosition = ((Component)butlerBeesEnemyAI).transform.position; } } private readonly Harmony harmony = new Harmony("FremButler"); private static FremModBase Instance; public static ManualLogSource mls; public static GameObject FremPrefab; public static GameObject FremObject; public static GameObject PenguinPrefab; public static GameObject PenguinObject; private AudioClip soundFremBalloonsTowerDefenseSix; public static AudioClip soundFremBuzzingAmbience; public static AudioClip soundFremIdleAmbience; public static AudioClip soundFremMurderTheme; public static AudioClip soundFremPersWalking; public static AssetBundle FremAssetBundle; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = ((BaseUnityPlugin)this).Logger; mls.LogInfo((object)"--=== FREM MOD LOADED ===--"); harmony.PatchAll(typeof(FremModBase)); string text = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "frem"); mls.LogDebug((object)text); FremAssetBundle = AssetBundle.LoadFromFile(text); if ((Object)(object)FremAssetBundle == (Object)null) { mls.LogError((object)"-Could not find klee Assets-"); } FremPrefab = FremAssetBundle.LoadAsset<GameObject>("Assets/PrefabInstance/Frem.prefab"); PenguinPrefab = FremAssetBundle.LoadAsset<GameObject>("Assets/PrefabInstance/Penguin.prefab"); SkinnedMeshRenderer[] componentsInChildren = FremPrefab.GetComponentsInChildren<SkinnedMeshRenderer>(true); SkinnedMeshRenderer[] array = componentsInChildren; foreach (SkinnedMeshRenderer val in array) { ((Component)val).gameObject.layer = LayerMask.NameToLayer("Enemies"); } } private void Start() { soundFremBalloonsTowerDefenseSix = FremAssetBundle.LoadAsset<AudioClip>("Assets/AudioClip/FremBalloonsTowerDefenseSix.ogg"); soundFremBuzzingAmbience = FremAssetBundle.LoadAsset<AudioClip>("Assets/AudioClip/FremBuzzingAmbience.ogg"); soundFremIdleAmbience = FremAssetBundle.LoadAsset<AudioClip>("Assets/AudioClip/FremIdleAmbience.ogg"); soundFremMurderTheme = FremAssetBundle.LoadAsset<AudioClip>("Assets/AudioClip/FremMurderTheme.ogg"); soundFremPersWalking = FremAssetBundle.LoadAsset<AudioClip>("Assets/AudioClip/FremPersWalking.ogg"); SoundTool.ReplaceAudioClip("ButlerBuzzingAmbience", soundFremBuzzingAmbience); SoundTool.ReplaceAudioClip("ButlerIdleAmbience", soundFremIdleAmbience); SoundTool.ReplaceAudioClip("ButlerMurderTheme", soundFremMurderTheme); SoundTool.ReplaceAudioClip("BalloonPop", soundFremBalloonsTowerDefenseSix); } [HarmonyPatch(typeof(ButlerEnemyAI), "Start")] [HarmonyPostfix] public static void PluginDetectButler(ButlerEnemyAI __instance) { //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) __instance.ambience1.clip = soundFremIdleAmbience; __instance.ambience2.clip = soundFremMurderTheme; __instance.buzzingAmbience.clip = soundFremBuzzingAmbience; Transform parent = ((Component)__instance).transform.Find("MeshContainer"); ((Renderer)((Component)((Component)__instance).gameObject.transform.Find("MeshContainer").Find("Rig 1").Find("Arms") .Find("RightArm") .Find("upperRightArmContainer") .Find("upper_arm.R_target") .Find("Knife")).gameObject.GetComponent<MeshRenderer>()).enabled = false; ((Renderer)((Component)((Component)__instance).gameObject.transform.Find("MeshContainer").Find("BodyLOD0")).gameObject.GetComponent<SkinnedMeshRenderer>()).enabled = false; ((Renderer)((Component)((Component)__instance).gameObject.transform.Find("MeshContainer").Find("BodyLOD1")).gameObject.GetComponent<SkinnedMeshRenderer>()).enabled = false; ((Renderer)((Component)((Component)__instance).gameObject.transform.Find("MeshContainer").Find("BodyLOD2")).gameObject.GetComponent<SkinnedMeshRenderer>()).enabled = false; ((Renderer)((Component)((Component)__instance).gameObject.transform.Find("MeshContainer").Find("metarig").Find("spine") .Find("Broom")).gameObject.GetComponent<MeshRenderer>()).enabled = false; ((Renderer)((Component)((Component)__instance).gameObject.transform.Find("MeshContainer").Find("metarig").Find("spine") .Find("spine.001") .Find("NeckContainer") .Find("spine.004") .Find("face") .Find("Hair")).gameObject.GetComponent<MeshRenderer>()).enabled = false; ((Renderer)((Component)((Component)__instance).gameObject.transform.Find("MeshContainer").Find("metarig").Find("spine") .Find("spine.001") .Find("NeckContainer") .Find("spine.004") .Find("face") .Find("Teeth")).gameObject.GetComponent<MeshRenderer>()).enabled = false; ((Component)((Component)__instance).gameObject.transform.Find("ScanNode")).gameObject.GetComponent<ScanNodeProperties>().headerText = "Freminet"; FremObject = Object.Instantiate<GameObject>(FremPrefab); FremObject.transform.SetParent(parent); FremObject.transform.localRotation = Quaternion.Euler(0f, 0f, 0f); FremObject.transform.localPosition = Vector3.zero; ((EnemyAI)__instance).creatureAnimator = ((Component)FremObject.transform).GetComponent<Animator>(); } [HarmonyPatch(typeof(ButlerEnemyAI), "CalculateAnimationDirection")] [HarmonyPostfix] public static void OnCalculateAnimationDirection(ButlerEnemyAI __instance, float maxSpeed, ref float ___velX, ref float ___velZ) { Animator component = ((Component)((Component)__instance).gameObject.transform.Find("MeshContainer")).gameObject.GetComponent<Animator>(); if (!((Object)(object)component == (Object)null)) { component.SetFloat("VelocityX", Mathf.Clamp(___velX, 0f - maxSpeed, maxSpeed)); component.SetFloat("VelocityZ", Mathf.Clamp(___velZ, 0f - maxSpeed, maxSpeed)); } } [HarmonyPatch(typeof(ButlerEnemyAI), "KillEnemy")] [HarmonyPostfix] public static void OnDeath(ButlerEnemyAI __instance) { ((EnemyAI)__instance).creatureSFX.volume = 0.01f; } [HarmonyPatch(typeof(ButlerBeesEnemyAI), "Start")] [HarmonyPostfix] public static void Pengin(ButlerBeesEnemyAI __instance) { //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) __instance.buzzing.clip = soundFremPersWalking; __instance.buzzing.Play(); Transform parent = ((Component)__instance).transform.Find("ScanNode"); Object.Destroy((Object)(object)((Component)((Component)__instance).gameObject.transform.Find("BugSwarmParticle")).gameObject); Object.Destroy((Object)(object)((Component)((Component)__instance).gameObject.transform.Find("BugSwarmParticle").Find("Target")).gameObject.GetComponent<MeshRenderer>()); PenguinObject = Object.Instantiate<GameObject>(PenguinPrefab); ((Component)((Component)__instance).gameObject.transform.Find("ScanNode")).gameObject.GetComponent<ScanNodeProperties>().headerText = "Pers"; PenguinObject.transform.SetParent(parent); PenguinObject.transform.localRotation = Quaternion.identity; PenguinObject.transform.localPosition = new Vector3(0f, -2f, 0f); Vector3 position = ((Component)__instance).transform.position; PenguinFacingDirection penguinFacingDirection = PenguinObject.AddComponent<PenguinFacingDirection>(); penguinFacingDirection.butlerBeesEnemyAI = __instance; penguinFacingDirection.prevPosition = position; ((EnemyAI)__instance).creatureAnimator = ((Component)PenguinObject.transform).GetComponent<Animator>(); } [HarmonyPatch(typeof(ButlerBeesEnemyAI), "DoAIInterval")] [HarmonyPostfix] public static void Movement(ButlerBeesEnemyAI __instance) { Animator creatureAnimator = ((EnemyAI)__instance).creatureAnimator; ((Behaviour)((EnemyAI)__instance).creatureAnimator).enabled = true; ((Behaviour)creatureAnimator).enabled = true; creatureAnimator.SetBool("moving", true); } }