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 Instruments4Music v2.1.0
Instruments4Music.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using GameNetcodeStuff; using HarmonyLib; using Instruments4Music.NetcodePatcher; using LethalCompanyInputUtils.Api; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using UnityEngine.Audio; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Utilities; using UnityEngine.UI; [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: IgnoresAccessChecksTo("Unity.Netcode.Runtime")] [assembly: AssemblyCompany("Instruments4Music")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyDescription("Add instruments to play music.")] [assembly: AssemblyFileVersion("0.5.0.0")] [assembly: AssemblyInformationalVersion("0.5.0+1db909e8ff82555010a3cb2aad7ba8ddc2e5ae7c")] [assembly: AssemblyProduct("Instruments4Music")] [assembly: AssemblyTitle("Instruments4Music")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.5.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] internal class <Module> { static <Module>() { } } namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Instruments4Music { public class InputActions : LcInputActions { [InputAction("<Keyboard>/backslash", Name = "SwitchTuneMethod", ActionId = "SwitchTuneMethod")] public InputAction? SwitchTuneMethod { get; set; } [InputAction("<Keyboard>/backspace", Name = "Showtime!", ActionId = "Showtime", KbmInteractions = "hold(duration = 1)")] public InputAction? Showtime { get; set; } [InputAction("<Keyboard>/escape", Name = "Curtain Call", ActionId = "CurtainCall")] public InputAction? CurtainCall { get; set; } [InputAction("<Keyboard>/leftShift", Name = "Semitone", ActionId = "Semitone")] public InputAction? Semitone { get; set; } [InputAction("<Keyboard>/space", Name = "Sustain", ActionId = "Sustain")] public InputAction? Sustain { get; set; } [InputAction("<Keyboard>/leftCtrl", Name = "Soft", ActionId = "Soft")] public InputAction? Soft { get; set; } [InputAction("<Keyboard>/tab", Name = "Change Mode", ActionId = "ChangeMode")] public InputAction? ChangeMode { get; set; } [InputAction("<Keyboard>/enter", Name = "Input Note", ActionId = "InputNote")] public InputAction? InputNote { get; set; } [InputAction("<Keyboard>/q", Name = "High C", ActionId = "HighC")] public InputAction? HighCKey { get; set; } [InputAction("<Keyboard>/w", Name = "High D", ActionId = "HighD")] public InputAction? HighDKey { get; set; } [InputAction("<Keyboard>/e", Name = "High E", ActionId = "HighE")] public InputAction? HighEKey { get; set; } [InputAction("<Keyboard>/r", Name = "High F", ActionId = "HighF")] public InputAction? HighFKey { get; set; } [InputAction("<Keyboard>/t", Name = "High G", ActionId = "HighG")] public InputAction? HighGKey { get; set; } [InputAction("<Keyboard>/y", Name = "High A", ActionId = "HighA")] public InputAction? HighAKey { get; set; } [InputAction("<Keyboard>/u", Name = "High B", ActionId = "HighB")] public InputAction? HighBKey { get; set; } [InputAction("<Keyboard>/a", Name = "Mid C", ActionId = "MidC")] public InputAction? MidCKey { get; set; } [InputAction("<Keyboard>/s", Name = "Mid D", ActionId = "MidD")] public InputAction? MidDKey { get; set; } [InputAction("<Keyboard>/d", Name = "Mid E", ActionId = "MidE")] public InputAction? MidEKey { get; set; } [InputAction("<Keyboard>/f", Name = "Mid F", ActionId = "MidF")] public InputAction? MidFKey { get; set; } [InputAction("<Keyboard>/g", Name = "Mid G", ActionId = "MidG")] public InputAction? MidGKey { get; set; } [InputAction("<Keyboard>/h", Name = "Mid A", ActionId = "MidA")] public InputAction? MidAKey { get; set; } [InputAction("<Keyboard>/j", Name = "Mid B", ActionId = "MidB")] public InputAction? MidBKey { get; set; } [InputAction("<Keyboard>/z", Name = "Low C", ActionId = "LowC")] public InputAction? LowCKey { get; set; } [InputAction("<Keyboard>/x", Name = "Low D", ActionId = "LowD")] public InputAction? LowDKey { get; set; } [InputAction("<Keyboard>/c", Name = "Low E", ActionId = "LowE")] public InputAction? LowEKey { get; set; } [InputAction("<Keyboard>/v", Name = "Low F", ActionId = "LowF")] public InputAction? LowFKey { get; set; } [InputAction("<Keyboard>/b", Name = "Low G", ActionId = "LowG")] public InputAction? LowGKey { get; set; } [InputAction("<Keyboard>/n", Name = "Low A", ActionId = "LowA")] public InputAction? LowAKey { get; set; } [InputAction("<Keyboard>/m", Name = "Low B", ActionId = "LowB")] public InputAction? LowBKey { get; set; } [InputAction("<Keyboard>/y", Name = "Low C2", ActionId = "LowC2")] public InputAction? LowCKey2 { get; set; } [InputAction("<Keyboard>/u", Name = "Low D2", ActionId = "LowD2")] public InputAction? LowDKey2 { get; set; } [InputAction("<Keyboard>/i", Name = "Low E2", ActionId = "LowE2")] public InputAction? LowEKey2 { get; set; } [InputAction("<Keyboard>/o", Name = "Low F2", ActionId = "LowF2")] public InputAction? LowFKey2 { get; set; } [InputAction("<Keyboard>/p", Name = "Low G2", ActionId = "LowG2")] public InputAction? LowGKey2 { get; set; } [InputAction("<Keyboard>/h", Name = "Low A2", ActionId = "LowA2")] public InputAction? LowAKey2 { get; set; } [InputAction("<Keyboard>/j", Name = "Low B2", ActionId = "LowB2")] public InputAction? LowBKey2 { get; set; } [InputAction("<Keyboard>/k", Name = "Mid C2", ActionId = "MidC2")] public InputAction? MidCKey2 { get; set; } [InputAction("<Keyboard>/l", Name = "Mid D2", ActionId = "MidD2")] public InputAction? MidDKey2 { get; set; } [InputAction("<Keyboard>/semicolon", Name = "Mid E2", ActionId = "MidE2")] public InputAction? MidEKey2 { get; set; } [InputAction("<Keyboard>/n", Name = "Mid F2", ActionId = "MidF2")] public InputAction? MidFKey2 { get; set; } [InputAction("<Keyboard>/m", Name = "Mid G2", ActionId = "MidG2")] public InputAction? MidGKey2 { get; set; } [InputAction("<Keyboard>/comma", Name = "Mid A2", ActionId = "MidA2")] public InputAction? MidAKey2 { get; set; } [InputAction("<Keyboard>/period", Name = "Mid B2", ActionId = "MidB2")] public InputAction? MidBKey2 { get; set; } [InputAction("<Keyboard>/slash", Name = "High C2", ActionId = "HighC2")] public InputAction? HighCKey2 { get; set; } public static string GetButtonDescription(InputAction action) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: 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_002f: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) bool localPlayerUsingController = StartOfRound.Instance.localPlayerUsingController; InputBinding? val = null; Enumerator<InputBinding> enumerator = action.bindings.GetEnumerator(); try { if (enumerator.MoveNext()) { InputBinding current = enumerator.Current; if (localPlayerUsingController || (!((InputBinding)(ref current)).effectivePath.StartsWith("<Keyboard>") && !((InputBinding)(ref current)).effectivePath.StartsWith("<Mouse>"))) { return ""; } val = current; } } finally { ((IDisposable)enumerator).Dispose(); } object obj; if (!val.HasValue) { obj = ""; } else { InputBinding value = val.Value; obj = ((InputBinding)(ref value)).effectivePath; } string text = (string)obj; string[] array = text.Split("/"); string text2 = ((array.Length > 1) ? text : ""); if (1 == 0) { } string result; switch (text2) { case "<Mouse>/leftButton": result = "LΜB"; break; case "<Mouse>/rightButton": result = "RΜB"; break; case "<Keyboard>/escape": result = "ESC"; break; case "<Keyboard>/semicolon": result = ";"; break; case "<Keyboard>/comma": result = ","; break; case "<Keyboard>/period": result = "."; break; case "<Keyboard>/slash": result = "/"; break; default: { object obj2; if (array.Length <= 1) { obj2 = "?"; } else { string text3 = array[1].Substring(0, 1).ToUpper(); string text4 = array[1]; obj2 = text3 + text4.Substring(1, text4.Length - 1); } result = (string)obj2; break; } } if (1 == 0) { } return result; } } [BepInPlugin("com.bean.Instruments4Music", "Instruments4Music", "2.1.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInProcess("Lethal Company.exe")] public class Instruments4MusicPlugin : BaseUnityPlugin { public static Instruments4MusicPlugin? Instance; internal static ManualLogSource? logger; public static ConfigFile? config; internal static InputActions InputActionsInstance = new InputActions(); public static GameObject? HudPrefab; public static GameObject? HudInstance; public static HUDManager? HudManager; public static HUDElement? HudElement; public static AudioMixer? TuneMixer; public static StationaryScript? Stationary; public static PortableScript? Portable; public static TuneAudioScript? Tune; public static PlayerControllerB Player => GameNetworkManager.Instance.localPlayerController; public static void AddLog(string str) { ManualLogSource? obj = logger; if (obj != null) { obj.LogInfo((object)str); } } private void Awake() { if ((Object)(object)Instance != (Object)null) { throw new Exception("More than 1 plugin instance."); } Instance = this; logger = ((BaseUnityPlugin)this).Logger; config = ((BaseUnityPlugin)this).Config; InstrumentsConfig.Load(); AddLog("Plugin com.bean.Instruments4Music is loaded!"); Type[] types = Assembly.GetExecutingAssembly().GetTypes(); Type[] array = types; foreach (Type type in array) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); MethodInfo[] array2 = methods; foreach (MethodInfo methodInfo in array2) { object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false); if (customAttributes.Length != 0) { methodInfo.Invoke(null, null); } } } Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), "com.bean.Instruments4Music"); string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location); if (directoryName != null) { string text = Path.Combine(directoryName, "instrumentassets"); AssetBundle val = AssetBundle.LoadFromFile(text); HudPrefab = val.LoadAsset<GameObject>("MusicPanel"); TuneMixer = val.LoadAsset<AudioMixer>("Tuner"); } } } [HarmonyPatch(typeof(StartOfRound))] internal class StartOfRoundPatch { [HarmonyPostfix] [HarmonyPatch("Awake")] private static void StartPatch(StartOfRound __instance) { ManualCameraRenderer mapScreen = __instance.mapScreen; object obj; if (mapScreen == null) { obj = null; } else { MeshRenderer mesh = mapScreen.mesh; obj = ((mesh != null) ? ((Component)mesh).gameObject : null); } GameObject val = (GameObject)obj; if (!((Object)(object)val == (Object)null)) { if ((Object)(object)val.GetComponent<StationaryScript>() == (Object)null) { Instruments4MusicPlugin.Stationary = ((Component)__instance).gameObject.AddComponent<StationaryScript>(); Instruments4MusicPlugin.AddLog($"StationaryScript Added, owner: {((NetworkBehaviour)Instruments4MusicPlugin.Stationary).OwnerClientId}"); } if ((Object)(object)val.GetComponent<PortableScript>() == (Object)null) { Instruments4MusicPlugin.Portable = ((Component)__instance).gameObject.AddComponent<PortableScript>(); Instruments4MusicPlugin.AddLog($"PortableScript Added, owner: {((NetworkBehaviour)Instruments4MusicPlugin.Portable).OwnerClientId}"); } if ((Object)(object)val.GetComponent<TuneAudioScript>() == (Object)null) { Instruments4MusicPlugin.Tune = ((Component)__instance).gameObject.AddComponent<TuneAudioScript>(); Instruments4MusicPlugin.AddLog($"TuneAudioScript Added, owner: {((NetworkBehaviour)Instruments4MusicPlugin.Tune).OwnerClientId}"); } if ((Object)(object)val.GetComponent<MusicHud>() == (Object)null) { val.AddComponent<MusicHud>(); Instruments4MusicPlugin.AddLog("MusicHUD Added"); } } } } [HarmonyPatch(typeof(HUDManager))] public class HudPatches { [HarmonyPostfix] [HarmonyPatch("Awake")] private static void Awake_Postfix(HUDManager __instance) { //IL_005d: 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) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown Instruments4MusicPlugin.HudManager = __instance; HUDElement[] privateField = __instance.GetPrivateField<HUDElement[]>("HUDElements"); GameObject val = (Instruments4MusicPlugin.HudInstance = Object.Instantiate<GameObject>(Instruments4MusicPlugin.HudPrefab, ((Component)privateField[0].canvasGroup).transform.parent)); if ((Object)(object)val == (Object)null) { return; } Transform transform = val.transform; Vector3 val2 = new Vector3(1f, 1f, 1f); ConfigEntry<float>? configHudScale = InstrumentsConfig.ConfigHudScale; float num; if (configHudScale != null) { _ = configHudScale.Value; if (true) { num = InstrumentsConfig.ConfigHudScale.Value; goto IL_0088; } } num = 1f; goto IL_0088; IL_0088: transform.localScale = val2 * num; Instruments4MusicPlugin.AddLog("MusicHUD Instantiated"); HUDElement val3 = (Instruments4MusicPlugin.HudElement = new HUDElement()); CanvasGroup canvasGroup = val.GetComponent<CanvasGroup>() ?? val.AddComponent<CanvasGroup>(); val3.canvasGroup = canvasGroup; __instance.PingHUDElement(val3, 0f, 0f, 0f); HUDElement[] array = privateField; List<HUDElement> list = new List<HUDElement>(1 + array.Length); HUDElement[] array2 = array; foreach (HUDElement item in array2) { list.Add(item); } list.Add(val3); List<HUDElement> list2 = list; List<HUDElement> list3 = list2; int num2 = 0; HUDElement[] array3 = (HUDElement[])(object)new HUDElement[list3.Count]; foreach (HUDElement item2 in list3) { array3[num2] = item2; num2++; } privateField = array3; ((object)__instance).GetType().GetField("HUDElements", BindingFlags.Instance | BindingFlags.NonPublic)?.SetValue(__instance, privateField); } } public class InstrumentsConfig { internal static ConfigEntry<float>? ConfigHudScale; internal static ConfigEntry<float>? ConfigHudTransparency; internal static ConfigEntry<float>? TuneLastTime; internal static ConfigEntry<float>? VolumeAttenuationCoeff; internal static ConfigEntry<float>? SoftTuneModifier; internal static ConfigEntry<float>? SustainTuneModifier; internal static ConfigEntry<int>? AlarmHornBasePitch; internal static ConfigEntry<bool>? AlarmHornLoop; internal static ConfigEntry<int>? NoisyPropPitch; internal static ConfigEntry<bool>? NoisyPropLoop; internal static ConfigEntry<int>? StationaryPitch; internal static ConfigEntry<bool>? StationaryLoop; internal static ConfigEntry<int>? StationaryAudio; internal static ConfigEntry<int>? PotablePitch; internal static ConfigEntry<bool>? PotableLoop; internal static ConfigEntry<int>? PotableAudio; public static void Load() { ConfigFile? config = Instruments4MusicPlugin.config; ConfigHudScale = ((config != null) ? config.Bind<float>("HUDConfig", "HUDScale", 0.45f, "Scale the music HUD.") : null); ConfigFile? config2 = Instruments4MusicPlugin.config; ConfigHudTransparency = ((config2 != null) ? config2.Bind<float>("HUDConfig", "HUDTransparency", 1f, "Transparency of the music HUD.") : null); ConfigFile? config3 = Instruments4MusicPlugin.config; TuneLastTime = ((config3 != null) ? config3.Bind<float>("TuneModifiers", "TuneLastTime", 3f, "The audio will stop playing at TuneLastTime.(unit: seconds)") : null); ConfigFile? config4 = Instruments4MusicPlugin.config; VolumeAttenuationCoeff = ((config4 != null) ? config4.Bind<float>("TuneModifiers", "VolumeAttenuationCoeff", 2f, "Volume = exp(-alpha * t), alpha is this coefficient, t is time.") : null); ConfigFile? config5 = Instruments4MusicPlugin.config; SoftTuneModifier = ((config5 != null) ? config5.Bind<float>("TuneModifiers", "SoftTuneModifier", 0.5f, "When you hit the soft pedal. Volume = Volume * SoftModifier") : null); ConfigFile? config6 = Instruments4MusicPlugin.config; SustainTuneModifier = ((config6 != null) ? config6.Bind<float>("TuneModifiers", "SustainTuneModifier", 4f, "When you hit the sustain pedal. TuneLastTime = TuneLastTime * SustainModifier, and the Volume also attenuate slower.") : null); ConfigFile? config7 = Instruments4MusicPlugin.config; AlarmHornBasePitch = ((config7 != null) ? config7.Bind<int>("AlarmHornConfig", "AlarmHornBasePitch", 8, "The default audio \"ShipAlarmHornConstant.ogg\" is approximately C1#\n[0, 35] refers to [Low C, High B]") : null); ConfigFile? config8 = Instruments4MusicPlugin.config; AlarmHornLoop = ((config8 != null) ? config8.Bind<bool>("AlarmHornConfig", "AlarmHornLoop", true, "Playback the audio repeatedly until you stop pressing.") : null); ConfigFile? config9 = Instruments4MusicPlugin.config; NoisyPropPitch = ((config9 != null) ? config9.Bind<int>("NoisyPropDefault", "NoisyPropPitch", 12, "For activable props like Air Horn or Clown Horn.\n12 means Mid C.\n[0, 35] refers to [Low C, High B]") : null); ConfigFile? config10 = Instruments4MusicPlugin.config; NoisyPropLoop = ((config10 != null) ? config10.Bind<bool>("NoisyPropDefault", "NoisyPropLoop", false, "For activable props like Air Horn or Clown Horn.\nPlayback the audio repeatedly until you stop pressing.") : null); ConfigFile? config11 = Instruments4MusicPlugin.config; StationaryPitch = ((config11 != null) ? config11.Bind<int>("StationaryDefault", "StationaryPitch", 12, "12 means Mid C.\n[0, 35] refers to [Low C, High B]") : null); ConfigFile? config12 = Instruments4MusicPlugin.config; StationaryLoop = ((config12 != null) ? config12.Bind<bool>("StationaryDefault", "StationaryLoop", false, "Playback the audio repeatedly until you stop pressing.") : null); ConfigFile? config13 = Instruments4MusicPlugin.config; StationaryAudio = ((config13 != null) ? config13.Bind<int>("StationaryDefault", "StationaryAudio", 0, "I'm not quite sure what these audio means, but anyway it's configurable.\n0-thisAudioSourceClip, 1-playWhileTrue, 2-boolTrueAudios, 3-boolFalseAudios, 4-secondaryAudios.") : null); ConfigFile? config14 = Instruments4MusicPlugin.config; PotablePitch = ((config14 != null) ? config14.Bind<int>("PotableDefault", "PotablePitch", 12, "12 means Mid C.\n[0, 35] refers to [Low C, High B]") : null); ConfigFile? config15 = Instruments4MusicPlugin.config; PotableLoop = ((config15 != null) ? config15.Bind<bool>("PotableDefault", "PotableLoop", false, "Playback the audio repeatedly until you stop pressing.") : null); ConfigFile? config16 = Instruments4MusicPlugin.config; PotableAudio = ((config16 != null) ? config16.Bind<int>("PotableDefault", "PotableAudio", 0, "I think I know what these audio means literally.\n0-dropSFX, 1-grabSFX, 2-pocketSFX, 3-throwSFX.") : null); Instruments4MusicPlugin.AddLog("All configs loaded!"); } } public class MusicHud : MonoBehaviour { public static MusicHud? Instance; private readonly List<Image> _frameRectangles = new List<Image>(); private readonly List<Image> _textRectangles = new List<Image>(); private static readonly List<Text> ButtonTips = new List<Text>(); private static readonly List<Image> MenuRectangles = new List<Image>(); private static readonly List<Text> MenuTips = new List<Text>(); private InputField inputField; public bool IsInputing = false; public Dictionary<int, IEnumerator> CurrentCoroutines = new Dictionary<int, IEnumerator>(); private readonly Dictionary<int, bool> _rotateFinished = new Dictionary<int, bool>(); private void Awake() { if ((Object)(object)Instance != (Object)null) { throw new Exception("More than one instance of UI!"); } Instance = this; } private void Start() { //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Expected O, but got Unknown //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Expected O, but got Unknown //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01df: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_026a: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Expected O, but got Unknown //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_0301: Unknown result type (might be due to invalid IL or missing references) //IL_0318: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Unknown result type (might be due to invalid IL or missing references) //IL_0346: Unknown result type (might be due to invalid IL or missing references) //IL_0386: Unknown result type (might be due to invalid IL or missing references) //IL_038d: Expected O, but got Unknown //IL_03bc: Unknown result type (might be due to invalid IL or missing references) //IL_03c1: Unknown result type (might be due to invalid IL or missing references) //IL_03e1: Unknown result type (might be due to invalid IL or missing references) //IL_03f8: Unknown result type (might be due to invalid IL or missing references) //IL_040f: Unknown result type (might be due to invalid IL or missing references) //IL_0426: Unknown result type (might be due to invalid IL or missing references) //IL_0440: Unknown result type (might be due to invalid IL or missing references) //IL_0445: Unknown result type (might be due to invalid IL or missing references) //IL_0456: Unknown result type (might be due to invalid IL or missing references) //IL_045b: Unknown result type (might be due to invalid IL or missing references) //IL_0465: Unknown result type (might be due to invalid IL or missing references) //IL_0482: Unknown result type (might be due to invalid IL or missing references) //IL_0489: Expected O, but got Unknown //IL_04b0: Unknown result type (might be due to invalid IL or missing references) //IL_04b5: Unknown result type (might be due to invalid IL or missing references) //IL_04e5: Unknown result type (might be due to invalid IL or missing references) //IL_0520: Unknown result type (might be due to invalid IL or missing references) //IL_0537: Unknown result type (might be due to invalid IL or missing references) //IL_054e: Unknown result type (might be due to invalid IL or missing references) //IL_0565: Unknown result type (might be due to invalid IL or missing references) //IL_0597: Unknown result type (might be due to invalid IL or missing references) //IL_059e: Expected O, but got Unknown //IL_05d3: Unknown result type (might be due to invalid IL or missing references) //IL_05d8: Unknown result type (might be due to invalid IL or missing references) //IL_05f8: Unknown result type (might be due to invalid IL or missing references) //IL_060f: Unknown result type (might be due to invalid IL or missing references) //IL_0626: Unknown result type (might be due to invalid IL or missing references) //IL_063d: Unknown result type (might be due to invalid IL or missing references) //IL_0656: Unknown result type (might be due to invalid IL or missing references) //IL_065b: Unknown result type (might be due to invalid IL or missing references) //IL_0665: Unknown result type (might be due to invalid IL or missing references) //IL_0682: Unknown result type (might be due to invalid IL or missing references) //IL_0689: Expected O, but got Unknown //IL_06ba: Unknown result type (might be due to invalid IL or missing references) //IL_06ec: Unknown result type (might be due to invalid IL or missing references) //IL_0703: Unknown result type (might be due to invalid IL or missing references) //IL_071a: Unknown result type (might be due to invalid IL or missing references) //IL_0731: Unknown result type (might be due to invalid IL or missing references) float num = ((InstrumentsConfig.ConfigHudTransparency == null) ? 1f : InstrumentsConfig.ConfigHudTransparency.Value); GameObject hudInstance = Instruments4MusicPlugin.HudInstance; Button[] componentsInChildren = hudInstance.GetComponentsInChildren<Button>(); Image[] itemSlotIconFrames = Instruments4MusicPlugin.HudManager.itemSlotIconFrames; Instruments4MusicPlugin.AddLog("Draw MusicHUD"); _frameRectangles.Clear(); _textRectangles.Clear(); ButtonTips.Clear(); MenuRectangles.Clear(); MenuTips.Clear(); Button[] array = componentsInChildren; Rect rect; foreach (Button val in array) { RectTransform component = ((Component)val).GetComponent<RectTransform>(); int num2 = Random.Range(0, itemSlotIconFrames.Length); Image val2 = itemSlotIconFrames[num2]; GameObject val3 = new GameObject("FrameRectangle"); val3.transform.SetParent(((Component)val).transform, false); Image val4 = val3.AddComponent<Image>(); ((Graphic)val4).color = Color32.op_Implicit(new Color32((byte)254, (byte)73, (byte)0, (byte)Math.Round(num * 255f))); val4.sprite = val2.sprite; RectTransform component2 = val3.GetComponent<RectTransform>(); component2.anchorMin = new Vector2(0f, 0f); component2.anchorMax = new Vector2(1f, 1f); component2.sizeDelta = new Vector2(0f, 0f); component2.anchoredPosition = new Vector2(0f, 0f); _frameRectangles.Add(val4); GameObject val5 = new GameObject("TextRectangle"); val5.transform.SetParent(((Component)val).transform, false); Image val6 = val5.AddComponent<Image>(); ((Graphic)val6).color = Color32.op_Implicit(new Color32((byte)254, (byte)73, (byte)0, (byte)Math.Round(num * 255f))); RectTransform component3 = val5.GetComponent<RectTransform>(); component3.anchorMin = new Vector2(0.3f, 0.3f); component3.anchorMax = new Vector2(0.7f, 0.7f); component3.offsetMin = new Vector2(0f, 0f); component3.offsetMax = new Vector2(0f, 0f); rect = component.rect; component3.anchoredPosition = new Vector2(0f, -0.5f * ((Rect)(ref rect)).height); _textRectangles.Add(val6); GameObject val7 = new GameObject("ButtonTip"); val7.transform.SetParent(val5.transform, false); Text val8 = val7.AddComponent<Text>(); rect = component3.rect; val8.fontSize = (int)(0.8f * ((Rect)(ref rect)).height); val8.text = "A"; ((Graphic)val8).color = Color.white; val8.font = Resources.GetBuiltinResource<Font>("Arial.ttf"); val8.alignment = (TextAnchor)4; val8.fontStyle = (FontStyle)1; RectTransform component4 = val7.GetComponent<RectTransform>(); component4.anchorMin = new Vector2(0f, 0f); component4.anchorMax = new Vector2(1f, 1f); component4.sizeDelta = new Vector2(0f, 0f); component4.anchoredPosition = new Vector2(0f, 0f); ButtonTips.Add(val8); } RectTransform component5 = hudInstance.GetComponent<RectTransform>(); for (int j = 0; j < 5; j++) { GameObject val9 = new GameObject("MenuRectangle"); val9.transform.SetParent(hudInstance.transform, false); Image val10 = val9.AddComponent<Image>(); ((Graphic)val10).color = Color32.op_Implicit(new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, (byte)0)); RectTransform component6 = val9.GetComponent<RectTransform>(); component6.anchorMin = new Vector2(0.41f, 0.46f); component6.anchorMax = new Vector2(0.59f, 0.54f); component6.offsetMin = new Vector2(0f, 0f); component6.offsetMax = new Vector2(0f, 0f); float num3 = (float)(j - 2) * 0.2f; rect = component5.rect; float num4 = num3 * ((Rect)(ref rect)).width; rect = component5.rect; component6.anchoredPosition = new Vector2(num4, -0.4f * ((Rect)(ref rect)).height); MenuRectangles.Add(val10); GameObject val11 = new GameObject("MenuTip"); val11.transform.SetParent(val9.transform, false); Text val12 = val11.AddComponent<Text>(); rect = component5.rect; val12.fontSize = (int)(0.04f * ((Rect)(ref rect)).height); val12.text = "Text"; ((Graphic)val12).color = new Color(1f, 1f, 1f, num); val12.font = Resources.GetBuiltinResource<Font>("Arial.ttf"); val12.alignment = (TextAnchor)4; RectTransform component7 = val11.GetComponent<RectTransform>(); component7.anchorMin = new Vector2(0f, 0f); component7.anchorMax = new Vector2(1f, 1f); component7.sizeDelta = new Vector2(0f, 0f); component7.anchoredPosition = new Vector2(0f, 0f); MenuTips.Add(val12); } GameObject val13 = new GameObject("InputField"); val13.transform.SetParent(hudInstance.transform, false); Image val14 = val13.AddComponent<Image>(); ((Graphic)val14).color = Color32.op_Implicit(new Color32((byte)254, (byte)73, (byte)0, (byte)Math.Round(num * 255f))); RectTransform component8 = val13.GetComponent<RectTransform>(); component8.anchorMin = new Vector2(0.2f, 0.46f); component8.anchorMax = new Vector2(0.8f, 0.54f); component8.offsetMin = new Vector2(0f, 0f); component8.offsetMax = new Vector2(0f, 0f); rect = component5.rect; component8.anchoredPosition = new Vector2(0f, 0.4f * ((Rect)(ref rect)).height); inputField = val13.AddComponent<InputField>(); GameObject val15 = new GameObject("InputText"); val15.transform.SetParent(val13.transform, false); Text val16 = val15.AddComponent<Text>(); inputField.text = "Press Enter to input music note..."; ((Graphic)val16).color = Color.white; val16.font = Resources.GetBuiltinResource<Font>("Arial.ttf"); RectTransform component9 = val15.GetComponent<RectTransform>(); component9.anchorMin = new Vector2(0f, 0f); component9.anchorMax = new Vector2(1f, 1f); component9.offsetMin = new Vector2(10f, 10f); component9.offsetMax = new Vector2(-10f, -10f); inputField.textComponent = val16; Instruments4MusicPlugin.AddLog("Draw MusicHUD success"); } public static void ShowUserInterface() { float value = InstrumentsConfig.ConfigHudTransparency.Value; UpdateButtonTips(); MenuTips[0].text = "Quit: " + InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.CurtainCall); MenuTips[1].text = "Soft: " + InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.Soft); MenuTips[2].text = "Semi: " + InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.Semitone); MenuTips[3].text = "Sustain: " + InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.Sustain); MenuTips[4].text = "Switch: " + InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.ChangeMode); HUDManager? hudManager = Instruments4MusicPlugin.HudManager; if (hudManager != null) { hudManager.PingHUDElement(Instruments4MusicPlugin.HudElement, 0f, 0f, value); } } public static void UpdateButtonTips() { Instruments4MusicPlugin.AddLog("Load key binds"); string[] array = (TuneAudioScript.SecondaryKeyBind ? new string[21] { InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowCKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowDKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowEKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowFKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowGKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowAKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowBKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidCKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidDKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidEKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidFKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidGKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidAKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidBKey2), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.HighCKey2), "", "", "", "", "", "" } : new string[21] { InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowCKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowDKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowEKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowFKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowGKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowAKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.LowBKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidCKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidDKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidEKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidFKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidGKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidAKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.MidBKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.HighCKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.HighDKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.HighEKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.HighFKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.HighGKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.HighAKey), InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.HighBKey) }); for (int i = 0; i < array.Length; i++) { ButtonTips[i].text = array[i]; } Instruments4MusicPlugin.AddLog("Load key binds success"); } public static void HideUserInterface() { HUDManager? hudManager = Instruments4MusicPlugin.HudManager; if (hudManager != null) { hudManager.PingHUDElement(Instruments4MusicPlugin.HudElement, 0f, 1f, 0f); } } private IEnumerator RotateOverTime(int noteNumber, RectTransform rectTransform) { Image textImage = _textRectangles[noteNumber]; Color textImageColor = ((Graphic)textImage).color; textImageColor.a = 1f; ((Graphic)textImage).color = textImageColor; Quaternion rotation; while (true) { rotation = ((Transform)rectTransform).rotation; if (!(((Quaternion)(ref rotation)).eulerAngles.y < 180f)) { break; } float step = 360f * Time.deltaTime; rotation = ((Transform)rectTransform).rotation; float newAngle = Mathf.Min(((Quaternion)(ref rotation)).eulerAngles.y + step, 180f); ((Transform)rectTransform).rotation = Quaternion.Euler(((Transform)rectTransform).eulerAngles.x, newAngle, ((Transform)rectTransform).eulerAngles.z); yield return null; } textImageColor.a = 0.5f; ((Graphic)textImage).color = textImageColor; _rotateFinished[noteNumber] = true; while (true) { rotation = ((Transform)rectTransform).rotation; if (((Quaternion)(ref rotation)).eulerAngles.y > 0f) { float step2 = 360f * Time.deltaTime; rotation = ((Transform)rectTransform).rotation; float newAngle2 = Mathf.Max(((Quaternion)(ref rotation)).eulerAngles.y - step2, 0f); ((Transform)rectTransform).rotation = Quaternion.Euler(((Transform)rectTransform).eulerAngles.x, newAngle2, ((Transform)rectTransform).eulerAngles.z); yield return null; continue; } break; } } public void OnButtonClicked(int num) { int num2 = NoteNumberConvert(num); if (!_rotateFinished.ContainsKey(num2) || _rotateFinished[num2]) { if (CurrentCoroutines.TryGetValue(num2, out IEnumerator value)) { ((MonoBehaviour)this).StopCoroutine(value); } _rotateFinished[num2] = false; CurrentCoroutines[num2] = RotateOverTime(num2, ((Graphic)_frameRectangles[num2]).rectTransform); ((MonoBehaviour)this).StartCoroutine(CurrentCoroutines[num2]); } } public void OnMenuClicked(int num, bool isHolding) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: 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_0042: Unknown result type (might be due to invalid IL or missing references) float num2 = (isHolding ? 1f : 0f); Color32 val = Color32.op_Implicit(((Graphic)MenuRectangles[num]).color); val.a = (byte)(num2 * 255f); ((Graphic)MenuRectangles[num]).color = Color32.op_Implicit(val); } private static int NoteNumberConvert(int num) { int[] array = new int[12] { 0, 0, 1, 1, 2, 3, 3, 4, 4, 5, 5, 6 }; return num / 12 * 7 + array[num % 12]; } public void TriggerInputNote() { if (IsInputing) { inputField.DeactivateInputField(); IsInputing = false; Instruments4MusicPlugin.AddLog("Input stop, get note: " + inputField.text + "."); TuneAudioScript.InitAutoPlay(inputField.text); } else { Instruments4MusicPlugin.AddLog("Input start."); inputField.ActivateInputField(); IsInputing = true; } } } public static class MyPluginInfo { public const string PLUGIN_GUID = "com.bean.Instruments4Music"; public const string PLUGIN_NAME = "Instruments4Music"; public const string PLUGIN_VERSION = "2.1.0"; } public class PortableScript : NetworkBehaviour { private const int InteractableObjectsMask = 512; private static PlayerControllerB? Player => GameNetworkManager.Instance?.localPlayerController; public static bool IsHoldingInstrument(out GameObject? instrumentObj) { if ((Object)(object)Player != (Object)null) { PlayerControllerB player = Player; if (((player != null && ((NetworkBehaviour)player).IsOwner && player.isPlayerControlled && (!((NetworkBehaviour)Player).IsServer || Player.isHostPlayerObject)) || Player.isTestingPlayer) && Player.isHoldingObject && !((Object)(object)Player.currentlyHeldObjectServer == (Object)null) && !Player.quickMenuManager.isMenuOpen && !Player.isPlayerDead) { if (!Player.currentlyHeldObjectServer.itemProperties.usableInSpecialAnimations) { player = Player; if (player == null || player.isGrabbingObjectAnimation || player.inTerminalMenu || player.isTypingChat || (Player.inSpecialInteractAnimation && !Player.inShockingMinigame)) { goto IL_00f1; } } PlayerControllerB? player2 = Player; object obj; if (player2 == null) { obj = null; } else { GrabbableObject currentlyHeldObjectServer = player2.currentlyHeldObjectServer; obj = ((currentlyHeldObjectServer != null) ? ((Component)currentlyHeldObjectServer).gameObject : null); } instrumentObj = (GameObject?)obj; return (Object)(object)instrumentObj != (Object)null; } } goto IL_00f1; IL_00f1: instrumentObj = null; return false; } [ServerRpc(RequireOwnership = false)] public void LetShowBeginsServerRpc(ulong playerId, ulong objectId) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1403104735u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, objectId); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1403104735u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { Instruments4MusicPlugin.AddLog($"LetShowBeginsServerRpc, owner: {((NetworkBehaviour)this).OwnerClientId}"); LetShowBeginsClientRpc(playerId, objectId); } } } [ClientRpc] public void LetShowBeginsClientRpc(ulong playerId, ulong objectId) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(758432294u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, objectId); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 758432294u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(objectId, out var value); GameObject gameObject = ((Component)value).gameObject; NoisemakerProp component = gameObject.GetComponent<NoisemakerProp>(); if ((Object)(object)component != (Object)null && InstrumentsConfig.NoisyPropPitch != null && InstrumentsConfig.NoisyPropLoop != null) { Instruments4MusicPlugin.AddLog("Playing " + ((Object)component).name); AudioClip val3 = null; if ((Object)(object)component.noiseAudio.clip != (Object)null) { val3 = component.noiseAudio.clip; } else if (component.noiseSFX.Length != 0) { val3 = component.noiseSFX[0]; } if ((Object)(object)val3 != (Object)null) { TuneAudioScript.RegisterInstrClip(playerId, gameObject, InstrumentsConfig.NoisyPropPitch.Value, val3, InstrumentsConfig.NoisyPropLoop.Value); return; } } if (InstrumentsConfig.PotablePitch == null || InstrumentsConfig.PotableLoop == null) { return; } WhoopieCushionItem component2 = gameObject.GetComponent<WhoopieCushionItem>(); if ((Object)(object)component2 != (Object)null) { Instruments4MusicPlugin.AddLog("Playing " + ((Object)component2).name); TuneAudioScript.RegisterInstrClip(playerId, gameObject, InstrumentsConfig.PotablePitch.Value, component2.fartAudios[Random.Range(0, component2.fartAudios.Length)], InstrumentsConfig.PotableLoop.Value); return; } GrabbableObject component3 = gameObject.GetComponent<GrabbableObject>(); if (!((Object)(object)component3 != (Object)null)) { return; } Instruments4MusicPlugin.AddLog("Playing " + ((Object)component3).name); AudioClip val4 = null; if (InstrumentsConfig.PotableAudio != null) { if (InstrumentsConfig.PotableAudio.Value == 0) { val4 = component3.itemProperties.dropSFX; } else if (InstrumentsConfig.PotableAudio.Value == 1) { val4 = component3.itemProperties.grabSFX; } else if (InstrumentsConfig.PotableAudio.Value == 2) { val4 = component3.itemProperties.pocketSFX; } else if (InstrumentsConfig.PotableAudio.Value == 3) { val4 = component3.itemProperties.throwSFX; } } if ((Object)(object)val4 != (Object)null) { TuneAudioScript.RegisterInstrClip(playerId, gameObject, InstrumentsConfig.PotablePitch.Value, val4, InstrumentsConfig.PotableLoop.Value); return; } if ((Object)(object)component3.itemProperties.dropSFX != (Object)null) { val4 = component3.itemProperties.dropSFX; } else if ((Object)(object)component3.itemProperties.grabSFX != (Object)null) { val4 = component3.itemProperties.grabSFX; } else if ((Object)(object)component3.itemProperties.pocketSFX != (Object)null) { val4 = component3.itemProperties.pocketSFX; } else if ((Object)(object)component3.itemProperties.throwSFX != (Object)null) { val4 = component3.itemProperties.throwSFX; } if ((Object)(object)val4 != (Object)null) { TuneAudioScript.RegisterInstrClip(playerId, gameObject, InstrumentsConfig.PotablePitch.Value, val4, InstrumentsConfig.PotableLoop.Value); } } public void Update() { if (!((Object)(object)Player == (Object)null) && !TuneAudioScript.TheShowIsOn && IsHoldingInstrument(out GameObject instrumentObj) && Instruments4MusicPlugin.InputActionsInstance.Showtime != null) { GrabbableObject val = ((instrumentObj != null) ? instrumentObj.GetComponent<GrabbableObject>() : null); if (!((Object)(object)val == (Object)null)) { string text = "Showtime!: [" + InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.Showtime) + "] (Hold)"; HUDManager.Instance.ChangeControlTipMultiple(CollectionExtensions.AddToArray<string>(val.itemProperties.toolTips, text), true, val.itemProperties); } } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_PortableScript() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(1403104735u, new RpcReceiveHandler(__rpc_handler_1403104735)); NetworkManager.__rpc_func_table.Add(758432294u, new RpcReceiveHandler(__rpc_handler_758432294)); } private static void __rpc_handler_1403104735(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong playerId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); ulong objectId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref objectId); target.__rpc_exec_stage = (__RpcExecStage)1; ((PortableScript)(object)target).LetShowBeginsServerRpc(playerId, objectId); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_758432294(NetworkBehaviour? target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong playerId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); ulong objectId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref objectId); target.__rpc_exec_stage = (__RpcExecStage)2; ((PortableScript)(object)target).LetShowBeginsClientRpc(playerId, objectId); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string? __getTypeName() { return "PortableScript"; } } internal static class ReflectionUtils { public static T GetPrivateField<T>(this object obj, string field) { return (T)obj.GetType().GetField(field, BindingFlags.Instance | BindingFlags.NonPublic).GetValue(obj); } } public class StationaryScript : NetworkBehaviour { private const int InteractableObjectsMask = 512; private static PlayerControllerB? Player => GameNetworkManager.Instance?.localPlayerController; public static bool IsLookingAtInstrument(out GameObject? instrumentObj) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)Player == (Object)null) { instrumentObj = null; return false; } Ray val = default(Ray); ((Ray)(ref val))..ctor(((Component)Player.gameplayCamera).transform.position, ((Component)Player.gameplayCamera).transform.forward); if (Player.isTypingChat) { instrumentObj = null; return false; } RaycastHit val2 = default(RaycastHit); if (!Physics.Raycast(val, ref val2, Player.grabDistance, 512, (QueryTriggerInteraction)1) && !Physics.Raycast(((Component)Player.gameplayCamera).transform.position + Vector3.up * 5f, Vector3.down, ref val2, 5f, 512, (QueryTriggerInteraction)1)) { instrumentObj = null; return false; } instrumentObj = ((Component)((RaycastHit)(ref val2)).collider).gameObject; if ((Object)(object)instrumentObj == (Object)null) { instrumentObj = null; return false; } ShipAlarmCord component = instrumentObj.GetComponent<ShipAlarmCord>(); if ((Object)(object)component != (Object)null) { return true; } ItemCharger component2 = instrumentObj.GetComponent<ItemCharger>(); if ((Object)(object)component2 != (Object)null) { return true; } AnimatedObjectTrigger component3 = instrumentObj.GetComponent<AnimatedObjectTrigger>(); if ((Object)(object)component3 != (Object)null) { return true; } return false; } [ServerRpc(RequireOwnership = false)] public void LetShowBeginsServerRpc(ulong playerId, ulong objectId) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(356583999u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, objectId); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 356583999u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { Instruments4MusicPlugin.AddLog($"LetShowBeginsServerRpc, owner: {((NetworkBehaviour)this).OwnerClientId}"); LetShowBeginsClientRpc(playerId, objectId); } } } [ServerRpc(RequireOwnership = false)] public void LetShowBeginsServerRpc(ulong playerId, ulong objId, string path) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2002104037u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, objId); bool flag = path != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(path, false); } ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2002104037u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { Instruments4MusicPlugin.AddLog($"LetShowBeginsServerRpc, owner: {((NetworkBehaviour)this).OwnerClientId}"); LetShowBeginsClientRpc(playerId, objId, path); } } [ClientRpc] public void LetShowBeginsClientRpc(ulong playerId, ulong objId, string path) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(119991791u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, objId); bool flag = path != null; ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives)); if (flag) { ((FastBufferWriter)(ref val2)).WriteValueSafe(path, false); } ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 119991791u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { GameObject val3 = TuneAudioScript.FindGameObjectFromPath(objId, path); if ((Object)(object)val3 == (Object)null) { Instruments4MusicPlugin.AddLog("Cannot find instrumentObj."); } else { LetShowBegins(playerId, val3); } } } [ClientRpc] public void LetShowBeginsClientRpc(ulong playerId, ulong objectId) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3302296507u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, objectId); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3302296507u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost)) { NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(objectId, out var value); if ((Object)(object)value == (Object)null) { Instruments4MusicPlugin.AddLog("Cannot find instrumentObj."); return; } GameObject gameObject = ((Component)value).gameObject; LetShowBegins(playerId, gameObject); } } public void LetShowBegins(ulong playerId, GameObject instrumentObj) { ShipAlarmCord component = instrumentObj.GetComponent<ShipAlarmCord>(); if ((Object)(object)component != (Object)null && InstrumentsConfig.AlarmHornBasePitch != null && InstrumentsConfig.AlarmHornLoop != null) { Instruments4MusicPlugin.AddLog("Playing " + ((Object)component).name); TuneAudioScript.RegisterInstrClip(playerId, instrumentObj, InstrumentsConfig.AlarmHornBasePitch.Value, component.hornClose.clip, InstrumentsConfig.AlarmHornLoop.Value); } else { if (InstrumentsConfig.StationaryPitch == null || InstrumentsConfig.StationaryLoop == null) { return; } ItemCharger component2 = instrumentObj.GetComponent<ItemCharger>(); if ((Object)(object)component2 != (Object)null) { Instruments4MusicPlugin.AddLog("Playing " + ((Object)component2).name); TuneAudioScript.RegisterInstrClip(playerId, instrumentObj, InstrumentsConfig.StationaryPitch.Value, component2.zapAudio.clip, InstrumentsConfig.StationaryLoop.Value); return; } AnimatedObjectTrigger component3 = instrumentObj.GetComponent<AnimatedObjectTrigger>(); if (!((Object)(object)component3 != (Object)null)) { return; } Instruments4MusicPlugin.AddLog("Playing " + ((Object)component3).name); AudioClip val = null; if (InstrumentsConfig.StationaryAudio != null) { if (InstrumentsConfig.StationaryAudio.Value == 0) { val = component3.thisAudioSource.clip; } else if (InstrumentsConfig.StationaryAudio.Value == 1) { val = component3.playWhileTrue; } else if (InstrumentsConfig.StationaryAudio.Value == 2) { val = component3.boolTrueAudios[0]; } else if (InstrumentsConfig.StationaryAudio.Value == 3) { val = component3.boolFalseAudios[0]; } else if (InstrumentsConfig.StationaryAudio.Value == 4) { val = component3.secondaryAudios[0]; } } if ((Object)(object)val != (Object)null) { TuneAudioScript.RegisterInstrClip(playerId, instrumentObj, InstrumentsConfig.StationaryPitch.Value, val, InstrumentsConfig.StationaryLoop.Value); return; } if ((Object)(object)component3.thisAudioSource.clip != (Object)null) { val = component3.thisAudioSource.clip; } else if ((Object)(object)component3.playWhileTrue != (Object)null) { val = component3.playWhileTrue; } else if (component3.boolTrueAudios.Length != 0) { val = component3.boolTrueAudios[0]; } else if (component3.boolFalseAudios.Length != 0) { val = component3.boolFalseAudios[0]; } else if (component3.secondaryAudios.Length != 0) { val = component3.secondaryAudios[0]; } if ((Object)(object)val != (Object)null) { TuneAudioScript.RegisterInstrClip(playerId, instrumentObj, InstrumentsConfig.StationaryPitch.Value, val, InstrumentsConfig.StationaryLoop.Value); } } } public void Update() { if (TuneAudioScript.TheShowIsOn || !IsLookingAtInstrument(out GameObject instrumentObj) || (Object)(object)Player == (Object)null || Instruments4MusicPlugin.InputActionsInstance.Showtime == null) { return; } string text = "Showtime!: [" + InputActions.GetButtonDescription(Instruments4MusicPlugin.InputActionsInstance.Showtime) + "] (Hold)"; InteractTrigger val = ((instrumentObj != null) ? instrumentObj.GetComponent<InteractTrigger>() : null); if (!((Object)(object)val == (Object)null) && !val.hoverTip.EndsWith(text)) { val.hoverTip = val.hoverTip + "\n" + text; Regex regex = new Regex("Showtime!: \\[.*?] \\(Hold\\)$"); if (regex.IsMatch(val.hoverTip)) { val.hoverTip = regex.Replace(val.hoverTip, text); } else { val.hoverTip = val.hoverTip + "\n" + text; } } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } [RuntimeInitializeOnLoadMethod] internal static void InitializeRPCS_StationaryScript() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown NetworkManager.__rpc_func_table.Add(356583999u, new RpcReceiveHandler(__rpc_handler_356583999)); NetworkManager.__rpc_func_table.Add(2002104037u, new RpcReceiveHandler(__rpc_handler_2002104037)); NetworkManager.__rpc_func_table.Add(119991791u, new RpcReceiveHandler(__rpc_handler_119991791)); NetworkManager.__rpc_func_table.Add(3302296507u, new RpcReceiveHandler(__rpc_handler_3302296507)); } private static void __rpc_handler_356583999(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong playerId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); ulong objectId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref objectId); target.__rpc_exec_stage = (__RpcExecStage)1; ((StationaryScript)(object)target).LetShowBeginsServerRpc(playerId, objectId); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2002104037(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong playerId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); ulong objId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref objId); bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); string path = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref path, false); } target.__rpc_exec_stage = (__RpcExecStage)1; ((StationaryScript)(object)target).LetShowBeginsServerRpc(playerId, objId, path); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_119991791(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong playerId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); ulong objId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref objId); bool flag = default(bool); ((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives)); string path = null; if (flag) { ((FastBufferReader)(ref reader)).ReadValueSafe(ref path, false); } target.__rpc_exec_stage = (__RpcExecStage)2; ((StationaryScript)(object)target).LetShowBeginsClientRpc(playerId, objId, path); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_3302296507(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong playerId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref playerId); ulong objectId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref objectId); target.__rpc_exec_stage = (__RpcExecStage)2; ((StationaryScript)(object)target).LetShowBeginsClientRpc(playerId, objectId); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "StationaryScript"; } } public class TuneAudioScript : NetworkBehaviour { private float timer = 0f; public float interval = 1f; private const double TuneCoeff = 1.0594631433486938; private static readonly float LastTimer; public static readonly float AttenuationCoeff; public static readonly float SoftModifier; private static readonly float SustainModifier; private static Dictionary<ulong, AudioClip> _instrClips; private static Dictionary<ulong, int> _sourceNoteNumber; private static Dictionary<ulong, bool> _loopAudio; private static Dictionary<ulong, Dictionary<int, AudioSource>> _tunedPlayerDictionary; private static Dictionary<ulong, ConcurrentDictionary<int, float>> _timerPlayerDictionary; private static readonly List<List<(int, bool, int)>> TuneList; private static readonly List<List<(int, bool, int)>> KeepTuneList; public static bool SecondaryTuneMethod; public static bool TheShowIsOn; public static bool SecondaryKeyBind; public static bool KeyBindInit; public static Dictionary<ulong, bool> IsSustaining; public static bool IsAutoPlayOn; public static float AutoPlaySpeed; public static float AutoPlayCount; public static Dictionary<ulong, GameObject> ActiveInstrObjects; private static PlayerControllerB? Player => GameNetworkManager.Instance?.localPlayerController; public static void RegisterInstrClip(ulong playerId, GameObject gameObject, int originNoteNumber, AudioClip clip, bool isLoop) { foreach (ConcurrentDictionary<int, float> value in _timerPlayerDictionary.Values) { value.Clear(); } _timerPlayerDictionary.Clear(); foreach (Dictionary<int, AudioSource> value2 in _tunedPlayerDictionary.Values) { foreach (AudioSource value3 in value2.Values) { if ((Object)(object)value3 != (Object)null) { value3.outputAudioMixerGroup = null; Object.Destroy((Object)(object)value3); } } value2.Clear(); } _tunedPlayerDictionary.Clear(); Instruments4MusicPlugin.AddLog("TunedDictionary cleared."); _instrClips[playerId] = clip; _sourceNoteNumber[playerId] = originNoteNumber; _loopAudio[playerId] = isLoop; ActiveInstrObjects[playerId] = gameObject; Instruments4MusicPlugin.AddLog("Playing " + ((Object)clip).name + "."); } public static void ActiveInstrument() { TheShowIsOn = true; MusicHud.ShowUserInterface(); if ((Object)(object)MusicHud.Instance != (Object)null && MusicHud.Instance.IsInputing) { MusicHud.Instance.TriggerInputNote(); } if (!SecondaryKeyBind) { DisableController(); } Instruments4MusicPlugin.AddLog("Active Instrument."); } public static void DeActiveInstrument() { TheShowIsOn = false; EnableController(); MusicHud.HideUserInterface(); Instruments4MusicPlugin.AddLog("DeActive Instrument."); } [ServerRpc(RequireOwnership = false)] public void PlayTunedAudioServerRpc(ulong playerId, int targetNoteNumber, bool isSoft, bool newPulse, bool secondaryTuneMethod) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(3699046614u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, targetNoteNumber); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref isSoft, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref newPulse, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref secondaryTuneMethod, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 3699046614u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { PlayTunedAudioClientRpc(playerId, targetNoteNumber, isSoft, newPulse, secondaryTuneMethod); } } } [ClientRpc] public void PlayTunedAudioClientRpc(ulong playerId, int targetNoteNumber, bool isSoft, bool newPulse, bool secondaryTuneMethod) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(305110489u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, playerId); BytePacker.WriteValueBitPacked(val2, targetNoteNumber); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref isSoft, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref newPulse, default(ForPrimitives)); ((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref secondaryTuneMethod, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 305110489u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } MusicHud.Instance?.OnButtonClicked(targetNoteNumber); if (!_timerPlayerDictionary.ContainsKey(playerId)) { _timerPlayerDictionary[playerId] = new ConcurrentDictionary<int, float>(); } _timerPlayerDictionary[playerId][targetNoteNumber] = LastTimer; float num = 1f; if (isSoft && newPulse) { num -= SoftModifier; } int num2 = targetNoteNumber - _sourceNoteNumber[playerId]; if (_tunedPlayerDictionary.TryGetValue(playerId, out Dictionary<int, AudioSource> value) && value.TryGetValue(targetNoteNumber, out var value2)) { value2.volume = num; if (!newPulse) { return; } if (secondaryTuneMethod) { if (num2 > 12) { value2.pitch = (float)Math.Pow(1.0594631433486938, num2 - 12); } else if (num2 < -12) { value2.pitch = (float)Math.Pow(1.0594631433486938, num2 + 12); } else { value2.pitch = 1f; } AudioSource obj = value2; AudioMixer? tuneMixer = Instruments4MusicPlugin.TuneMixer; obj.outputAudioMixerGroup = ((tuneMixer != null) ? tuneMixer.FindMatchingGroups($"Tune{Math.Max(-12, Math.Min(12, num2))}")[0] : null); } else { if (num2 > 12) { AudioSource obj2 = value2; AudioMixer? tuneMixer2 = Instruments4MusicPlugin.TuneMixer; obj2.outputAudioMixerGroup = ((tuneMixer2 != null) ? tuneMixer2.FindMatchingGroups($"Tune{num2 - 12}")[0] : null); } else if (num2 < -12) { AudioSource obj3 = value2; AudioMixer? tuneMixer3 = Instruments4MusicPlugin.TuneMixer; obj3.outputAudioMixerGroup = ((tuneMixer3 != null) ? tuneMixer3.FindMatchingGroups($"Tune{num2 + 12}")[0] : null); } else { value2.outputAudioMixerGroup = null; } value2.pitch = (float)Math.Pow(1.0594631433486938, Math.Max(-12, Math.Min(12, num2))); } value2.Play(); } else { if (!ActiveInstrObjects.ContainsKey(playerId) || !_instrClips.ContainsKey(playerId)) { return; } GameObject obj4 = ActiveInstrObjects[playerId]; value2 = ((obj4 != null) ? obj4.AddComponent<AudioSource>() : null); if ((Object)(object)value2 == (Object)null) { return; } if (secondaryTuneMethod) { if (num2 > 12) { value2.pitch = (float)Math.Pow(1.0594631433486938, num2 - 12); } else if (num2 < -12) { value2.pitch = (float)Math.Pow(1.0594631433486938, num2 + 12); } else { value2.pitch = 1f; } AudioSource obj5 = value2; AudioMixer? tuneMixer4 = Instruments4MusicPlugin.TuneMixer; obj5.outputAudioMixerGroup = ((tuneMixer4 != null) ? tuneMixer4.FindMatchingGroups($"Tune{Math.Max(-12, Math.Min(12, num2))}")[0] : null); } else { if (num2 > 12) { AudioSource obj6 = value2; AudioMixer? tuneMixer5 = Instruments4MusicPlugin.TuneMixer; obj6.outputAudioMixerGroup = ((tuneMixer5 != null) ? tuneMixer5.FindMatchingGroups($"Tune{num2 - 12}")[0] : null); } else if (num2 < -12) { AudioSource obj7 = value2; AudioMixer? tuneMixer6 = Instruments4MusicPlugin.TuneMixer; obj7.outputAudioMixerGroup = ((tuneMixer6 != null) ? tuneMixer6.FindMatchingGroups($"Tune{num2 + 12}")[0] : null); } else { value2.outputAudioMixerGroup = null; } value2.pitch = (float)Math.Pow(1.0594631433486938, Math.Max(-12, Math.Min(12, num2))); } value2.clip = _instrClips[playerId]; value2.volume = num; value2.loop = _loopAudio[playerId]; value2.spatialBlend = 1f; value2.spread = 26f; value2.rolloffMode = (AudioRolloffMode)1; value2.minDistance = 4f; value2.maxDistance = 21f; if (!_tunedPlayerDictionary.ContainsKey(playerId)) { _tunedPlayerDictionary[playerId] = new Dictionary<int, AudioSource>(); } _tunedPlayerDictionary[playerId][targetNoteNumber] = value2; value2.Play(); } } public static void InitAutoPlay(string musicNotes) { IsAutoPlayOn = false; if (!TheShowIsOn) { return; } int[] array = new int[7] { 9, 11, 0, 2, 4, 5, 7 }; int[] array2 = new int[7] { 12, 14, 16, 17, 19, 21, 23 }; int[] array3 = new int[7] { 33, 35, 24, 26, 28, 29, 31 }; string[] array4 = Regex.Replace(musicNotes, "\\s+", "").Split(','); int num = 0; TuneList.Clear(); if (array4.Length < 2 || !float.TryParse(array4[0], out AutoPlaySpeed)) { return; } for (int i = 1; i < array4.Length; i++) { List<(int, bool, int)> list = new List<(int, bool, int)>(); if (array4[i].Length % 2 != 1 || array4[i].Length < 2) { TuneList.Add(list); continue; } char c = array4[i][0]; bool flag = !char.IsDigit(c); bool flag2 = flag; if (flag2) { bool flag3; switch (c) { default: flag3 = true; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': flag3 = false; break; } flag2 = flag3; } if (flag2) { TuneList.Add(list); continue; } int num2 = Convert.ToInt32(c.ToString(), 16); IsSustaining[((NetworkBehaviour)Instruments4MusicPlugin.Player).NetworkObjectId] = (num2 & 1) != 0; bool item = (num2 & 2) != 0; for (int j = 1; j < array4[i].Length; j += 2) { char c2 = array4[i][j]; char c3 = c2; char c4 = c3; int num3; if (c4 >= 'A') { if (c4 >= 'a') { if (c4 > 'g') { continue; } num3 = array[c2 - 97]; } else { if (c4 > 'G') { continue; } num3 = array3[c2 - 65]; } } else { if (c4 < '1' || c4 > '7') { continue; } num3 = array2[c2 - 49]; } char c5 = array4[i][j + 1]; bool flag4 = !char.IsDigit(c5); bool flag5 = flag4; if (flag5) { bool flag3; switch (c5) { default: flag3 = true; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': flag3 = false; break; } flag5 = flag3; } if (!flag5) { num3 += ((c5 >= '8') ? 1 : 0); int num4 = Convert.ToInt32(c5.ToString(), 16) & 7; num = ((num4 > num) ? num4 : num); list.Add((num3, item, num4)); } } TuneList.Add(list); } AutoPlayCount = 0f; KeepTuneList.Clear(); for (int k = 0; k < TuneList.Count + num; k++) { KeepTuneList.Add(new List<(int, bool, int)>()); } IsAutoPlayOn = true; } public void DoAutoPlay() { ulong networkObjectId = ((NetworkBehaviour)Instruments4MusicPlugin.Player).NetworkObjectId; if (!IsAutoPlayOn) { return; } AutoPlayCount += Time.deltaTime; int num = (int)(AutoPlayCount / 0.5f * AutoPlaySpeed); num -= 4; if (num < 0) { return; } if (num >= TuneList.Count) { IsAutoPlayOn = false; return; } foreach (var item in TuneList[num]) { var (noteNumber2, flag, num2) = item; if (KeepTuneList[num].All(((int, bool, int) tup) => tup.Item1 != noteNumber2)) { PlayTunedAudioServerRpc(networkObjectId, noteNumber2, flag, newPulse: true, SecondaryTuneMethod); KeepTuneList[num].Add((noteNumber2, flag, 0)); } if (num2 > 0 && TuneList[num + 1].All(((int, bool, int) tup) => tup.Item1 != noteNumber2) && KeepTuneList[num + 1].All(((int, bool, int) tup) => tup.Item1 != noteNumber2)) { KeepTuneList[num + 1].Add((noteNumber2, flag, num2 - 1)); } } foreach (var item2 in KeepTuneList[num]) { var (noteNumber, flag2, num3) = item2; PlayTunedAudioServerRpc(networkObjectId, noteNumber, flag2, newPulse: false, SecondaryTuneMethod); if (num3 > 0 && TuneList[num + 1].All(((int, bool, int) tup) => tup.Item1 != noteNumber) && KeepTuneList[num + 1].All(((int, bool, int) tup) => tup.Item1 != noteNumber)) { KeepTuneList[num + 1].Add((noteNumber, flag2, num3 - 1)); } } } public static void AudioCountDown() { foreach (ulong key in _timerPlayerDictionary.Keys) { foreach (int key2 in _timerPlayerDictionary[key].Keys) { float num = _timerPlayerDictionary[key][key2]; if (_tunedPlayerDictionary[key].TryGetValue(key2, out AudioSource value) && num >= 0f && value.volume > 0.01f) { if (IsSustaining.ContainsKey(key) && IsSustaining[key]) { _timerPlayerDictionary[key][key2] = num - Time.deltaTime / SustainModifier; value.volume = (float)((double)value.volume * Math.Exp((0f - AttenuationCoeff) * Time.deltaTime / SustainModifier)); } else { _timerPlayerDictionary[key][key2] = num - Time.deltaTime; value.volume = (float)((double)value.volume * Math.Exp((0f - AttenuationCoeff) * Time.deltaTime)); } } else { if (value != null) { value.Stop(); } _timerPlayerDictionary[key].Remove(key2, out var _); } } } } private static void EnableController() { try { if (!((Object)(object)Player == (Object)null)) { Player.inTerminalMenu = false; Player.inSpecialInteractAnimation = false; Object.FindObjectOfType<Terminal>().timeSinceTerminalInUse = 0f; Instruments4MusicPlugin.AddLog("Trying to re-enable the controller."); } } catch (Exception arg) { Debug.LogError((object)$"Error while subscribing to input in PlayerController!: {arg}"); } } private static void DisableController() { try { if (!((Object)(object)Player == (Object)null)) { Player.inTerminalMenu = true; Player.inSpecialInteractAnimation = true; Instruments4MusicPlugin.AddLog("Trying to disable the controller."); } } catch (Exception arg) { Debug.LogError((object)$"Error while unsubscribing from input in PlayerController!: {arg}"); } } public void Awake() { _tunedPlayerDictionary = new Dictionary<ulong, Dictionary<int, AudioSource>>(); _timerPlayerDictionary = new Dictionary<ulong, ConcurrentDictionary<int, float>>(); SecondaryTuneMethod = false; TheShowIsOn = false; SecondaryKeyBind = false; if (!KeyBindInit) { SetupKeyBindCallbacks(); KeyBindInit = true; } } public void SetupKeyBindCallbacks() { Instruments4MusicPlugin.InputActionsInstance.SwitchTuneMethod.performed += OnSwitchTuneMethodPressed; Instruments4MusicPlugin.InputActionsInstance.Showtime.performed += OnShowtimePressed; Instruments4MusicPlugin.InputActionsInstance.CurtainCall.performed += OnCurtainCallPressed; Instruments4MusicPlugin.InputActionsInstance.ChangeMode.performed += OnChangeModePressed; Instruments4MusicPlugin.InputActionsInstance.InputNote.performed += OnInputNotePressed; } public void OnSwitchTuneMethodPressed(CallbackContext switchTuneMethodContext) { if (TheShowIsOn && ((CallbackContext)(ref switchTuneMethodContext)).performed) { SecondaryTuneMethod = !SecondaryTuneMethod; Instruments4MusicPlugin.AddLog($"Switch Tune Secondary {SecondaryTuneMethod}."); } } public void OnShowtimePressed(CallbackContext showtimeContext) { if (TheShowIsOn || !((CallbackContext)(ref showtimeContext)).performed) { return; } if (StationaryScript.IsLookingAtInstrument(out GameObject instrumentObj)) { if (!((Object)(object)instrumentObj == (Object)null)) { Instruments4MusicPlugin.AddLog("Looking at Stationary"); (ulong, string)? tuple = FindNearestNetworkObject(instrumentObj); if (tuple.HasValue) { ulong item = tuple.Value.Item1; string item2 = tuple.Value.Item2; Instruments4MusicPlugin.AddLog("Try begin"); Instruments4MusicPlugin.Stationary.LetShowBeginsServerRpc(((NetworkBehaviour)Instruments4MusicPlugin.Player).NetworkObjectId, item, item2); ActiveInstrument(); } } } else if (PortableScript.IsHoldingInstrument(out instrumentObj) && !((Object)(object)instrumentObj == (Object)null)) { Instruments4MusicPlugin.AddLog("Looking at Portable"); NetworkObject component = instrumentObj.GetComponent<NetworkObject>(); if ((Object)(object)component != (Object)null) { Instruments4MusicPlugin.AddLog("Try begin"); Instruments4MusicPlugin.Portable.LetShowBeginsServerRpc(((NetworkBehaviour)Instruments4MusicPlugin.Player).NetworkObjectId, component.NetworkObjectId); ActiveInstrument(); } } } private static (ulong, string)? FindNearestNetworkObject(GameObject current) { List<int> list = new List<int>(); NetworkObject val = null; Transform val2 = current.transform; while ((Object)(object)val2 != (Object)null) { val = ((Component)val2).GetComponent<NetworkObject>(); if ((Object)(object)val != (Object)null) { break; } int siblingIndex = val2.GetSiblingIndex(); list.Insert(0, siblingIndex); val2 = val2.parent; } if ((Object)(object)val == (Object)null) { Instruments4MusicPlugin.AddLog("NetworkObject not found."); return null; } return (val.NetworkObjectId, string.Concat(list.Select((int i) => (char)(i + 65)))); } public static GameObject? FindGameObjectFromPath(ulong objId, string pathSTR) { NetworkManager.Singleton.SpawnManager.SpawnedObjects.TryGetValue(objId, out var value); Transform val = ((Component)value).transform; List<int> list = new List<int>(); foreach (char c in pathSTR) { int item = c - 65; list.Add(item); } foreach (int item2 in list) { if (item2 < 0 || item2 >= val.childCount) { Instruments4MusicPlugin.AddLog("GameObject not found."); return null; } val = val.GetChild(item2); } return ((Component)val).gameObject; } public void OnCurtainCallPressed(CallbackContext curtainCallContext) { if (TheShowIsOn && ((CallbackContext)(ref curtainCallContext)).performed) { Instruments4MusicPlugin.AddLog("Maybe next time."); DeActiveInstrument(); } } public void OnChangeModePressed(CallbackContext changeModeContext) { if (TheShowIsOn && ((CallbackContext)(ref changeModeContext)).performed) { Instruments4MusicPlugin.AddLog("Change key bind mode."); SecondaryKeyBind = !SecondaryKeyBind; if (SecondaryKeyBind) { EnableController(); } else { DisableController(); } MusicHud.UpdateButtonTips(); } } public void OnInputNotePressed(CallbackContext inputNoteContext) { if (TheShowIsOn && ((CallbackContext)(ref inputNoteContext)).performed) { Instruments4MusicPlugin.AddLog("Input music note."); MusicHud.Instance.TriggerInputNote(); } } public void Update() { ulong networkObjectId = ((NetworkBehaviour)Instruments4MusicPlugin.Player).NetworkObjectId; if (_timerPlayerDictionary.ContainsKey(networkObjectId) && _timerPlayerDictionary[networkObjectId].Count > 0) { if (!IsAutoPlayOn) { IsSustaining[networkObjectId] = Instruments4MusicPlugin.InputActionsInstance.Sustain.ReadValue<float>() > 0.5f; } AudioCountDown(); } if (!TheShowIsOn) { return; } if (IsAutoPlayOn) { DoAutoPlay(); } int num = 0; InputAction? soft = Instruments4MusicPlugin.InputActionsInstance.Soft; bool flag = soft != null && soft.ReadValue<float>() > 0.5f; InputAction? semitone = Instruments4MusicPlugin.InputActionsInstance.Semitone; if (semitone != null && semitone.ReadValue<float>() > 0.5f && !SecondaryKeyBind) { num = 1; } if (SecondaryKeyBind) { InputAction lowCKey = Instruments4MusicPlugin.InputActionsInstance.LowCKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTunedAudioServerRpc(networkObjectId, num, flag, lowCKey.triggered, SecondaryTuneMethod); } lowCKey = Instruments4MusicPlugin.InputActionsInstance.LowDKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTunedAudioServerRpc(networkObjectId, 2 + num, flag, lowCKey.triggered, SecondaryTuneMethod); } lowCKey = Instruments4MusicPlugin.InputActionsInstance.LowEKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTunedAudioServerRpc(networkObjectId, 4, flag, lowCKey.triggered, SecondaryTuneMethod); } lowCKey = Instruments4MusicPlugin.InputActionsInstance.LowFKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTunedAudioServerRpc(networkObjectId, 5 + num, flag, lowCKey.triggered, SecondaryTuneMethod); } lowCKey = Instruments4MusicPlugin.InputActionsInstance.LowGKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTunedAudioServerRpc(networkObjectId, 7 + num, flag, lowCKey.triggered, SecondaryTuneMethod); } lowCKey = Instruments4MusicPlugin.InputActionsInstance.LowAKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTunedAudioServerRpc(networkObjectId, 9 + num, flag, lowCKey.triggered, SecondaryTuneMethod); } lowCKey = Instruments4MusicPlugin.InputActionsInstance.LowBKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTunedAudioServerRpc(networkObjectId, 11, flag, lowCKey.triggered, SecondaryTuneMethod); } lowCKey = Instruments4MusicPlugin.InputActionsInstance.MidCKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTunedAudioServerRpc(networkObjectId, 12 + num, flag, lowCKey.triggered, SecondaryTuneMethod); } lowCKey = Instruments4MusicPlugin.InputActionsInstance.MidDKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTunedAudioServerRpc(networkObjectId, 14 + num, flag, lowCKey.triggered, SecondaryTuneMethod); } lowCKey = Instruments4MusicPlugin.InputActionsInstance.MidEKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTunedAudioServerRpc(networkObjectId, 16, flag, lowCKey.triggered, SecondaryTuneMethod); } lowCKey = Instruments4MusicPlugin.InputActionsInstance.MidFKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTunedAudioServerRpc(networkObjectId, 17 + num, flag, lowCKey.triggered, SecondaryTuneMethod); } lowCKey = Instruments4MusicPlugin.InputActionsInstance.MidGKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTunedAudioServerRpc(networkObjectId, 19 + num, flag, lowCKey.triggered, SecondaryTuneMethod); } lowCKey = Instruments4MusicPlugin.InputActionsInstance.MidAKey2; if (lowCKey != null && (lowCKey.ReadValue<float>() > 0.5f || lowCKey.triggered)) { PlayTun