Пример #1
0
        public static bool CreateBuildFile(EModType modtype, ref List <ArchiveCommandStruct> archive_commands, string tempFolder, string sourceFolder, string bigFileName)
        {
            if (!Directory.Exists(tempFolder))
            {
                ArchiveErrorMessage = string.Format("Can't access TEMP folder: '{0}'", tempFolder);
                return(false);
            }
            if (!Directory.Exists(sourceFolder))
            {
                ArchiveErrorMessage = string.Format("Can't access MOD folder: '{0}'", sourceFolder);
                return(false);
            }
            GetFileList(sourceFolder);
            if (DirList.Count == 0)
            {
                ArchiveErrorMessage = string.Format("No files were found in MOD folder: '{0}'", sourceFolder);
                return(false);
            }
            string configFile = string.Format("{0}\\config.txt", sourceFolder);

            for (int k = 0; k < DirList.Count; k++)
            {
                if (string.Equals(DirList[k], configFile, StringComparison.OrdinalIgnoreCase))
                {
                    DirList.RemoveAt(k);
                    break;
                }
            }
            string jpgFile = string.Format("{0}\\preview.jpg", sourceFolder);

            for (int m = 0; m < DirList.Count; m++)
            {
                if (string.Equals(DirList[m], jpgFile, StringComparison.OrdinalIgnoreCase))
                {
                    DirList.RemoveAt(m);
                    break;
                }
            }
            string pngFile = string.Format("{0}\\preview.png", sourceFolder);

            for (int i2 = 0; i2 < DirList.Count; i2++)
            {
                if (string.Equals(DirList[i2], pngFile, StringComparison.OrdinalIgnoreCase))
                {
                    DirList.RemoveAt(i2);
                    break;
                }
            }
            if (modtype == EModType.MODTYPE_Mod)
            {
                string buildfileName4 = tempFolder + "\\buildfile.txt";
                try
                {
                    using (StreamWriter streamWriter = new StreamWriter(buildfileName4))
                    {
                        streamWriter.WriteLine("Archive name=\"{0}\"", bigFileName);
                        streamWriter.WriteLine("TOCStart name=\"TOC{0}\" alias=\"Data\" relativeroot=\"\"", bigFileName);
                        streamWriter.WriteLine("FileSettingsStart defcompression=\"1\"");
                        streamWriter.WriteLine("Override wildcard=\"*.*\" minsize=\"-1\" maxsize=\"100\" ct=\"0\"");
                        streamWriter.WriteLine("Override wildcard=\"*.mp3\" minsize=\"-1\" maxsize=\"-1\" ct=\"0\"");
                        streamWriter.WriteLine("Override wildcard=\"*.wav\" minsize=\"-1\" maxsize=\"-1\" ct=\"0\"");
                        streamWriter.WriteLine("Override wildcard=\"*.jpg\" minsize=\"-1\" maxsize=\"-1\" ct=\"0\"");
                        streamWriter.WriteLine("Override wildcard=\"*.lua\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.fda\" minsize=\"-1\" maxsize=\"-1\" ct=\"0\"");
                        streamWriter.WriteLine("Override wildcard=\"*.txt\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.ship\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.resource\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.pebble\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.level\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.wepn\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.subs\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.miss\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.events\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.madstate\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.script\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.ti\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.st\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.vp\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("Override wildcard=\"*.wf\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter.WriteLine("SkipFile wildcard=\"Keeper.txt\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter.WriteLine("SkipFile wildcard=\"*.big\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter.WriteLine("SkipFile wildcard=\"*_.*\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter.WriteLine("FileSettingsEnd");
                        for (int n = 0; n < DirList.Count; n++)
                        {
                            streamWriter.WriteLine("{0}", DirList[n]);
                        }
                        streamWriter.WriteLine("TOCEnd");
                    }
                    ArchiveCommandStruct command_struct = default(ArchiveCommandStruct);
                    command_struct.arg_string    = string.Format("-a \"{0}\\{1}.big\" -c \"{2}\" -r \"{3}\" -v", tempFolder, bigFileName, buildfileName4, sourceFolder);
                    command_struct.buildfilename = buildfileName4;
                    archive_commands.Add(command_struct);
                }
                catch (Exception ex4)
                {
                    ArchiveErrorMessage = string.Format("Error writing to 'buildfile.txt' for main TOC in the TEMP folder! {0}", ex4.Message);
                    return(false);
                }
            }
            if (modtype == EModType.MODTYPE_Mod || modtype == EModType.MODTYPE_Locale)
            {
                for (int locale_index = 0; locale_index < LocaleList.Count; locale_index++)
                {
                    string buildfileName = string.Format("{0}\\buildfile_locale_{1}.txt", tempFolder, locale_index);
                    try
                    {
                        using (StreamWriter sw = new StreamWriter(buildfileName))
                        {
                            sw.WriteLine("Archive name=\"{0}{1}\"", bigFileName, LocaleList[locale_index].LocaleLanguage);
                            sw.WriteLine("TOCStart name=\"TOC{0}{1}\" alias=\"Locale\" relativeroot=\"Locale\\{2}\"", bigFileName, LocaleList[locale_index].LocaleLanguage, LocaleList[locale_index].LocaleLanguage);
                            sw.WriteLine("FileSettingsStart defcompression=\"1\"");
                            sw.WriteLine("Override wildcard=\"*.*\" minsize=\"-1\" maxsize=\"100\" ct=\"0\"");
                            sw.WriteLine("Override wildcard=\"*.lua\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                            sw.WriteLine("Override wildcard=\"*.dat\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                            sw.WriteLine("Override wildcard=\"*.ucs\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                            sw.WriteLine("SkipFile wildcard=\"*.mp3\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.wav\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.jpg\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.fda\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.ship\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.resource\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.pebble\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.level\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.wepn\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.subs\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.miss\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.events\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.madstate\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.script\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*.big\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("SkipFile wildcard=\"*_.*\" minsize=\"-1\" maxsize=\"-1\"");
                            sw.WriteLine("FileSettingsEnd");
                            for (int i = 0; i < LocaleList[locale_index].LocaleFileList.Count; i++)
                            {
                                sw.WriteLine("{0}", LocaleList[locale_index].LocaleFileList[i]);
                            }
                            sw.WriteLine("TOCEnd");
                        }
                        ArchiveCommandStruct command_struct2 = default(ArchiveCommandStruct);
                        command_struct2.arg_string    = string.Format("-a \"{0}\\{1}.big\" -c \"{2}\" -r \"{3}\" -v", tempFolder, LocaleList[locale_index].LocaleLanguage, buildfileName, sourceFolder);
                        command_struct2.buildfilename = buildfileName;
                        archive_commands.Add(command_struct2);
                    }
                    catch (Exception ex)
                    {
                        ArchiveErrorMessage = string.Format("Error writing to 'buildfile.txt' for Locale TOC in the TEMP folder! {0}", ex.Message);
                        return(false);
                    }
                }
            }
            if (modtype == EModType.MODTYPE_Cursors)
            {
                string buildfileName3 = string.Format("{0}\\buildfile_cursors.txt", tempFolder);
                try
                {
                    using (StreamWriter streamWriter2 = new StreamWriter(buildfileName3))
                    {
                        streamWriter2.WriteLine("Archive name=\"{0}\"", bigFileName);
                        streamWriter2.WriteLine("TOCStart name=\"TOC{0}\" alias=\"Data\" relativeroot=\"\"", bigFileName);
                        streamWriter2.WriteLine("FileSettingsStart defcompression=\"1\"");
                        streamWriter2.WriteLine("Override wildcard=\"*.*\" minsize=\"-1\" maxsize=\"100\" ct=\"0\"");
                        streamWriter2.WriteLine("Override wildcard=\"*.lua\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter2.WriteLine("Override wildcard=\"*.dds\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter2.WriteLine("Override wildcard=\"*.anim\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.mp3\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.wav\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.jpg\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.fda\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.ship\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.resource\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.pebble\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.level\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.wepn\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.subs\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.miss\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.events\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.madstate\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.script\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*.big\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("SkipFile wildcard=\"*_.*\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter2.WriteLine("FileSettingsEnd");
                        for (int l = 0; l < CursorsList.Count; l++)
                        {
                            streamWriter2.WriteLine("{0}", CursorsList[l]);
                        }
                        streamWriter2.WriteLine("TOCEnd");
                    }
                    ArchiveCommandStruct command_struct3 = default(ArchiveCommandStruct);
                    command_struct3.arg_string    = string.Format("-a \"{0}\\{1}.big\" -c \"{2}\" -r \"{3}\" -v", tempFolder, bigFileName, buildfileName3, sourceFolder);
                    command_struct3.buildfilename = buildfileName3;
                    archive_commands.Add(command_struct3);
                }
                catch (Exception ex3)
                {
                    ArchiveErrorMessage = string.Format("Error writing to 'buildfile.txt' for Cursors TOC in the TEMP folder! {0}", ex3.Message);
                    return(false);
                }
            }
            if (modtype == EModType.MODTYPE_Badges)
            {
                string buildfileName2 = string.Format("{0}\\buildfile_badges.txt", tempFolder);
                try
                {
                    using (StreamWriter streamWriter3 = new StreamWriter(buildfileName2))
                    {
                        streamWriter3.WriteLine("Archive name=\"{0}\"", bigFileName);
                        streamWriter3.WriteLine("TOCStart name=\"TOC{0}\" alias=\"Badges\" relativeroot=\"\"", bigFileName);
                        streamWriter3.WriteLine("FileSettingsStart defcompression=\"1\"");
                        streamWriter3.WriteLine("Override wildcard=\"*.*\" minsize=\"-1\" maxsize=\"100\" ct=\"0\"");
                        streamWriter3.WriteLine("Override wildcard=\"*.tga\" minsize=\"-1\" maxsize=\"-1\" ct=\"1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.mp3\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.wav\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.jpg\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.fda\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.ship\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.resource\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.pebble\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.level\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.wepn\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.subs\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.miss\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.events\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.madstate\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.script\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.lua\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.dds\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.anim\" minsize=\"-1\" maxsize=\"-1\" ct=\"2\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*.big\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("SkipFile wildcard=\"*_.*\" minsize=\"-1\" maxsize=\"-1\"");
                        streamWriter3.WriteLine("FileSettingsEnd");
                        for (int j = 0; j < BadgesList.Count; j++)
                        {
                            streamWriter3.WriteLine("{0}", BadgesList[j]);
                        }
                        streamWriter3.WriteLine("TOCEnd");
                    }
                    ArchiveCommandStruct command_struct4 = default(ArchiveCommandStruct);
                    command_struct4.arg_string    = string.Format("-a \"{0}\\{1}.big\" -c \"{2}\" -r \"{3}\" -v", tempFolder, bigFileName, buildfileName2, sourceFolder);
                    command_struct4.buildfilename = buildfileName2;
                    archive_commands.Add(command_struct4);
                }
                catch (Exception ex2)
                {
                    ArchiveErrorMessage = string.Format("Error writing to 'buildfile.txt' for Badges TOC in the TEMP folder! {0}", ex2.Message);
                    return(false);
                }
            }
            return(true);
        }
Пример #2
0
        private static bool ValidateConfigFile(string filename)
        {
            bool bHasTitle       = false;
            bool bHasTags        = false;
            bool bHasGameType    = false;
            bool bHasModType     = false;
            bool bHasBigFilename = false;
            bool bHasWorkshopID  = false;
            bool bHasDescription = false;
            bool bAreFollowingLinesDescription = false;

            title       = "";
            tags        = "";
            description = "";
            line_number = 0;
            try
            {
                File.SetAttributes(filename, File.GetAttributes(filename) & ~FileAttributes.ReadOnly);
            }
            catch
            {
                ConfigValidationErrorMessage = "Could not set the config.txt file to NOT be read-only.  Verify that you have permission to modify the config.txt file.";
                return(false);
            }
            try
            {
                StreamReader sr = File.OpenText(filename);
                string       input4;
                while ((input4 = sr.ReadLine()) != null)
                {
                    line_number++;
                    string input_trim = input4.Trim();
                    if (!(input4 == "") && !(input_trim.Substring(0, 2) == "//"))
                    {
                        string input_lower = input_trim.ToLower();
                        if (bAreFollowingLinesDescription)
                        {
                            description     = description + input4 + '\n';
                            bHasDescription = true;
                        }
                        else if (input_lower.StartsWith("title:"))
                        {
                            if (bHasTitle)
                            {
                                ConfigValidationErrorMessage = "Title appears more than once.  You should only provide a single title for the Workshop item.";
                                sr.Close();
                                return(false);
                            }
                            input4 = input4.Trim();
                            title  = input4.Substring(6).Trim();
                            if (title.Length > 128)
                            {
                                title = title.Substring(0, 128);
                            }
                            if (title != "")
                            {
                                bHasTitle = true;
                            }
                        }
                        else if (input_lower.StartsWith("tags:"))
                        {
                            if (bHasTags)
                            {
                                ConfigValidationErrorMessage = "Tags appears more than once.  You should only provide a single set of tags for the Workshop item.";
                                sr.Close();
                                return(false);
                            }
                            input4 = input4.Trim();
                            tags   = input4.Substring(5).Trim();
                            if (tags != "")
                            {
                                bHasTags = true;
                            }
                        }
                        else if (input_lower.StartsWith("gametype:"))
                        {
                            if (bHasGameType)
                            {
                                ConfigValidationErrorMessage = "GameType appears more than once.  You should only provide a single game type for the Workshop item.";
                                sr.Close();
                                return(false);
                            }
                            string        gametype = input_lower.Substring(9).Trim().ToLower();
                            List <string> options  = GetListOfOptions(gametype);
                            for (int i = 0; i < options.Count; i++)
                            {
                                if (options[i] != "hw1classic" && options[i] != "hw2classic" && options[i] != "homeworldrm")
                                {
                                    ConfigValidationErrorMessage = "Invalid GameType.  GameType must be any of 'HW1Classic', 'HW2Classic', or 'HomeworldRM' (without the single quotes) separated by spaces.";
                                    sr.Close();
                                    return(false);
                                }
                            }
                            if (options.Count > 0)
                            {
                                bHasGameType = true;
                            }
                        }
                        else if (input_lower.StartsWith("modtype:"))
                        {
                            if (bHasModType)
                            {
                                ConfigValidationErrorMessage = "ModType appears more than once.  You should only provide a single mod type for the Workshop item.";
                                sr.Close();
                                return(false);
                            }
                            string modtype = input_lower.Substring(9).Trim().ToLower();
                            if (modtype != "mod" && modtype != "badges" && modtype != "locale" && modtype != "cursors")
                            {
                                ConfigValidationErrorMessage = "Invalid ModType.  ModType must be one of 'MOD', 'Badges', 'Locale' or 'Cursors' (without the single quotes).";
                                sr.Close();
                                return(false);
                            }
                            ModType = EModType.MODTYPE_Unknown;
                            if (modtype == "mod")
                            {
                                ModType = EModType.MODTYPE_Mod;
                            }
                            else if (modtype == "locale")
                            {
                                ModType = EModType.MODTYPE_Locale;
                            }
                            else if (modtype == "badges")
                            {
                                ModType = EModType.MODTYPE_Badges;
                            }
                            else if (modtype == "cursors")
                            {
                                ModType = EModType.MODTYPE_Cursors;
                            }
                            bHasModType = true;
                        }
                        else if (input_lower.StartsWith("bigfilename:"))
                        {
                            if (bHasBigFilename)
                            {
                                ConfigValidationErrorMessage = "BigFilename appears more than once.  You should only provide a single .big file name for the Workshop item.";
                                sr.Close();
                                return(false);
                            }
                            input4      = input4.Trim();
                            bigfilename = input4.Substring(12).Trim().Replace(" ", string.Empty);
                            string bigfilename_lower = bigfilename.ToLower();
                            if (bigfilename_lower == "mymodbigfile")
                            {
                                ConfigValidationErrorMessage = "BigFilename not changed (still using the default of 'MyModBigFile').  You should change BigFilename to be specific to your MOD.";
                                sr.Close();
                                return(false);
                            }
                            if (bigfilename_lower.EndsWith(".big"))
                            {
                                bigfilename = bigfilename.Substring(0, bigfilename.Length - 4);
                            }
                            if (bigfilename != "")
                            {
                                bHasBigFilename = true;
                            }
                        }
                        else if (input_lower.StartsWith("workshopid:"))
                        {
                            if (bHasWorkshopID)
                            {
                                ConfigValidationErrorMessage = "WorkshopID appears more than once.  There should only be a single WorkshopID line in the config file.";
                                sr.Close();
                                return(false);
                            }
                            string workshopId_string = input_lower.Substring(11).Trim();
                            if (!ulong.TryParse(workshopId_string, out workshopId))
                            {
                                ConfigValidationErrorMessage = "WorkshopID value is not a number.  The value for WorkshopID should be the ID number of the Workshop item you created or 0 if you haven't created the Workshop item yet.";
                                sr.Close();
                                return(false);
                            }
                            bHasWorkshopID = true;
                        }
                        else if (input_lower.StartsWith("description:"))
                        {
                            bAreFollowingLinesDescription = true;
                        }
                        else if (!bAreFollowingLinesDescription)
                        {
                            ConfigValidationErrorMessage = string.Format("Unrecognized input: {0}", input_trim);
                            sr.Close();
                            return(false);
                        }
                    }
                }
                sr.Close();
            }
            catch (Exception ex)
            {
                ConfigValidationErrorMessage = string.Format("Exeception reading config.txt file ({0})", ex.Message);
                return(false);
            }
            line_number = 0;
            if (!bHasTitle)
            {
                ConfigValidationErrorMessage = "Title not found.  You must provide a title for the Workshop item.";
                return(false);
            }
            if (!bHasTags)
            {
                ConfigValidationErrorMessage = "Tags not found.  You must provide at least one tag for the Workshop item.";
                return(false);
            }
            if (!bHasGameType)
            {
                ConfigValidationErrorMessage = "GameType not found.  You must provide a game type (HW1Classic, HW2Classic, or HomeworldRM).";
                return(false);
            }
            if (!bHasModType)
            {
                ConfigValidationErrorMessage = "ModType not found.  You must provide a ModType type (MOD, Locale, Badges, or Cursors).";
                return(false);
            }
            if (!bHasBigFilename)
            {
                ConfigValidationErrorMessage = "BigFilename not found.  You must provide a name for your .big file for your MOD.";
                return(false);
            }
            if (!bHasWorkshopID)
            {
                ConfigValidationErrorMessage = "WorkshopID not found.  Config.txt file must contain a WorkshopID line.";
                return(false);
            }
            if (!bHasDescription)
            {
                ConfigValidationErrorMessage = "Description not found.  You must provide a description for the Workshop item.";
                return(false);
            }
            return(true);
        }