public static void ToggleMod(string GUID, bool enable) { if (modDetails.TryGetValue(GUID, out ModDetails details)) { if (CanToggleMod(GUID, out bool curEnabled)) { if (curEnabled != enable) { if (details.frogtownModDetails != null) { details.enabled = enable; details.afterToggle?.Invoke(details); details.frogtownModDetails.afterToggle?.Invoke(); var config = FrogtownShared.GetConfig(); config.Wrap("mods", GUID, "", "true").Value = enable.ToString(); config.Save(); } else { SetNonFrogtownModStatus(details, enable); } } } } }
internal void SaveSettings() { var config = FrogtownShared.GetConfig(); config.Wrap("ui", "scale", "", "1").Value = uiSettings.scale.ToString(); config.Wrap("ui", "showonstart", "", "true").Value = uiSettings.showOnStart.ToString(); config.Save(); }
private void LoadSettings() { var config = FrogtownShared.GetConfig(); string raw = config.Wrap("ui", "scale", "", "1").Value; if (!float.TryParse(raw, out uiSettings.scale)) { uiSettings.scale = 1f; } uiSettings.scale = Mathf.Clamp(uiSettings.scale, 0.5f, 2f); raw = config.Wrap("ui", "showonstart", "", "true").Value; bool.TryParse(raw, out uiSettings.showOnStart); }
private static void FindActiveMods() { var config = FrogtownShared.GetConfig(); var allModDetails = (from a in AppDomain.CurrentDomain.GetAssemblies() from t in a.GetTypes() let attributeList = t.GetCustomAttributes(typeof(BepInPlugin), true).Take(1) where attributeList != null && attributeList.Count() > 0 let attribute = attributeList.First() as BepInPlugin select new ModDetails(attribute, t.Assembly.Location)).ToArray(); foreach (var info in allModDetails) { modDetails.Add(info.GUID, info); info.afterToggle += AfterModToggle; if (frogtownDetails.TryGetValue(info.GUID, out FrogtownModDetails frogDetails)) { info.frogtownModDetails = frogDetails; frogDetails.modDetails = info; string raw = config.Wrap("mods", info.GUID, "", "True").Value; bool shouldBeActive = raw.ToLower() == "true"; if (shouldBeActive) { ToggleMod(info.GUID, true); } } else { //Do not call ToggleMod because it will try to move DLLs around and shit like that. //This is intializing the enabled properties and active mod count to reflect the actual //state of what is loading. info.enabled = true; info.initialEnabled = true; info.afterToggle?.Invoke(info); } } }
internal static IEnumerator CheckForUpdates() { var config = FrogtownShared.GetConfig(); foreach (string GUID in modDetails.Keys) { if (modDetails.TryGetValue(GUID, out ModDetails details)) { if (details.frogtownModDetails != null) { details.newVersionLoading = true; } } } bool anyError = false; foreach (string GUID in modDetails.Keys) { if (modDetails.TryGetValue(GUID, out ModDetails details)) { if (details.frogtownModDetails != null) { string lastUpdateInst = config.Wrap("modupdates", "lastcheck-" + GUID, "", "0").Value; if (long.TryParse(lastUpdateInst, out long updateInst)) { DateTime lastUpdate = new DateTime(updateInst); if (lastUpdate.AddDays(0.5) > DateTime.Now) { string newV = config.Wrap("modupdates", "newestversion-" + GUID, "", "0").Value; if (newV.CompareTo(details.version) > 0) { details.frogtownModDetails.newVersion = newV; } FrogtownShared.Log("FrogShared", LogLevel.Info, "Loaded new version of " + GUID + " from cache."); details.newVersionLoading = false; continue; } } if (anyError) { details.newVersionLoading = false; continue; } string url = "https://api.github.com/repos/" + details.frogtownModDetails.githubAuthor + "/" + details.frogtownModDetails.githubRepo + "/releases"; FrogtownShared.Log("FrogShared", LogLevel.Info, "Requesting " + url); var req = UnityWebRequest.Get(url).SendWebRequest(); while (!req.isDone) { yield return(new WaitForEndOfFrame()); } details.newVersionLoading = false; if (req.webRequest.isHttpError || req.webRequest.isNetworkError) { FrogtownShared.Log("FrogShared", LogLevel.Error, "Error loading releases from " + url); anyError = true; } else { try { string text = req.webRequest.downloadHandler.text; string topRelease = ""; int ix = 0; while ((ix = text.IndexOf("\"tag_name\": \"")) >= 0) { text = text.Substring(ix + "\"tag_name\": \"".Length, text.Length - ix - "\"tag_name\": \"".Length); string version = text.Substring(0, text.IndexOf("\"")); if (version.CompareTo(topRelease) > 0 && version.CompareTo(details.version) > 0) { topRelease = version; } } details.frogtownModDetails.newVersion = topRelease; } catch (Exception e) { FrogtownShared.Log("FrogShared", LogLevel.Info, "Error parsing JSON "); FrogtownShared.Log("FrogShared", LogLevel.Info, e.Message + " " + e.StackTrace); } config.Wrap("modupdates", "lastcheck-" + GUID, "", "0").Value = DateTime.Now.Ticks.ToString(); config.Wrap("modupdates", "newestversion-" + GUID, "", "0").Value = details.frogtownModDetails.newVersion; } } } } config.Save(); }