internal static void OnSettingsApplied() { ShoulderMode = MelonPrefs.GetBool(IkTweaksCategory, FixShoulders) ? IKSolverVR.Arm.ShoulderRotationMode.YawPitch : IKSolverVR.Arm.ShoulderRotationMode.FromTo; foreach (var fieldInfo in typeof(IkTweaksSettings).GetFields(BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly)) { if (fieldInfo.FieldType == typeof(string)) { fieldInfo.SetValue(null, MelonPrefs.GetString(IkTweaksCategory, fieldInfo.Name)); } else if (fieldInfo.FieldType == typeof(bool)) { fieldInfo.SetValue(null, MelonPrefs.GetBool(IkTweaksCategory, fieldInfo.Name)); } else if (fieldInfo.FieldType == typeof(float)) { fieldInfo.SetValue(null, MelonPrefs.GetFloat(IkTweaksCategory, fieldInfo.Name)); } else if (fieldInfo.FieldType == typeof(int)) { fieldInfo.SetValue(null, MelonPrefs.GetInt(IkTweaksCategory, fieldInfo.Name)); } } if (SpineRelaxIterations > 25) { SpineRelaxIterations = 25; } }
public override void OnModSettingsApplied() { var cursorManager = VRCUiCursorManager.field_Private_Static_VRCUiCursorManager_0; if (cursorManager == null) { return; } var leftHand = cursorManager.transform.Find("LeftHandBeam").GetComponent <VRCUiCursor>(); var rightHand = cursorManager.transform.Find("RightHandBeam").GetComponent <VRCUiCursor>(); if (myOriginalLaserTexture == null) { myOriginalLaserTexture = leftHand.GetComponent <LineRenderer>().material.mainTexture.Cast <Texture2D>(); myOriginalLaserTexture.hideFlags |= HideFlags.DontUnloadUnusedAsset; } var targetTexture = MelonPrefs.GetBool(SettingsCategory, RecolorBeamsSetting) ? myWhiteLaserTexture : myOriginalLaserTexture; leftHand.GetComponent <LineRenderer>().material.mainTexture = targetTexture; rightHand.GetComponent <LineRenderer>().material.mainTexture = targetTexture; AdjustParticleSystems(leftHand.gameObject); AdjustParticleSystems(rightHand.gameObject); var color = DecodeColor(MelonPrefs.GetString(SettingsCategory, BeamColorSetting)); ourBeamColor = color; ourDoRecolorSparks = MelonPrefs.GetBool(SettingsCategory, RecolorSparksSetting); ourDoRecolorBeams = MelonPrefs.GetBool(SettingsCategory, RecolorBeamsSetting); }
public override void OnModSettingsApplied() { // Highly recommend using UIExpansionKit to easily change your title (For VRChat) TitleString = MelonPrefs.GetString(ModCategory, CustomTitleText); Console.Title = string.Format(TitleString); MelonLogger.Log("Set console title to: " + TitleString); }
public static string[] GetModData() { var username = MelonPrefs.GetString(settingsCategory, IrcMenuNames[0]); var realname = MelonPrefs.GetString(settingsCategory, IrcMenuNames[1]); var nickname = MelonPrefs.GetString(settingsCategory, IrcMenuNames[2]); var defaultServer = MelonPrefs.GetString(settingsCategory, IrcMenuNames[3]); return(new[] { username, realname, nickname, defaultServer }); }
public override void OnApplicationStart() // Runs after Game Initialization. { MelonPrefs.RegisterCategory(ModCategory, "Custom Console Title"); MelonPrefs.RegisterString(ModCategory, CustomTitleText, "Being a Cutie!", "Custom Console Text"); TitleString = MelonPrefs.GetString(ModCategory, CustomTitleText); Console.Title = string.Format(TitleString); }
private void ApplySettings() { activeSettings.Enabled = MelonPrefs.GetBool(SettingsCategory, nameof(Settings.Enabled)); activeSettings.SpeedMultiplier = MelonPrefs.GetFloat(SettingsCategory, nameof(Settings.SpeedMultiplier)); activeSettings.DoubleClickTime = MelonPrefs.GetFloat(SettingsCategory, nameof(Settings.DoubleClickTime)); if (Enum.TryParse(MelonPrefs.GetString(SettingsCategory, nameof(Settings.Forward)), out KeyCode forward)) { activeSettings.Forward = forward; } else { MelonLogger.LogError("Failed to parse KeyCode Forward"); } if (Enum.TryParse(MelonPrefs.GetString(SettingsCategory, nameof(Settings.Backward)), out KeyCode backward)) { activeSettings.Backward = backward; } else { MelonLogger.LogError("Failed to parse KeyCode Backward"); } if (Enum.TryParse(MelonPrefs.GetString(SettingsCategory, nameof(Settings.Left)), out KeyCode left)) { activeSettings.Left = left; } else { MelonLogger.LogError("Failed to parse KeyCode Left"); } if (Enum.TryParse(MelonPrefs.GetString(SettingsCategory, nameof(Settings.Right)), out KeyCode right)) { activeSettings.Right = right; } else { MelonLogger.LogError("Failed to parse KeyCode Right"); } activeSettings.AxisDeadZone = MelonPrefs.GetFloat(SettingsCategory, nameof(Settings.AxisDeadZone)); activeSettings.AxisClickThreshold = MelonPrefs.GetFloat(SettingsCategory, nameof(Settings.AxisClickThreshold)); SetLocomotion(); }
private void LoadConfig() { leaderboardUserColor = MelonPrefs.GetString("ScorePercentage", "leaderboardUserColor"); leaderboardHighScoreSize = MelonPrefs.GetString("ScorePercentage", "leaderboardHighScoreSize"); leaderboardPercentSize = MelonPrefs.GetString("ScorePercentage", "leaderboardPercentSize"); leaderboardUsernameSize = MelonPrefs.GetString("ScorePercentage", "leaderboardUsernameSize"); songListHighScoreSize = MelonPrefs.GetString("ScorePercentage", "songListHighScoreSize"); songListPercentSize = MelonPrefs.GetString("ScorePercentage", "songListPercentSize"); inGameCurrentScoreSize = MelonPrefs.GetString("ScorePercentage", "inGameCurrentScoreSize"); inGameCurrentPercentSize = MelonPrefs.GetString("ScorePercentage", "inGameCurrentPercentSize"); inGameHighScoreLabelText = MelonPrefs.GetString("ScorePercentage", "inGameHighScoreLabelText"); inGameHighScoreLabelSize = MelonPrefs.GetString("ScorePercentage", "inGameHighScoreLabelSize"); inGameHighScoreSize = MelonPrefs.GetString("ScorePercentage", "inGameHighScoreSize"); inGamePercentSize = MelonPrefs.GetString("ScorePercentage", "inGamePercentSize"); historyTopScoreSize = MelonPrefs.GetString("ScorePercentage", "historyTopScoreSize"); historyTopPercentSize = MelonPrefs.GetString("ScorePercentage", "historyTopPercentSize"); }
public static IEnumerable <Type> GetTypes() { var blockedclasses = MelonPrefs.GetString(settingsCategory, "CustomBlocker").Split(';').Select(item => { Type asss = null; try { asss = Type.GetType(item); } catch (Exception e) { } return(asss); }); return(blockedclasses); }
public override void OnModSettingsApplied() { bool enabled = MelonPrefs.GetBool("DirectionalVoice", "Enabled"); if (!enabled && mEnabled) { foreach (Player player in Util.GetPlayers()) { player.field_Private_USpeaker_0.SpeakerVolume = 1f; } } mEnabled = enabled; mMinVolume = MelonPrefs.GetFloat("DirectionalVoice", "MinVolume"); #if DEBUG mDebugTarget = MelonPrefs.GetString("DirectionalVoice", "DebugTarget"); #endif }
public static void OnModSettingsApplied() { foreach (var fieldInfo in typeof(Config).GetFields(BindingFlags.Static | BindingFlags.Public)) { if (fieldInfo.Name == "Category") { continue; } if (fieldInfo.FieldType == typeof(float)) { fieldInfo.SetValue(null, MelonPrefs.GetFloat(Category, fieldInfo.Name)); } if (fieldInfo.FieldType == typeof(string)) { fieldInfo.SetValue(null, MelonPrefs.GetString(Category, fieldInfo.Name)); } } }
public override unsafe void OnApplicationStart() { try { var settingsCategory = "HWIDPatch"; MelonPrefs.RegisterCategory(settingsCategory, "HWID Patch"); MelonPrefs.RegisterString(settingsCategory, "HWID", "", hideFromList: true); var newId = MelonPrefs.GetString(settingsCategory, "HWID"); if (newId.Length != SystemInfo.deviceUniqueIdentifier.Length) { var random = new System.Random(Environment.TickCount); var bytes = new byte[SystemInfo.deviceUniqueIdentifier.Length / 2]; random.NextBytes(bytes); newId = string.Join("", bytes.Select(it => it.ToString("x2"))); MelonPrefs.SetString(settingsCategory, "HWID", newId); } ourGeneratedHwidString = new Il2CppSystem.Object(IL2CPP.ManagedStringToIl2Cpp(newId)); var icallName = "UnityEngine.SystemInfo::GetDeviceUniqueIdentifier"; var icallAddress = IL2CPP.il2cpp_resolve_icall(icallName); if (icallAddress == IntPtr.Zero) { MelonLogger.LogError("Can't resolve the icall, not patching"); return; } CompatHook((IntPtr)(&icallAddress), typeof(HWIDPatchMod).GetMethod(nameof(GetDeviceIdPatch), BindingFlags.Static | BindingFlags.NonPublic) !.MethodHandle.GetFunctionPointer()); MelonLogger.Log("Patched HWID; below two should match:"); MelonLogger.Log($"Current: {SystemInfo.deviceUniqueIdentifier}"); MelonLogger.Log($"Target: {newId}"); } catch (Exception ex) { MelonLogger.LogError(ex.ToString()); } }
public static Color GetLeaveIconColor() => DecodeColor(MelonPrefs.GetString(SettingsCategory, SettingLeaveIconColor));
public static Color GetFriendJoinIconColor() => DecodeColor(MelonPrefs.GetString(SettingsCategory, SettingFriendsJoinColor));
public static IEnumerator PopulateSettingsPanel(RectTransform settingsContentRoot) { yield return(null); yield return(null); yield return(null); var categoryPrefab = ourStuffBundle.SettingsCategory; var boolPrefab = ourStuffBundle.SettingsBool; var textPrefab = ourStuffBundle.SettingsText; var comboBoxPrefab = ourStuffBundle.SettingsComboBox; settingsContentRoot.DestroyChildren(); var pinnedSettings = ExpansionKitSettings.ListPinnedPrefs(false).ToList(); foreach (var keyValuePair in MelonPrefs.GetPreferences()) { var categoryId = keyValuePair.Key; var prefDict = keyValuePair.Value; if (ExpansionKitApi.CustomCategoryUIs.TryGetValue(categoryId, out var specificPrefab)) { Object.Instantiate(specificPrefab, settingsContentRoot, false); continue; } var prefsToPopulate = prefDict.Where(it => !it.Value.Hidden).ToList(); if (prefsToPopulate.Count == 0) { continue; } var categoryUi = Object.Instantiate(categoryPrefab, settingsContentRoot, false); categoryUi.GetComponentInChildren <Text>().text = MelonPrefs.GetCategoryDisplayName(categoryId); var categoryUiContent = categoryUi.transform.Find("CategoryEntries"); var expandButtonTransform = categoryUi.transform.Find("ExpandButton"); var expandButton = expandButtonTransform.GetComponent <Button>(); var expandButtonText = expandButtonTransform.GetComponentInChildren <Text>(); void SetExpanded(bool expanded) { expandButtonText.text = expanded ? "^" : "V"; categoryUiContent.gameObject.SetActive(expanded); } expandButton.onClick.AddListener(new Action(() => { SetExpanded(ourCategoryExpanded[categoryId] = !ourCategoryExpanded[categoryId]); })); if (!ourCategoryExpanded.ContainsKey(categoryId)) { ourCategoryExpanded[categoryId] = !ExpansionKitSettings.IsCategoriesStartCollapsed(); } SetExpanded(ourCategoryExpanded[categoryId]); foreach (var valuePair in prefsToPopulate) { var prefId = valuePair.Key; var prefDesc = valuePair.Value; switch (prefDesc.Type) { case MelonPrefs.MelonPreferenceType.STRING: { if (ExpansionKitApi.EnumSettings.TryGetValue((categoryId, prefId), out var enumValues)) { var comboSetting = Object.Instantiate(comboBoxPrefab, categoryUiContent, false); comboSetting.GetComponentInChildren <Text>().text = prefDesc.DisplayText ?? prefId; var dropdown = comboSetting.GetComponentInChildren <Dropdown>(); var options = new Il2CppSystem.Collections.Generic.List <Dropdown.OptionData>(); var currentValue = MelonPrefs.GetString(categoryId, prefId); var selectedIndex = enumValues.Count; for (var i = 0; i < enumValues.Count; i++) { var valueTuple = enumValues[i]; options.Add(new Dropdown.OptionData(valueTuple.DisplayName)); if (currentValue == valueTuple.SettingsValue) { selectedIndex = i; } } if (enumValues.All(it => it.SettingsValue != currentValue)) { options.Add(new Dropdown.OptionData(currentValue)); } dropdown.options = options; dropdown.value = selectedIndex; dropdown.onValueChanged.AddListener(new Action <int>(value => { prefDesc.ValueEdited = value >= enumValues.Count ? currentValue : enumValues[value].SettingsValue; })); }
public static IEnumerator PopulateSettingsPanel(RectTransform settingsContentRoot) { yield return(null); yield return(null); yield return(null); var categoryPrefab = ourStuffBundle.SettingsCategory; var boolPrefab = ourStuffBundle.SettingsBool; var textPrefab = ourStuffBundle.SettingsText; settingsContentRoot.DestroyChildren(); var pinnedSettings = ExpansionKitSettings.ListPinnedPrefs(false).ToList(); foreach (var keyValuePair in MelonPrefs.GetPreferences()) { var categoryId = keyValuePair.Key; var prefDict = keyValuePair.Value; if (ExpansionKitApi.CustomCategoryUIs.TryGetValue(categoryId, out var specificPrefab)) { Object.Instantiate(specificPrefab, settingsContentRoot, false); continue; } var prefsToPopulate = prefDict.Where(it => !it.Value.Hidden).ToList(); if (prefsToPopulate.Count == 0) { continue; } var categoryUi = Object.Instantiate(categoryPrefab, settingsContentRoot, false); categoryUi.GetComponentInChildren <Text>().text = MelonPrefs.GetCategoryDisplayName(categoryId); var categoryUiContent = categoryUi.transform.Find("CategoryEntries"); var expandButtonTransform = categoryUi.transform.Find("ExpandButton"); var expandButton = expandButtonTransform.GetComponent <Button>(); var expandButtonText = expandButtonTransform.GetComponentInChildren <Text>(); void SetExpanded(bool expanded) { expandButtonText.text = expanded ? "^" : "V"; categoryUiContent.gameObject.SetActive(expanded); } expandButton.onClick.AddListener(new Action(() => { SetExpanded(ourCategoryExpanded[categoryId] = !ourCategoryExpanded[categoryId]); })); if (!ourCategoryExpanded.ContainsKey(categoryId)) { ourCategoryExpanded[categoryId] = !ExpansionKitSettings.IsCategoriesStartCollapsed(); } SetExpanded(ourCategoryExpanded[categoryId]); foreach (var valuePair in prefsToPopulate) { var prefId = valuePair.Key; var prefDesc = valuePair.Value; switch (prefDesc.Type) { case MelonPrefs.MelonPreferenceType.STRING: { var textSetting = Object.Instantiate(textPrefab, categoryUiContent, false); textSetting.GetComponentInChildren <Text>().text = prefDesc.DisplayText ?? prefId; var textField = textSetting.GetComponentInChildren <InputField>(); textField.text = MelonPrefs.GetString(categoryId, prefId); textField.onValueChanged.AddListener(new Action <string>(value => { prefDesc.ValueEdited = value; })); textSetting.GetComponentInChildren <Button>().onClick.AddListener(new Action(() => { BuiltinUiUtils.ShowInputPopup(prefDesc.DisplayText ?? prefId, textField.text, InputField.InputType.Standard, false, "Done", (result, _, __) => prefDesc.ValueEdited = textField.text = result); })); break; } case MelonPrefs.MelonPreferenceType.BOOL: var boolSetting = Object.Instantiate(boolPrefab, categoryUiContent, false); boolSetting.GetComponentInChildren <Text>().text = prefDesc.DisplayText ?? prefId; var mainToggle = boolSetting.transform.Find("Toggle").GetComponent <Toggle>(); mainToggle.isOn = MelonPrefs.GetBool(categoryId, prefId); mainToggle.onValueChanged.AddListener(new Action <bool>( isSet => { prefDesc.ValueEdited = isSet.ToString().ToLowerInvariant(); })); var pinToggle = boolSetting.transform.Find("PinToggle").GetComponent <Toggle>(); pinToggle.isOn = pinnedSettings.Contains((categoryId, prefId)); pinToggle.onValueChanged.AddListener(new Action <bool>(isSet => { if (isSet) { ExpansionKitSettings.PinPref(categoryId, prefId); } else { ExpansionKitSettings.UnpinPref(categoryId, prefId); } })); break; case MelonPrefs.MelonPreferenceType.INT: case MelonPrefs.MelonPreferenceType.FLOAT: { var textSetting = Object.Instantiate(textPrefab, categoryUiContent, false); textSetting.GetComponentInChildren <Text>().text = prefDesc.DisplayText ?? prefId; var textField = textSetting.GetComponentInChildren <InputField>(); textField.text = MelonPrefs.GetString(categoryId, prefId); textField.contentType = prefDesc.Type == MelonPrefs.MelonPreferenceType.INT ? InputField.ContentType.IntegerNumber : InputField.ContentType.DecimalNumber; textField.onValueChanged.AddListener(new Action <string>(value => { prefDesc.ValueEdited = value; })); textSetting.GetComponentInChildren <Button>().onClick.AddListener(new Action(() => { BuiltinUiUtils.ShowInputPopup(prefDesc.DisplayText ?? prefId, textField.text, InputField.InputType.Standard, prefDesc.Type == MelonPrefs.MelonPreferenceType.INT, "Done", (result, _, __) => prefDesc.ValueEdited = textField.text = result); })); break; } default: MelonLogger.LogError($"Unknown mod pref type {prefDesc.Type}"); break; } } } }