using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; 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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("EnemyReplacer")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("EnemyReplacer")] [assembly: AssemblyTitle("EnemyReplacer")] [assembly: AssemblyVersion("1.0.0.0")] namespace CustomLethalMod; [BepInPlugin("com.yourname.enemyreplacer", "Enemy Replacer Mod", "1.1.0")] public class Plugin : BaseUnityPlugin { private readonly Harmony harmony = new Harmony("com.yourname.enemyreplacer"); public static Sprite BugSprite; public static Sprite NutcrackerSprite; public static AudioClip BugMusic; public static AudioClip NutcrackerMusic; private void Awake() { string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location); string text = Path.Combine(directoryName, "my_custom_assets"); if (!File.Exists(text)) { ((BaseUnityPlugin)this).Logger.LogError((object)("[EnemyReplacer] КРИТИЧЕСКАЯ ОШИБКА: Файл ассетов не найден по пути: " + text)); return; } AssetBundle val = AssetBundle.LoadFromFile(text); if ((Object)(object)val != (Object)null) { BugSprite = val.LoadAsset("BugImage"); BugMusic = val.LoadAsset("BugAudio"); NutcrackerSprite = val.LoadAsset("NutcrackerImage"); NutcrackerMusic = val.LoadAsset("NutcrackerAudio"); ((BaseUnityPlugin)this).Logger.LogInfo((object)"[EnemyReplacer] Все кастомные ассеты успешно загружены."); } harmony.PatchAll(); } public static void ConfigureAudioSource(AudioSource source, AudioClip clip) { source.clip = clip; source.spatialBlend = 1f; source.dopplerLevel = 0f; source.rolloffMode = (AudioRolloffMode)1; source.minDistance = 2f; source.maxDistance = 12f; source.loop = true; source.bypassEffects = true; source.bypassReverbZones = true; } } public class Billboard : MonoBehaviour { private void Update() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: 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) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) Camera val = GameNetworkManager.Instance?.localPlayerController?.gameplayCamera; if ((Object)(object)val != (Object)null) { ((Component)this).transform.LookAt(((Component)this).transform.position + ((Component)val).transform.rotation * Vector3.forward, ((Component)val).transform.rotation * Vector3.up); } } } [HarmonyPatch(typeof(HoarderBugAI))] internal class HoarderBugPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void Start(HoarderBugAI __instance) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) Renderer[] componentsInChildren = ((Component)__instance).GetComponentsInChildren(); foreach (Renderer val in componentsInChildren) { val.enabled = false; } GameObject val2 = new GameObject("2D_Bug"); val2.transform.SetParent(((Component)__instance).transform); val2.transform.localPosition = new Vector3(0f, 3f, 0f); val2.AddComponent().sprite = Plugin.BugSprite; val2.transform.localScale = new Vector3(2f, 2f, 2f); val2.AddComponent(); AudioSource val3 = val2.AddComponent(); Plugin.ConfigureAudioSource(val3, Plugin.BugMusic); val3.Play(); } [HarmonyPatch("Update")] [HarmonyPostfix] private static void Update(HoarderBugAI __instance) { AudioSource componentInChildren = ((Component)__instance).GetComponentInChildren(); if ((Object)(object)componentInChildren != (Object)null && ((EnemyAI)__instance).isEnemyDead) { componentInChildren.Stop(); } } } [HarmonyPatch(typeof(NutcrackerEnemyAI))] internal class NutcrackerPatch { [HarmonyPatch("Start")] [HarmonyPostfix] private static void Start(NutcrackerEnemyAI __instance) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) Renderer[] componentsInChildren = ((Component)__instance).GetComponentsInChildren(); foreach (Renderer val in componentsInChildren) { val.enabled = false; } GameObject val2 = new GameObject("2D_Nutcracker"); val2.transform.SetParent(((Component)__instance).transform); val2.transform.localPosition = new Vector3(0f, 2.5f, 0f); val2.AddComponent().sprite = Plugin.NutcrackerSprite; val2.transform.localScale = new Vector3(1.2f, 1.2f, 1.2f); val2.AddComponent(); AudioSource source = val2.AddComponent(); Plugin.ConfigureAudioSource(source, Plugin.NutcrackerMusic); } [HarmonyPatch("Update")] [HarmonyPostfix] private static void Update(NutcrackerEnemyAI __instance) { AudioSource componentInChildren = ((Component)__instance).GetComponentInChildren(); if (!((Object)(object)componentInChildren == (Object)null)) { bool flag = !((EnemyAI)__instance).isEnemyDead; if (flag && !componentInChildren.isPlaying) { componentInChildren.Play(); } if (!flag && componentInChildren.isPlaying) { componentInChildren.Stop(); } } } }