Example #1
0
        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();
        }
Example #4
0
        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();
 }
Example #7
0
 public override void PreClose()
 {
     base.PreClose();
     Prefs.Save();
     if (Prefs.SimulateNotOwningRoyalty && !simulateNotOwningRoyaltyWhenOpened && ModsConfig.RoyaltyActive)
     {
         ModsConfig.SetActive(ModContentPack.RoyaltyModPackageId, active: false);
         ModsConfig.RestartFromChangedMods();
     }
 }
Example #8
0
        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"));
            });
        }
Example #9
0
 /// <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();
 }
Example #10
0
        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();
        }