예제 #1
0
        /// <summary>
        /// Converts this object to the text on disk
        /// </summary>
        /// <returns></returns>
        public string ToCMMText()
        {
            var metaOutLines = new List <string>();

            // Write out MetaCMM Classic
            metaOutLines.Add(ModName);
            metaOutLines.Add(Version);
            metaOutLines.Add(InstalledBy);
            metaOutLines.Add(Guid.NewGuid().ToString()); // This is not used in Mod Manager 6

            // Write MetaCMM Extended
            if (IncompatibleDLC.Any())
            {
                metaOutLines.Add($@"{MetaCMM.PrefixIncompatibleDLC}{string.Join(';', IncompatibleDLC)}");
            }

            if (OptionsSelectedAtInstallTime.Any())
            {
                // I hope this covers all cases. Mods targeting moddesc 6 or lower don't need friendlyname or description, but virtually all of them did
                // as MM4/5 autonaming was ugly
                metaOutLines.Add($@"{MetaCMM.PrefixOptionsSelectedOnInstall}{string.Join(';', OptionsSelectedAtInstallTime)}");
            }

            return(string.Join('\n', metaOutLines));
        }
            private void parseMetaCmm(bool disabled, bool modNamePrefersTPMI)
            {
                DLCFolderNameString = DLCFolderName.TrimStart('x'); //this string is not to show M3L.GetString(M3L.string_disabled)
                var metaFile = Path.Combine(dlcFolderPath, @"_metacmm.txt");

                if (File.Exists(metaFile))
                {
                    InstalledByManagedSolution = true;
                    InstalledBy = M3L.GetString(M3L.string_installedByModManager); //Default value when finding metacmm.
                    MetaCMM mcmm = new MetaCMM(metaFile);
                    if (DLCFolderNameString != ModName && mcmm.ModName != ModName)
                    {
                        DLCFolderNameString += $@" ({ModName})";
                        if (!modNamePrefersTPMI || ModName == null)
                        {
                            ModName = mcmm.ModName;
                        }
                    }

                    ModName = mcmm.ModName;
                    Version = mcmm.Version;
                    InstallerInstanceBuild = mcmm.InstalledBy;
                    if (int.TryParse(InstallerInstanceBuild, out var _))
                    {
                        InstalledBy = M3L.GetString(M3L.string_installedByModManager);
                    }
                    else
                    {
                        InstalledBy = M3L.GetString(M3L.string_interp_installedByX, InstallerInstanceBuild);
                    }

                    // MetaCMM Extended
                    if (mcmm.OptionsSelectedAtInstallTime != null)
                    {
                        ChosenInstallOptions.ReplaceAll(mcmm.OptionsSelectedAtInstallTime);
                    }
                    if (mcmm.IncompatibleDLC != null)
                    {
                        IncompatibleDLC.ReplaceAll(mcmm.IncompatibleDLC);
                    }
                }
                else
                {
                    InstalledBy = M3L.GetString(M3L.string_notInstalledByModManager);
                }
                if (disabled)
                {
                    DLCFolderNameString += @" - " + M3L.GetString(M3L.string_disabled);
                }
            }
예제 #3
0
        public MetaCMM(string metaFile)
        {
            var lines = File.ReadAllLines(metaFile);
            int i     = 0;

            foreach (var line in lines)
            {
                switch (i)
                {
                case 0:
                    ModName = line;
                    break;

                case 1:
                    Version = line;
                    break;

                case 2:
                    InstalledBy = line;
                    break;

                case 3:
                    InstallerInstanceGUID = line;
                    break;

                default:
                    // MetaCMM Extended
                    if (line.StartsWith(PrefixOptionsSelectedOnInstall))
                    {
                        var parsedline = line.Substring(PrefixOptionsSelectedOnInstall.Length);
                        OptionsSelectedAtInstallTime.ReplaceAll(StringStructParser.GetSemicolonSplitList(parsedline));
                    }
                    else if (line.StartsWith(PrefixIncompatibleDLC))
                    {
                        var parsedline = line.Substring(PrefixIncompatibleDLC.Length);
                        IncompatibleDLC.ReplaceAll(StringStructParser.GetSemicolonSplitList(parsedline));
                    }
                    break;
                }
                i++;
            }
        }
예제 #4
0
        public void WriteMetaCMM(string path)
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine(ModName);
            sb.AppendLine(Version);
            sb.AppendLine(InstalledBy ?? App.BuildNumber.ToString());
            sb.AppendLine(InstallerInstanceGUID);

            // MetaCMM Extended
            if (OptionsSelectedAtInstallTime.Any())
            {
                sb.AppendLine($@"{PrefixOptionsSelectedOnInstall}{string.Join(';', OptionsSelectedAtInstallTime)}");
            }
            if (IncompatibleDLC.Any())
            {
                sb.AppendLine($@"{PrefixIncompatibleDLC}{string.Join(';', IncompatibleDLC)}");
            }

            File.WriteAllText(path, sb.ToString());
        }