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 MusicalInstruments v0.0.11
MusicalInstruments.dll
Decompiled 2 years agousing System; using System.Collections; using System.Collections.Generic; 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.Configuration; using BepInEx.Logging; using HarmonyLib; using LethalLib.Modules; using LethalThings; using LethalThings.MonoBehaviours; using MusicalInstruments.Instruments; using MusicalInstruments.Patches; using Unity.Netcode.Components; 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("MusicalInstruments")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("MusicalInstruments")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("be81ca85-48bf-4d3e-9a64-25fdc0e33cc3")] [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 MusicalInstruments { [BepInPlugin("01Ryan.MusicalInstruments", "Musical Instruments", "1.0.0")] public class MusicalInstrumentsBase : BaseUnityPlugin { private const string modGUID = "01Ryan.MusicalInstruments"; private const string modName = "Musical Instruments"; private const string modVersion = "1.0.0"; private readonly Harmony harmony = new Harmony("01Ryan.MusicalInstruments"); private static MusicalInstrumentsBase Instance; public static ManualLogSource mls; public static ConfigFile config; private void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = this; } mls = Logger.CreateLogSource("01Ryan.MusicalInstruments"); mls.LogInfo((object)"Musical Instruments Mod is ready to go!"); config = ((BaseUnityPlugin)this).Config; Utilities.Init(); Config.Load(); MyContent.Load(); harmony.PatchAll(typeof(MusicalInstrumentsBase)); } } } namespace MusicalInstruments.Patches { public class Config { public static ConfigEntry<int> buglePrice; public static ConfigEntry<int> banjoPrice; public static ConfigEntry<int> tambourinePrice; public static void Load() { buglePrice = MusicalInstrumentsBase.config.Bind<int>("Items", "BuglePrice", 15, "How much does Bugle cost?"); banjoPrice = MusicalInstrumentsBase.config.Bind<int>("Items", "BanjoPrice", 15, "How much does Banjo cost?"); tambourinePrice = MusicalInstrumentsBase.config.Bind<int>("Items", "TambourinePrice", 15, "How much does Tambourine cost?"); } } public class MyContent { public static AssetBundle MainAssets; public static List<CustomItem> customItems; public static void TryLoadAssets() { if (MainAssets == null) { MainAssets = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "instruments")); MusicalInstrumentsBase.mls.LogInfo((object)"Loaded asset bundle"); } } public static void Load() { //IL_0293: Unknown result type (might be due to invalid IL or missing references) //IL_02b3: Unknown result type (might be due to invalid IL or missing references) TryLoadAssets(); customItems = new List<CustomItem> { (CustomItem)(object)CustomShopItem.Add("Bugle", "Assets/Custom/MusicalInstruments/Bugle/Bugle.asset", "Assets/Custom/MusicalInstruments/Bugle/BugleInfo.asset", Config.buglePrice.Value, (Action<Item>)null, true), (CustomItem)(object)CustomShopItem.Add("Banjo", "Assets/Custom/MusicalInstruments/Banjo/Banjo.asset", "Assets/Custom/MusicalInstruments/Banjo/BanjoInfo.asset", Config.banjoPrice.Value, (Action<Item>)null, true), (CustomItem)(object)CustomShopItem.Add("Tambourine", "Assets/Custom/MusicalInstruments/Tambourine/Tambourine.asset", "Assets/Custom/MusicalInstruments/Tambourine/TambourineInfo.asset", Config.tambourinePrice.Value, (Action<Item>)null, true) }; foreach (CustomItem customItem in customItems) { if (customItem.enabled) { Item val = MainAssets.LoadAsset<Item>(customItem.itemPath); if (val.spawnPrefab.GetComponent<NetworkTransform>() == null && val.spawnPrefab.GetComponent<CustomNetworkTransform>() == null) { NetworkTransform val2 = val.spawnPrefab.AddComponent<NetworkTransform>(); val2.SlerpPosition = false; val2.Interpolate = false; val2.SyncPositionX = false; val2.SyncPositionY = false; val2.SyncPositionZ = false; val2.SyncScaleX = false; val2.SyncScaleY = false; val2.SyncScaleZ = false; val2.UseHalfFloatPrecision = true; } if (val.itemName.Equals("Bugle")) { InstrumentBase instrumentBase = val.spawnPrefab.AddComponent<InstrumentBase>(); ((GrabbableObject)instrumentBase).itemProperties = val; ((GrabbableObject)instrumentBase).grabbable = true; ((GrabbableObject)instrumentBase).grabbableToEnemies = true; instrumentBase.instrumentName = "Bugle"; instrumentBase.canPlayDifferentNotes = true; instrumentBase.canHoldNotes = true; } else if (val.itemName.Equals("Banjo")) { Banjo banjo = val.spawnPrefab.AddComponent<Banjo>(); ((GrabbableObject)banjo).itemProperties = val; ((GrabbableObject)banjo).grabbable = true; ((GrabbableObject)banjo).grabbableToEnemies = true; } else if (val.itemName.Equals("Tambourine")) { InstrumentBase instrumentBase2 = val.spawnPrefab.AddComponent<InstrumentBase>(); ((GrabbableObject)instrumentBase2).itemProperties = val; ((GrabbableObject)instrumentBase2).grabbable = true; ((GrabbableObject)instrumentBase2).grabbableToEnemies = true; instrumentBase2.instrumentName = "Tambourine"; instrumentBase2.canPlayDifferentNotes = false; instrumentBase2.canHoldNotes = false; } Content.Prefabs.Add(customItem.name, val.spawnPrefab); NetworkPrefabs.RegisterNetworkPrefab(val.spawnPrefab); customItem.itemAction(val); if (customItem is CustomShopItem) { TerminalNode val3 = MainAssets.LoadAsset<TerminalNode>(customItem.infoPath); MusicalInstrumentsBase.mls.LogInfo((object)$"Registering shop item {customItem.name} with price {((CustomShopItem)customItem).itemPrice}"); Items.RegisterShopItem(val, (TerminalNode)null, (TerminalNode)null, val3, ((CustomShopItem)customItem).itemPrice); } } } MusicalInstrumentsBase.mls.LogInfo((object)"Musical Instruments loaded!"); } } } namespace MusicalInstruments.Instruments { internal class Banjo : Shovel { private InstrumentBase instrument; private bool isMordhauGripEnabled = false; private Item myItemProperties; public override void Start() { ((GrabbableObject)this).Start(); myItemProperties = Object.Instantiate<Item>(((GrabbableObject)this).itemProperties); instrument = ((Component)this).gameObject.AddComponent<InstrumentBase>(); ((GrabbableObject)instrument).itemProperties = myItemProperties; ((GrabbableObject)instrument).grabbable = true; ((GrabbableObject)instrument).grabbableToEnemies = true; instrument.instrumentName = "Banjo"; instrument.canPlayDifferentNotes = true; instrument.canHoldNotes = false; instrument.instrumentAudio = ((Component)this).GetComponent<AudioSource>(); instrument.instrumentSound = instrument.instrumentAudio.clip; ((GrabbableObject)instrument).Start(); ((GrabbableObject)this).itemProperties = myItemProperties; base.shovelHitForce = 1; base.reelUp = MyContent.MainAssets.LoadAsset<AudioClip>("Assets/Custom/MusicalInstruments/Banjo/Banjo-ReelUp-trimmed.wav"); base.hitSFX = (AudioClip[])(object)new AudioClip[1] { MyContent.MainAssets.LoadAsset<AudioClip>("Assets/Custom/MusicalInstruments/Banjo/Banjo Notes.mp3") }; base.shovelAudio = ((Component)this).GetComponent<AudioSource>(); } public override void Update() { ((GrabbableObject)this).Update(); if (base.reelingUp) { ((GrabbableObject)this).ItemActivate(true, false); } } public override void ItemActivate(bool used, bool buttonDown = true) { if (base.reelingUp) { buttonDown = false; base.isHoldingButton = false; ((GrabbableObject)this).isHeld = true; } if (isMordhauGripEnabled) { base.shovelHitForce = 1; base.reelUp = MyContent.MainAssets.LoadAsset<AudioClip>("Assets/Custom/MusicalInstruments/Banjo/Banjo-ReelUp-trimmed.wav"); base.hitSFX = (AudioClip[])(object)new AudioClip[1] { MyContent.MainAssets.LoadAsset<AudioClip>("Assets/Custom/MusicalInstruments/Banjo/Banjo Notes.mp3") }; base.shovelAudio = ((Component)this).GetComponent<AudioSource>(); ((Shovel)this).ItemActivate(used, buttonDown); } else { ((GrabbableObject)instrument).playerHeldBy = ((GrabbableObject)this).playerHeldBy; ((GrabbableObject)instrument).ItemActivate(used, buttonDown); } } public override void ItemInteractLeftRight(bool right) { ((GrabbableObject)this).ItemInteractLeftRight(right); if (!right) { MusicalInstrumentsBase.mls.LogInfo((object)"Toggle grip"); ToggleMordhauGrip(); } } public void ToggleMordhauGrip() { //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) if (isMordhauGripEnabled) { ((Behaviour)instrument).enabled = true; myItemProperties.toolTips[0] = "Play note : [LMB]"; ((GrabbableObject)this).SetControlTipsForItem(); myItemProperties.positionOffset = new Vector3(0f, 0.3f, 0.3f); myItemProperties.rotationOffset = new Vector3(0f, -90f, 120f); MusicalInstrumentsBase.mls.LogInfo((object)"Mordhau grip : off"); isMordhauGripEnabled = false; } else { ((Behaviour)instrument).enabled = false; myItemProperties.toolTips[0] = "Swing : [LMB]"; ((GrabbableObject)this).SetControlTipsForItem(); myItemProperties.positionOffset = new Vector3(-0.1f, 0f, -0.7f); myItemProperties.rotationOffset = new Vector3(0f, -90f, -100f); MusicalInstrumentsBase.mls.LogInfo((object)"Mordhau grip : activated"); isMordhauGripEnabled = true; } } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); ((GrabbableObject)this).playerHeldBy.equippedUsableItemQE = true; } public override void DiscardItem() { ((Shovel)this).DiscardItem(); if (isMordhauGripEnabled) { ToggleMordhauGrip(); } ((GrabbableObject)this).isHeld = false; } public override void GrabItem() { //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).GrabItem(); ((GrabbableObject)this).isHeld = true; isMordhauGripEnabled = false; ((Behaviour)instrument).enabled = true; myItemProperties.toolTips[0] = "Play note : [LMB]"; ((GrabbableObject)this).SetControlTipsForItem(); myItemProperties.positionOffset = new Vector3(0f, 0.3f, 0.3f); myItemProperties.rotationOffset = new Vector3(0f, -90f, 120f); } protected override void __initializeVariables() { ((Shovel)this).__initializeVariables(); } } internal class InstrumentBase : GrabbableObject { public string instrumentName; public AudioSource instrumentAudio; public AudioClip instrumentSound; public float pitch; public bool canPlayDifferentNotes; public bool canHoldNotes; public override void ItemActivate(bool used, bool buttonDown = true) { //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).ItemActivate(used, buttonDown); if (!buttonDown) { if (canHoldNotes) { ((MonoBehaviour)this).StartCoroutine("StopAudio"); } } else if (!((Object)(object)GameNetworkManager.Instance.localPlayerController == (Object)null)) { if (canPlayDifferentNotes) { Transform transform = ((Component)base.playerHeldBy.gameplayCamera).transform; Vector3 forward = transform.forward; forward.y = 0f; ((Vector3)(ref forward)).Normalize(); Vector3 val = forward; Vector3 forward2 = transform.forward; float num = Vector3.SignedAngle(val, ((Vector3)(ref forward2)).normalized, transform.right); pitch = 1f / (num / 90f + 1f); instrumentAudio.pitch = Mathf.Clamp(pitch, 0.2f, 1.5f); } if (canHoldNotes) { instrumentAudio.Play(); WalkieTalkie.TransmitOneShotAudio(instrumentAudio, instrumentSound, 1f); RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 10f, 0.5f, 0, false, 0); } else { instrumentAudio.PlayOneShot(instrumentSound); WalkieTalkie.TransmitOneShotAudio(instrumentAudio, instrumentSound, 1f); RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, 10f, 0.5f, 0, false, 0); } } } public IEnumerator StopAudio() { float startVolume = instrumentAudio.volume; while (instrumentAudio.volume > 0f) { AudioSource obj = instrumentAudio; obj.volume -= startVolume * Time.deltaTime / 0.1f; yield return null; } instrumentAudio.Stop(); instrumentAudio.volume = startVolume; } public override void Update() { //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)((Component)this).gameObject.GetComponent<Shovel>())) { ((GrabbableObject)this).Update(); if (instrumentAudio.isPlaying && canPlayDifferentNotes && canHoldNotes && base.isHeld) { Transform transform = ((Component)base.playerHeldBy.gameplayCamera).transform; Vector3 forward = transform.forward; forward.y = 0f; ((Vector3)(ref forward)).Normalize(); Vector3 val = forward; Vector3 forward2 = transform.forward; float num = Vector3.SignedAngle(val, ((Vector3)(ref forward2)).normalized, transform.right); pitch = 1f / (num / 90f + 1f); instrumentAudio.pitch = Mathf.Clamp(pitch, 0.2f, 1.5f); } } } public override void Start() { ((GrabbableObject)this).Start(); instrumentAudio = ((Component)this).GetComponent<AudioSource>(); instrumentSound = instrumentAudio.clip; } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); base.isHeld = false; base.playerHeldBy = null; } } }