private static void CorrectLoadOrderBeforeRestart() { var allMods = LoadedModManager.LoadedMods.ToList(); // Deactivate all mods foreach (var mod in allMods) { ModsConfig.SetActive(mod.name, false); } // Activate core first ModsConfig.SetActive("Core", true); if (cclModIndex != -1) { // Activate CCL second ModsConfig.SetActive(Controller.Data.UnityObjectName, true); } // Activate everything else in the same order foreach (var mod in allMods) { if ( (mod.name != "Core") && (mod.name != Controller.Data.UnityObjectName) ) { ModsConfig.SetActive(mod.name, true); } } // Now save the config ModsConfig.Save(); }
private static void ExposeData(string filepath, bool useUndoAction = false) { try { if (CurrentMode == Mode.Saving) { Data = new ModsConfigData { buildNumber = RimWorld.VersionControl.CurrentBuild, activeMods = ModsConfigHandler.GetActiveMods() }; DirectXmlSaver.SaveDataObject((object)Data, filepath); } else if (CurrentMode == Mode.Loading) { List <string> current = new List <string>(); Data = ReadModList(filepath); ModsConfigHandler.ClearLoadedMods(true); foreach (string modID in Data.activeMods) { ModsConfig.SetActive(modID, true); } } } catch (Exception e) { Main.Log.ReportException(e); ModsConfigHandler.ClearLoadedMods(); } }
private static void CorrectLoadOrderBeforeRestart() { var allMods = LoadedModManager.RunningMods.ToList(); // Deactivate all mods foreach (var mod in allMods) { ModsConfig.SetActive(mod.Name, false); } // Activate core first ModsConfig.SetActive(ModContentPack.CoreModIdentifier, true); if (cclModIndex != -1) { // Activate CCL second ModsConfig.SetActive(Controller.Data.cclModIdentifier, true); } // Activate everything else in the same order foreach (var mod in allMods) { if ( (mod.Name != ModContentPack.CoreModIdentifier) && (mod.Name != Controller.Data.cclModIdentifier) ) { ModsConfig.SetActive(mod.Name, true); } } // Now save the config ModsConfig.Save(); }
public static void DeactivateMod() { _isDeactivating = true; ModsConfig.SetActive(Mod.ContentPack.Identifier, false); var runningMods = PrivateAccess.Verse_LoadedModManager_RunningMods(); runningMods.Remove(Mod.ContentPack); var addonMods = new StringBuilder(); foreach (var mod in AddonManager.Mods) { addonMods.AppendLine(mod.Name); ModsConfig.SetActive(mod.Identifier, false); runningMods.Remove(mod); } ModsConfig.Save(); if (Find.WorldObjects.Contains(Instance)) { Find.WorldObjects.Remove(Instance); } const string saveName = "PawnRules_Removed"; GameDataSaveLoader.SaveGame(saveName); var message = addonMods.Length > 0 ? Lang.Get("Button.RemoveModAndAddonsComplete", saveName.Bold(), addonMods.ToString()) : Lang.Get("Button.RemoveModComplete", saveName.Bold()); Find.WindowStack.Add(new Dialog_Alert(message, Dialog_Alert.Buttons.Ok, GenCommandLine.Restart)); }
/// <summary> /// Clears the current active mods /// </summary> /// <param name="removeCore">Set to true to remove core [Optional](Default:false)</param> internal static void ClearLoadedMods(bool removeCore = false) { ModsConfig.Reset(); if (removeCore) { ModsConfig.SetActive(ModContentPack.CoreModIdentifier, false); } }
/// <summary> /// Set the current active mods /// </summary> /// <param name="modsToActivate">The mods to set as active</param> internal static void SetActiveMods(List <string> modsToActivate) { ClearLoadedMods(true); foreach (string modID in modsToActivate) { ModsConfig.SetActive(modID, true); } ModsConfig.Save(); }
public override void PreClose() { base.PreClose(); Prefs.Save(); if (Prefs.SimulateNotOwningRoyalty && !simulateNotOwningRoyaltyWhenOpened && ModsConfig.RoyaltyActive) { ModsConfig.SetActive(ModContentPack.RoyaltyModPackageId, active: false); ModsConfig.RestartFromChangedMods(); } }
static void WorkshopItems_Notify_Subscribed_Postfix(PublishedFileId_t pfid) { var longID = pfid.m_PublishedFileId; if (subscribingMods.Contains(longID) == false) { return; } subscribingMods.Remove(longID); LongEventHandler.ExecuteWhenFinished(() => { var mod = ModLister.AllInstalledMods.FirstOrDefault(meta => meta.GetPublishedFileId().m_PublishedFileId == longID); if (mod == null) { return; } ModsConfig.SetActive(mod, true); ModsConfig.Save(); Find.WindowStack.Add(new MiniDialog(mod.Name + " added")); }); }
/// <summary> /// Sets a mods active state /// </summary> /// <param name="modIdentifier">The mod meta data for the mod</param> /// <param name="active">The state to set</param> public static void SetActive(ModMetaData modIdentifier, bool active) { ModsConfig.SetActive(modIdentifier, active); ModsConfig.DeactivateNotInstalledMods(); }
static void PromotionPart(Rect mainRect, float leftColumn, float rightColumn, ModMetaData mod, Page_ModsConfig page) { var mainModID = mod.GetPublishedFileId(); Text.Font = GameFont.Tiny; var headerHeight = 30f; var headerRect = new Rect(leftColumn + 10f, -4f, rightColumn - 20f, headerHeight); Text.Anchor = TextAnchor.UpperCenter; Widgets.Label(headerRect, "Mods of " + mod.Author.Replace("Andreas Pardeike", "Brrainz") + ":".Truncate(headerRect.width, null)); Text.Anchor = TextAnchor.UpperLeft; var outRect = new Rect(leftColumn + 10f, headerHeight - 4f, rightColumn, mainRect.height - (headerHeight - 4f)); var width = outRect.width - 20f; var previewHeight = width * 319f / 588f; var promoMods = CrossPromotion.promotionMods.ToArray().Where(m => m.m_nPublishedFileId != mainModID); var workshopMods = WorkshopItems.AllSubscribedItems.Select(wi => wi.PublishedFileId.m_PublishedFileId).ToList(); var activeMods = ModLister.AllInstalledMods.Where(meta => meta.Active).Select(meta => meta.GetPublishedFileId().m_PublishedFileId).ToList(); var height = 0f; foreach (var promoMod in promoMods) { var myModID = promoMod.m_nPublishedFileId.m_PublishedFileId; var isLocalFile = ModLister.AllInstalledMods.Any(meta => meta.GetPublishedFileId().m_PublishedFileId == myModID && meta.Source == ContentSource.LocalFolder); var isSubbed = workshopMods.Contains(myModID); CrossPromotion.allVoteStati.TryGetValue(myModID, out var voteStatus); if (height > 0) { height += 10f; } var preview = CrossPromotion.PreviewForMod(promoMod.m_nPublishedFileId.m_PublishedFileId); if (preview != null) { height += width * preview.height / preview.width + 2f; if (isLocalFile == false && (isSubbed == false || (voteStatus == false))) { height += 16f; } } } Widgets.BeginScrollView(outRect, ref rightScroll, new Rect(0f, 0f, width, height), true); var firstTime = true; var modRect = new Rect(0f, 0f, width, 0f); foreach (var promoMod in promoMods) { var myModID = promoMod.m_nPublishedFileId.m_PublishedFileId; var isLocalFile = ModLister.AllInstalledMods.Any(meta => meta.GetPublishedFileId().m_PublishedFileId == myModID && meta.Source == ContentSource.LocalFolder); var isSubbed = workshopMods.Contains(myModID); var isActive = activeMods.Contains(myModID); CrossPromotion.allVoteStati.TryGetValue(myModID, out var voteStatus); if (firstTime == false) { modRect.y += 10f; } var preview = CrossPromotion.PreviewForMod(promoMod.m_nPublishedFileId.m_PublishedFileId); if (preview != null) { modRect.height = width * preview.height / preview.width; GUI.DrawTexture(modRect, preview, ScaleMode.ScaleToFit); var checkRect = modRect; checkRect.xMax -= 4f; checkRect.yMax -= 4f; checkRect.xMin = checkRect.xMax - 18f; checkRect.yMin = checkRect.yMax - 18f; var active = isActive; GUI.DrawTexture(checkRect.ContractedBy(-2f), CheckboxBackground); Widgets.Checkbox(checkRect.xMin, checkRect.yMin, ref active, checkRect.width); if (active != isActive) { var clickedMod = ModLister.AllInstalledMods.FirstOrDefault(meta => meta.GetPublishedFileId().m_PublishedFileId == myModID); if (clickedMod != null) { ModsConfig.SetActive(clickedMod, active); ModsConfig.Save(); } } if (Mouse.IsOver(checkRect) == false) { Widgets.DrawHighlightIfMouseover(modRect); if (Widgets.ButtonInvisible(modRect, true)) { var description = promoMod.m_rgchTitle + "\n\n" + promoMod.m_rgchDescription; var actionButton = isSubbed || isLocalFile ? "Select" : "Subscribe"; void actionButtonAction() { if (isSubbed || isLocalFile) { var orderedMods = (IEnumerable <ModMetaData>)AccessTools.Method(typeof(Page_ModsConfig), "ModsInListOrder").Invoke(page, new object[0]); page.selectedMod = orderedMods.FirstOrDefault(meta => meta.GetPublishedFileId().m_PublishedFileId == myModID); var modsBefore = orderedMods.FirstIndexOf(m => m == page.selectedMod); if (modsBefore >= 0) { Traverse.Create(page).Field("modListScrollPosition").SetValue(new Vector2(0f, modsBefore * 26f + 4f)); } } else { new Thread(() => { CrossPromotion.subscribingMods.Add(myModID); SteamUGC.SubscribeItem(new PublishedFileId_t(myModID)); }).Start(); } } var infoWindow = new Dialog_MessageBox(description, "Close".Translate(), null, actionButton, actionButtonAction, null, false, null, null); Find.WindowStack.Add(infoWindow); } } modRect.y += modRect.height + 2f; modRect.height = 0f; if (isLocalFile == false) { if (isSubbed == false) { modRect.height = 16f; if (CrossPromotion.subscribingMods.Contains(myModID)) { Widgets.Label(modRect, WaitingString); } else if (Widgets.ButtonText(modRect, "Subscribe", false, true, true)) { new Thread(() => { CrossPromotion.subscribingMods.Add(myModID); SteamUGC.SubscribeItem(new PublishedFileId_t(myModID)); }).Start(); } } else if (voteStatus != null && voteStatus == false) { modRect.height = 16f; if (Widgets.ButtonText(modRect, "Like", false, true, true)) { new Thread(() => { CrossPromotion.allVoteStati[myModID] = true; SteamUGC.SetUserItemVote(new PublishedFileId_t(myModID), true); }).Start(); } } } modRect.y += modRect.height; } firstTime = false; } Widgets.EndScrollView(); }