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 More Park Friends v2.4.2
Mods/MoreParkFriends.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 HarmonyLib; using Il2CppInterop.Runtime.InteropTypes.Arrays; using Il2CppPhoton.Pun; using Il2CppRUMBLE.Environment; using Il2CppRUMBLE.Interactions.InteractionBase; using Il2CppRUMBLE.Managers; using Il2CppRUMBLE.Players; using Il2CppRUMBLE.Social; using Il2CppRUMBLE.Social.Phone; using Il2CppRUMBLE.Utilities; using Il2CppTMPro; using MelonLoader; using MelonLoader.Preferences; using MoreParkFriends; using RumbleModdingAPI.RMAPI; using UIFramework; 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), "More Park Friends", "2.4.2", "UlvakSkillz", null)] [assembly: MelonGame("Buckethead Entertainment", "RUMBLE")] [assembly: MelonColor(255, 195, 0, 255)] [assembly: MelonAuthorColor(255, 195, 0, 255)] [assembly: VerifyLoaderVersion(0, 7, 2, true)] [assembly: MelonAdditionalDependencies(new string[] { "UIFramework" })] [assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")] [assembly: AssemblyCompany("MoreParkFriends")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0+1728fb657132527f96c3bc417ab5c051dd333df3")] [assembly: AssemblyProduct("MoreParkFriends")] [assembly: AssemblyTitle("MoreParkFriends")] [assembly: AssemblyVersion("1.0.0.0")] namespace MoreParkFriends; public static class BuildInfo { public const string ModName = "More Park Friends"; public const string ModVersion = "2.4.2"; public const string Author = "UlvakSkillz"; } public class Main : MelonMod { internal static int playerCap = 1; internal static int additionsMade = 6; private static string currentScene = "Loader"; public override void OnInitializeMelon() { Preferences.InitPrefs(); ((ModelModItem)UI.Register((MelonBase)(object)this, (MelonPreferences_Category[])(object)new MelonPreferences_Category[1] { Preferences.MoreParkFriendsCategory })).OnModSaved += Save; } public override void OnSceneWasLoaded(int buildIndex, string sceneName) { currentScene = sceneName; additionsMade = 6; if (currentScene == "Gym") { UpdateGymText(); } } private void Save() { if (Preferences.IsPrefChanged((MelonPreferences_Entry)(object)Preferences.PrefMultiplier) && currentScene == "Gym") { UpdateGymText(); } if (Preferences.IsPrefChanged((MelonPreferences_Entry)(object)Preferences.PrefShowExpandedPlayers) && currentScene == "Park") { ScaleBoard(null, Singleton<PlayerManager>.instance.AllPlayers.Count); } Preferences.StoreLastSavedPrefs(); } private static void UpdateGymText() { GameObject gameObject = TextandIcons.GetGameObject(); for (int i = 1; i <= 5; i++) { ((TMP_Text)((Component)gameObject.transform.GetChild(i)).GetComponent<TextMeshPro>()).text = ((1 + i) * Preferences.PrefMultiplier.Value).ToString(); } } internal static void UpdateParkBoardPlayerTags(ParkBoardParkVariant __instance) { //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Expected O, but got Unknown //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Expected O, but got Unknown float num = Singleton<PlayerManager>.instance.AllPlayers.Count; if ((Object)(object)__instance == (Object)null) { try { __instance = ParkboardPark.GetGameObject().GetComponent<ParkBoardParkVariant>(); } catch { return; } if ((Object)(object)__instance == (Object)null) { return; } } for (int i = 6; i < playerCap; i++) { if ((float)i < num) { GeneralData generalData = Singleton<PlayerManager>.instance.AllPlayers[i].Data.GeneralData; PlayerTag obj2 = ((Il2CppArrayBase<PlayerTag>)(object)__instance.parkBoardPlayerTags)[i]; if (obj2 != null) { obj2.Initialize(new UserData(generalData.PlayFabMasterId, generalData.PlayFabTitleId, generalData.PublicUsername, generalData.BattlePoints), false); } GameObject obj3 = ((Il2CppArrayBase<GameObject>)(object)__instance.hostIcons)[i]; if (obj3 != null) { ((Component)obj3.transform.parent.GetChild(1)).gameObject.SetActive(Preferences.PrefShowExpandedPlayers.Value && PhotonNetwork.IsMasterClient); } PlayerTag obj4 = ((Il2CppArrayBase<PlayerTag>)(object)__instance.parkBoardPlayerTags)[i]; if (obj4 != null) { ((Component)obj4).gameObject.SetActive(Preferences.PrefShowExpandedPlayers.Value); } continue; } PlayerTag obj5 = ((Il2CppArrayBase<PlayerTag>)(object)__instance.parkBoardPlayerTags)[i]; if (obj5 != null) { obj5.Initialize(new UserData("", "", "Name", 0), false); } GameObject obj6 = ((Il2CppArrayBase<GameObject>)(object)__instance.hostIcons)[i]; if (obj6 != null) { ((Component)obj6.transform.parent.GetChild(0)).gameObject.SetActive(false); } GameObject obj7 = ((Il2CppArrayBase<GameObject>)(object)__instance.hostIcons)[i]; if (obj7 != null) { ((Component)obj7.transform.parent.GetChild(1)).gameObject.SetActive(false); } PlayerTag obj8 = ((Il2CppArrayBase<PlayerTag>)(object)__instance.parkBoardPlayerTags)[i]; if (obj8 != null) { ((Component)obj8).gameObject.SetActive(false); } } ScaleBoard(__instance, Singleton<PlayerManager>.instance.AllPlayers.Count); } private static void ScaleBoard(ParkBoardParkVariant __instance, float playerCount) { //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: 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) //IL_0123: Unknown result type (might be due to invalid IL or missing references) if (Preferences.PrefShowExpandedPlayers.Value) { float num = 11f / 30f * (float)Math.Sqrt(Math.Max(0f, playerCount - 6f) / 12f); Melon<Main>.Logger.Msg("Clamped: " + num); ((Il2CppArrayBase<GameObject>)(object)__instance.hostIcons)[0].transform.parent.parent.localPosition = new Vector3(0f, num, 0f); ((Il2CppArrayBase<GameObject>)(object)__instance.hostIcons)[0].transform.parent.parent.localScale = new Vector3(1f, Math.Min(1f, 6f / playerCount), 1f); ((Component)((Il2CppArrayBase<PlayerTag>)(object)__instance.parkBoardPlayerTags)[0]).transform.parent.localPosition = new Vector3(0f, num, 0f); ((Component)((Il2CppArrayBase<PlayerTag>)(object)__instance.parkBoardPlayerTags)[0]).transform.parent.localScale = new Vector3(1f, Math.Min(1f, 6f / playerCount), 1f); } else { ((Il2CppArrayBase<GameObject>)(object)__instance.hostIcons)[0].transform.parent.parent.localPosition = Vector3.zero; ((Il2CppArrayBase<GameObject>)(object)__instance.hostIcons)[0].transform.parent.parent.localScale = Vector3.one; ((Component)((Il2CppArrayBase<PlayerTag>)(object)__instance.parkBoardPlayerTags)[0]).transform.parent.localPosition = Vector3.zero; ((Component)((Il2CppArrayBase<PlayerTag>)(object)__instance.parkBoardPlayerTags)[0]).transform.parent.localScale = Vector3.one; } } } [HarmonyPatch(typeof(ParkBoardGymVariant), "OnPlayerEnteredTrigger", new Type[] { })] public static class OnPlayerEnteredTriggerPatch { private static void Prefix(ref ParkBoardGymVariant __instance) { ParkBoardGymVariant obj = __instance; obj.hostPlayerCapacity *= Preferences.PrefMultiplier.Value; } } [HarmonyPatch(typeof(ParkBoardParkVariant), "UpdatePlayerList", new Type[] { })] public static class UpdatePlayerListPatch { private static void Postfix(ref ParkBoardParkVariant __instance) { Main.UpdateParkBoardPlayerTags(__instance); } } [HarmonyPatch(typeof(ParkBoardParkVariant), "Initialize", new Type[] { typeof(ParkBoard) })] public static class InitializePatch { private static void Postfix(ref ParkBoardParkVariant __instance, ParkBoard owner) { //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_0239: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Expected O, but got Unknown List<GameObject> list = ListConverter(Il2CppArrayBase<GameObject>.op_Implicit((Il2CppArrayBase<GameObject>)(object)__instance.hostIcons)); List<InteractionButton> list2 = ListConverter(Il2CppArrayBase<InteractionButton>.op_Implicit((Il2CppArrayBase<InteractionButton>)(object)__instance.kickButtons)); List<PlayerTag> list3 = ListConverter(Il2CppArrayBase<PlayerTag>.op_Implicit((Il2CppArrayBase<PlayerTag>)(object)__instance.parkBoardPlayerTags)); int num = Main.additionsMade; float num2 = -1.1f; float num3 = -0.649f; float num4 = -0.18f; Main.playerCap = int.Parse(((TMP_Text)__instance.currentParkPlayerCapText).text.Split('/')[1]); while (num < Main.playerCap) { GameObject val = Object.Instantiate<GameObject>(((Component)list[0].transform.parent).gameObject); ((Object)val).name = $"Addition ({num})"; val.transform.SetParent(list[0].transform.parent.parent); val.transform.localPosition = new Vector3(0f, num2, 0f); val.transform.localRotation = Quaternion.identity; val.transform.localScale = ((Component)list[0].transform.parent).transform.localScale; GameObject val2 = Object.Instantiate<GameObject>(((Component)((Il2CppArrayBase<PlayerTag>)(object)__instance.parkBoardPlayerTags)[0]).gameObject); ((Object)val2).name = $"Player Tag 2.0 ({num})"; val2.transform.SetParent(((Component)((Il2CppArrayBase<PlayerTag>)(object)__instance.parkBoardPlayerTags)[0]).gameObject.transform.parent); val2.transform.localPosition = new Vector3(-0.06f, num3, -0.053f); val2.transform.localRotation = Quaternion.identity; val2.transform.localScale = ((Component)((Il2CppArrayBase<PlayerTag>)(object)__instance.parkBoardPlayerTags)[0]).transform.localScale; PlayerTag component = val2.GetComponent<PlayerTag>(); component.Initialize(new UserData("", "", "Name", 0), false); list.Add(((Component)val.transform.GetChild(0)).gameObject); list2.Add(((Component)val.transform.GetChild(1)).GetComponent<InteractionButton>()); list3.Add(component); num++; num2 += num4; num3 += num4; } __instance.hostIcons = Il2CppReferenceArray<GameObject>.op_Implicit(ListConverter(list)); __instance.kickButtons = Il2CppReferenceArray<InteractionButton>.op_Implicit(ListConverter(list2)); __instance.parkBoardPlayerTags = Il2CppReferenceArray<PlayerTag>.op_Implicit(ListConverter(list3)); Main.UpdateParkBoardPlayerTags(__instance); } private static List<T> ListConverter<T>(T[] list) { List<T> list2 = new List<T>(); foreach (T item in list) { list2.Add(item); } return list2; } private static T[] ListConverter<T>(List<T> list) { T[] array = new T[list.Count]; for (int i = 0; i < list.Count; i++) { array[i] = list[i]; } return array; } } public class Preferences { private const string CONFIG_FILE = "config.cfg"; private const string USER_DATA = "UserData/MoreParkFriends/"; internal static Dictionary<MelonPreferences_Entry, object> LastSavedValues = new Dictionary<MelonPreferences_Entry, object>(); internal static MelonPreferences_Category MoreParkFriendsCategory; internal static MelonPreferences_Entry<int> PrefMultiplier; internal static MelonPreferences_Entry<bool> PrefShowExpandedPlayers; internal static void InitPrefs() { if (!Directory.Exists("UserData/MoreParkFriends/")) { Directory.CreateDirectory("UserData/MoreParkFriends/"); } MoreParkFriendsCategory = MelonPreferences.CreateCategory("MoreParkFriends", "Settings"); MoreParkFriendsCategory.SetFilePath(Path.Combine("UserData/MoreParkFriends/", "config.cfg")); PrefMultiplier = MoreParkFriendsCategory.CreateEntry<int>("Multiplier", 2, "Multiplier", "Changes the Park Board Player Count Values to Default*Multiplier (Limit: 1-3)", false, false, (ValueValidator)(object)new ValueRange<int>(1, 3), (string)null); PrefShowExpandedPlayers = MoreParkFriendsCategory.CreateEntry<bool>("ShowExpandedPlayers", true, "Show Expanded Players", "Scales the Player Tags on the Park Board to Show Every Player in the Park", false, false, (ValueValidator)null, (string)null); StoreLastSavedPrefs(); } internal static void StoreLastSavedPrefs() { List<MelonPreferences_Entry> list = new List<MelonPreferences_Entry>(); list.AddRange(MoreParkFriendsCategory.Entries); foreach (MelonPreferences_Entry item in list) { LastSavedValues[item] = item.BoxedValue; } } public static bool AnyPrefsChanged() { foreach (KeyValuePair<MelonPreferences_Entry, object> lastSavedValue in LastSavedValues) { if (!lastSavedValue.Key.BoxedValue.Equals(lastSavedValue.Value)) { return true; } } return false; } public static bool IsPrefChanged(MelonPreferences_Entry entry) { if (LastSavedValues.TryGetValue(entry, out var value)) { return !entry.BoxedValue.Equals(value); } return false; } }