RUMBLE does not support other mod managers. If you want to use a manager, you must use the RUMBLE Mod Manager, a manager specifically designed for this game.
Decompiled source of RockCamDetachedPreviewManager v1.0.0
Mods/RockCamDetachedPreviewManager.dll
Decompiled 10 hours agousing System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using HarmonyLib; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppRUMBLE.Recording.LCK; using Il2CppTMPro; using MelonLoader; using RockCamDetachedPreviewManager; using Rock_Cam_Essentials; using RumbleModdingAPI.RMAPI; using UnityEngine; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: MelonInfo(typeof(Main), "RockCamDetachedPreviewManager", "1.0.0", "Deterraleon", null)] [assembly: MelonGame("Buckethead Entertainment", "RUMBLE")] [assembly: MelonColor(255, 100, 100, 255)] [assembly: MelonAuthorColor(255, 195, 119, 255)] [assembly: VerifyLoaderVersion(0, 6, 6, true)] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("RockCamDetachedPreviewManager")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("RockCamDetachedPreviewManager")] [assembly: AssemblyTitle("RockCamDetachedPreviewManager")] [assembly: AssemblyVersion("1.0.0.0")] namespace RockCamDetachedPreviewManager; public static class BuildInfo { public const string ModName = "RockCamDetachedPreviewManager"; public const string ModVersion = "1.0.0"; public const string Author = "Deterraleon"; } public class Main : MelonMod { public class DetachedPreview { public Preview preview; public string name; public Func<Rock_Cam, bool> Start; public Func<Rock_Cam, bool> End; public Func<Rock_Cam, bool> Initiate; } [HarmonyPatch(typeof(LCKTabletDetachedPreview), "SwitchPreview")] public static class NameBlupdateOther { private static void Prefix(LCKTabletDetachedPreview __instance) { if (Camera._DetachedPreviewManager.ActivePreviewNo >= 6) { customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].End(Camera); } } private static void Postfix(LCKTabletDetachedPreview __instance) { ((TMP_Text)((Component)((Component)__instance.nextButton).gameObject.transform.FindChild("Value")).GetComponent<TextMeshPro>()).text = names[__instance.ActivePreviewNo]; if (Camera._DetachedPreviewManager.ActivePreviewNo >= 6) { customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].Start(Camera); } } } [HarmonyPatch(typeof(LCKTabletDetachedPreview), "SwitchToNextPreview")] public static class NameBlupdate { private static void Prefix(LCKTabletDetachedPreview __instance) { if (Camera._DetachedPreviewManager.ActivePreviewNo >= 6) { customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].End(Camera); } } private static void Postfix(LCKTabletDetachedPreview __instance) { ((TMP_Text)((Component)((Component)__instance.nextButton).gameObject.transform.FindChild("Value")).GetComponent<TextMeshPro>()).text = names[__instance.ActivePreviewNo]; if (Camera._DetachedPreviewManager.ActivePreviewNo >= 6) { customPreviews[Camera._DetachedPreviewManager.ActivePreviewNo - 6].Start(Camera); } } } public static List<string> names = new List<string> { "OFF", "ON Wrist L", "ON Wrist R", "ON HP Bar", "ON View", "ON Monitor" }; public static List<DetachedPreview> customPreviews = new List<DetachedPreview>(); private string currentScene = "Loader"; private bool enabled = true; public Il2CppReferenceArray<Preview> previews; public static Rock_Cam Camera; public override void OnSceneWasLoaded(int buildIndex, string sceneName) { currentScene = sceneName; } public override void OnLateInitializeMelon() { Actions.onMapInitialized += mapLoaded; } public int AddPreview(DetachedPreview preview) { ((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Adding " + preview.name); customPreviews.Add(preview); names.Add(preview.name); ((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Total previews: " + names.Count); return names.Count - 1; } private void InjectPreviews() { List<Preview> list = ((IEnumerable<Preview>)Camera._DetachedPreviewManager.availablePreviews).ToArray().ToList(); foreach (DetachedPreview customPreview in customPreviews) { customPreview.Initiate(Camera); list.Add(customPreview.preview); ((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Injecting " + customPreview.name); } Camera._DetachedPreviewManager.availablePreviews = new Il2CppReferenceArray<Preview>(list.ToArray()); ((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Total previews: " + ((Il2CppArrayBase<Preview>)(object)Camera._DetachedPreviewManager.availablePreviews).Length); } public int ForceInjectPreview(DetachedPreview preview) { List<Preview> list = ((IEnumerable<Preview>)Camera._DetachedPreviewManager.availablePreviews).ToArray().ToList(); preview.Initiate(Camera); list.Add(preview.preview); ((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Force injecting " + preview.name); Camera._DetachedPreviewManager.availablePreviews = new Il2CppReferenceArray<Preview>(list.ToArray()); ((MelonBase)Melon<Main>.Instance).LoggerInstance.Msg("Total previews: " + ((Il2CppArrayBase<Preview>)(object)Camera._DetachedPreviewManager.availablePreviews).Length); return names.Count - 1; } public override void OnUpdate() { if (((ButtonControl)Keyboard.current.eKey).isPressed) { if (((ButtonControl)Keyboard.current.rKey).wasPressedThisFrame) { DetachedPreview detachedPreview = new DetachedPreview(); detachedPreview.preview = ((Il2CppArrayBase<Preview>)(object)Camera._DetachedPreviewManager.availablePreviews)[0]; detachedPreview.name = "Aboba"; AddPreview(detachedPreview); } if (((ButtonControl)Keyboard.current.tKey).wasPressedThisFrame) { Camera._DetachedPreviewManager.SwitchToNextPreview(); } } } public void mapLoaded(string currentScene) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown if (currentScene != "Loader") { Camera = new Rock_Cam(); InjectPreviews(); } } }