using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; 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("Mon Mod3")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Mon Mod3")] [assembly: AssemblyCopyright("Copyright © 2026")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e28cb677-84db-4c6a-9873-68eb96b2ae56")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyVersion("1.0.0.0")] public class ItemNoiseMaker : Trap { [Header("References")] public ItemToggle itemToggle; private ItemBattery itemBattery; private ItemAttributes itemAttributes; [Header("Battery")] public bool hasBattery = true; [Header("Battery Drain")] public float batteryDrainRate = 5f; [Header("Sounds")] public Sound soundStart; public Sound soundStop; [Header("Music Sounds")] public Sound loopSound1; public Sound loopSound2; public Sound loopSound3; public Sound loopSound4; public Sound loopSound5; public Sound loopSound6; public Sound loopSound7; public Sound loopSound8; [Header("Music Chances")] [Range(0f, 100f)] public float chance1 = 40f; [Range(0f, 100f)] public float chance2 = 20f; [Range(0f, 100f)] public float chance3 = 10f; [Range(0f, 100f)] public float chance4 = 10f; [Range(0f, 100f)] public float chance5 = 7f; [Range(0f, 100f)] public float chance6 = 5f; [Range(0f, 100f)] public float chance7 = 5f; [Range(0f, 100f)] public float chance8 = 3f; [Header("Audio")] public float musicVolume = 12f; public float musicPitch = 1f; [Header("Modes")] public float mode1 = 10f; public float mode2 = 30f; public float mode3 = 60f; public bool infiniteMode = true; [Header("Input")] public KeyCode cycleKey = (KeyCode)118; private Sound currentLoopSound; private bool itemActive; private float timer; private float maxDuration; private int modeIndex = 0; private float[] durations; protected override void Start() { if (!Object.op_Implicit((Object)(object)itemToggle)) { itemToggle = ((Component)this).GetComponent(); } itemBattery = ((Component)this).GetComponent(); if (!Object.op_Implicit((Object)(object)itemBattery)) { hasBattery = false; } itemAttributes = ((Component)this).GetComponent(); ((Trap)this).Start(); UpdateDurations(); UpdateItemName(); if (hasBattery) { itemBattery.autoDrain = true; itemBattery.batteryDrainRate = batteryDrainRate; } Debug.Log((object)"ItemNoiseMaker loaded"); } protected override void Update() { //IL_0009: Unknown result type (might be due to invalid IL or missing references) ((Trap)this).Update(); if (Input.GetKeyDown(cycleKey)) { CycleMode(); } if ((Object)(object)itemToggle != (Object)null) { bool flag = itemActive; itemActive = itemToggle.toggleState; if (flag != itemActive) { if (itemActive) { StartItem(); } else { StopItem(); } } } if (!itemActive) { return; } if (hasBattery && itemBattery.batteryLife <= 0f) { itemToggle.ToggleItem(false, -1); return; } if (currentLoopSound != null) { currentLoopSound.PlayLoop(true, musicVolume, musicPitch, 1f, 1f); } base.enemyInvestigate = true; if (maxDuration > 0f) { timer -= Time.deltaTime; if (timer <= 0f && (Object)(object)itemToggle != (Object)null) { itemToggle.ToggleItem(false, -1); } } } private void StartItem() { //IL_005d: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"ITEM ACTIVE"); base.trapStart = true; base.enemyInvestigate = true; if (hasBattery) { itemBattery.batteryDrainRate = batteryDrainRate; itemBattery.BatteryToggle(true); } if (soundStart != null) { soundStart.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); } currentLoopSound = GetRandomLoopSound(); if (currentLoopSound != null && (Object)(object)currentLoopSound.Source != (Object)null) { currentLoopSound.Source.Stop(); currentLoopSound.Source.time = 0f; } UpdateDurations(); maxDuration = durations[modeIndex]; if (maxDuration > 0f) { timer = maxDuration; } else { timer = 0f; } } private void StopItem() { //IL_00bc: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"ITEM STOP"); base.trapTriggered = false; base.enemyInvestigate = false; if (hasBattery) { itemBattery.BatteryToggle(false); } if (currentLoopSound != null) { currentLoopSound.PlayLoop(false, musicVolume, musicPitch, 1f, 1f); if ((Object)(object)currentLoopSound.Source != (Object)null) { currentLoopSound.Source.Stop(); currentLoopSound.Source.time = 0f; } } if (soundStop != null) { soundStop.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); } } private void UpdateDurations() { if (infiniteMode) { durations = new float[4] { mode1, mode2, mode3, -1f }; } else { durations = new float[3] { mode1, mode2, mode3 }; } if (modeIndex >= durations.Length) { modeIndex = 0; } } private void CycleMode() { modeIndex++; if (modeIndex >= durations.Length) { modeIndex = 0; } UpdateItemName(); if (durations[modeIndex] < 0f) { Debug.Log((object)"Mode: BATTERY"); } else { Debug.Log((object)("Mode: " + durations[modeIndex] + "s")); } } private void UpdateItemName() { if (Object.op_Implicit((Object)(object)itemAttributes)) { string text = ((!(durations[modeIndex] < 0f)) ? (durations[modeIndex].ToString("0") + "s") : "Battery"); itemAttributes.item.itemName = "Mic [" + text + "]"; } } private Sound GetRandomLoopSound() { float num = chance1 + chance2 + chance3 + chance4 + chance5 + chance6 + chance7 + chance8; float num2 = Random.Range(0f, num); if (num2 <= chance1) { return loopSound1; } num2 -= chance1; if (num2 <= chance2) { return loopSound2; } num2 -= chance2; if (num2 <= chance3) { return loopSound3; } num2 -= chance3; if (num2 <= chance4) { return loopSound4; } num2 -= chance4; if (num2 <= chance5) { return loopSound5; } num2 -= chance5; if (num2 <= chance6) { return loopSound6; } num2 -= chance6; if (num2 <= chance7) { return loopSound7; } return loopSound8; } } [BepInPlugin("com.neil.itemnoisemaker", "ItemNoiseMaker", "1.0.0")] public class ItemNoiseMakerPlugin : BaseUnityPlugin { private void Awake() { ((BaseUnityPlugin)this).Logger.LogInfo((object)"ItemNoiseMaker loaded!"); } }