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 MoreRanks v2.0.2
Mods/MoreRanks.dll
Decompiled 4 days agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Text; using HarmonyLib; using Il2CppInterop.Runtime.InteropTypes; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppRUMBLE.Managers; using Il2CppRUMBLE.Networking.MatchFlow; using Il2CppRUMBLE.Social; using Il2CppRUMBLE.Social.Phone; using Il2CppRUMBLE.Utilities; using Il2CppSmartLocalization; using Il2CppSmartLocalization.Editor; using Il2CppTMPro; using MelonLoader; using MoreRanks; using UnityEngine; [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), "MoreRanks", "2.0.2", "UlvakSkillz", null)] [assembly: MelonGame("Buckethead Entertainment", "RUMBLE")] [assembly: MelonColor(255, 195, 0, 255)] [assembly: MelonAuthorColor(255, 195, 0, 255)] [assembly: VerifyLoaderVersion(0, 6, 6, true)] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("MoreRanks")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+97a8802e9332904e6ef7736f032cd3fc7690a993")] [assembly: AssemblyProduct("MoreRanks")] [assembly: AssemblyTitle("MoreRanks")] [assembly: AssemblyVersion("1.0.0.0")] namespace MoreRanks; public static class BuildInfo { public const string ModName = "MoreRanks"; public const string ModVersion = "2.0.2"; public const string Author = "UlvakSkillz"; } public class Main : MelonMod { [HarmonyPatch(typeof(StaticRankBar), "Start")] public static class StaticRankBarStart { private static void Postfix(ref StaticRankBar __instance) { if (addedNames.Count != 0) { ((Component)((Component)__instance).gameObject.transform.GetChild(1)).GetComponent<LocalizedTextTMPro>().localizedKey = "Rank." + addedNames[addedNames.Count - 1].Replace(" ", "") + ".Name"; } } } [HarmonyPatch(typeof(PlayerTag), "OnUpdatedUserData")] public static class PlayerTagOnUpdatedUserData { private static void Postfix(ref PlayerTag __instance, ref UserData userData) { __instance.rank.enableWordWrapping = false; __instance.rank.fontSizeMin = 0f; __instance.rank.enableAutoSizing = true; } } [HarmonyPatch(typeof(StaticRankBar), "UpdateRankBar", new Type[] { typeof(int) })] public static class StaticRankBarUpdateRankBar { private static void Postfix(ref StaticRankBar __instance, int battlePoints) { ((TMP_Text)__instance.currRankText).enableWordWrapping = false; ((TMP_Text)__instance.currRankText).fontSizeMin = 0f; ((TMP_Text)__instance.currRankText).enableAutoSizing = true; ((TMP_Text)__instance.nextRankText).enableWordWrapping = false; ((TMP_Text)__instance.nextRankText).fontSizeMin = 0f; ((TMP_Text)__instance.nextRankText).enableAutoSizing = true; } } private List<int> addedBPs = new List<int>(); public static List<string> addedNames = new List<string>(); private static void Log(string msg) { MelonLogger.Msg(msg); } public override void OnSceneWasLoaded(int buildIndex, string sceneName) { //IL_0575: Unknown result type (might be due to invalid IL or missing references) //IL_057c: Expected O, but got Unknown //IL_061d: Unknown result type (might be due to invalid IL or missing references) //IL_0624: Expected O, but got Unknown if (!(sceneName == "Loader") || ((Il2CppArrayBase<Rank>)(object)ScriptableObjectSingleton<RankManager>.instance.Ranks).Count != 6) { return; } if (!Directory.Exists("UserData\\MoreRanks")) { Directory.CreateDirectory("UserData\\MoreRanks"); } if (!File.Exists("UserData\\MoreRanks\\Ranks.txt")) { Log("Creating File with Default Values"); addedBPs = new List<int> { 234, 366, 552, 792, 1194, 1758, 2484, 3696, 5394, 7578, 11220, 16320, 22878, 33810, 49116, 68796, 101598, 147522, 206568, 304980, 442758, 619902, 915144, 1328484, 1859922, 2745654, 3985680, 5580000, 8237202, 11957286, 16740252, 24711864, 35872122, 50221026, 74135868, 107616648, 150663366, 222407898, 322850244, 451990404, 667224006, 968551050, 1355971536, 2001672348 }; addedNames = new List<string> { "Massif", "Fault Block", "Seamount", "Butte", "Plateau", "Cirque", "Large Island", "Province", "Mesa", "Horst", "Country", "Terrane", "Craton", "Shield", "Mountain Range", "Seamount Chain", "Microcontinent", "Subcontinent", "Continent", "Tectonic Plate", "Lithosphere", "Asthenosphere", "The Moon", "Mercury", "Mars", "Venus", "Planet Earth", "Super Earth", "Proxima Centauri", "The Sun", "Sirius A", "Vega", "Arcturus", "Rigel", "Betelgeuse", "Astroid Belt", "Solar System", "Black Hole", "Cat's Eye Nebula", "Helix Nebula", "Orion Nebula", "Omega Centauri", "The Milky Way", "The Universe" }; string text = ""; for (int i = 0; i < addedBPs.Count; i++) { text = text + addedBPs[i] + "," + addedNames[i]; if (i != addedBPs.Count - 1) { text += Environment.NewLine; } } saveFile(text, "UserData\\MoreRanks\\Ranks.txt"); } LoadRankFile(); Il2CppReferenceArray<Rank> ranks = ScriptableObjectSingleton<RankManager>.instance.Ranks; Rank[] array = (Rank[])(object)new Rank[addedBPs.Count + 6]; ((Il2CppArrayBase<Rank>)(object)ranks).CopyTo(array, 0); for (int j = 0; j < addedBPs.Count; j++) { Rank val = new Rank(((Il2CppObjectBase)((Il2CppArrayBase<Rank>)(object)ranks)[5]).Pointer); val.RequiredBattlePoints = addedBPs[j]; val.NameLocalizationKey = "Rank." + addedNames[j].Replace(" ", "") + ".Name"; LanguageManager.instance.RawTextDatabase.Add("Rank." + addedNames[j].Replace(" ", "") + ".Name", addedNames[j]); LocalizedObject val2 = new LocalizedObject(LanguageManager.instance.LanguageDatabase["Rank.Mountain.Name"]); val2.textValue = addedNames[j]; LanguageManager.instance.LanguageDatabase.Add("Rank." + addedNames[j].Replace(" ", "") + ".Name", val2); array[j + 6] = val; Log("Loaded Rank: " + addedBPs[j] + " " + addedNames[j]); } ScriptableObjectSingleton<RankManager>.instance.Ranks = Il2CppReferenceArray<Rank>.op_Implicit(array); } private void saveFile(string textToSave, string file) { FileStream fileStream = File.Create(file); byte[] bytes = Encoding.UTF8.GetBytes(textToSave); fileStream.Write(bytes); fileStream.Close(); fileStream.Dispose(); } private void LoadRankFile() { try { addedBPs.Clear(); addedNames.Clear(); string[] array = File.ReadAllLines("UserData\\MoreRanks\\Ranks.txt"); List<string> list = new List<string>(); for (int i = 0; i < array.Length; i++) { try { string[] array2 = array[i].Split(","); if (array2.Length != 2) { MelonLogger.Error("Error Reading Rank File Line " + i + ": " + array[i]); continue; } try { int.Parse(array2[0]); } catch { MelonLogger.Error("Error Reading BP (too high) File Line " + i + ": " + array[i]); goto end_IL_0032; } int num = int.Parse(array2[0]); if (num <= 156) { MelonLogger.Error("Error Reading BP (too low) File Line " + i + ": " + array[i]); } else if (addedBPs.IndexOf(num) != -1) { MelonLogger.Error("BP Already Exists File Line " + i + ": " + array[i]); } else if (addedBPs.Count != 0 && num < addedBPs[addedBPs.Count - 1]) { MelonLogger.Error("BP out of Order File Line " + addedBPs[addedBPs.Count - 1] + " -> " + i + ": " + array[i]); } else { string text = array2[1]; if (list.Contains(text.Replace(" ", ""))) { MelonLogger.Error("Rank Name Already Exists File Line " + i + ": " + array2[i]); continue; } addedBPs.Add(num); addedNames.Add(text); list.Add(text.Replace(" ", "")); } end_IL_0032:; } catch { MelonLogger.Error("Error Reading Rank File Line " + i); } } } catch (Exception ex) { MelonLogger.Error("Error Loading Rank File" + ex); } } }