// This is dumb
 private ScanError FormatToConverter(MonsterFormat format, out IMonsterConverter converter)
 {
     if (format == MonsterFormat.TfsXml)
     {
         converter = new TfsXmlConverter();
     }
     else if (format == MonsterFormat.PyOT)
     {
         converter = new PyOtConverter();
     }
     else if (format == MonsterFormat.TfsRevScriptSys)
     {
         converter = new TfsRevScriptSysConverter();
     }
     else if (format == MonsterFormat.TibiaWiki)
     {
         converter = new TibiaWikiConverter();
     }
     else
     {
         converter = null;
         return(ScanError.InvalidMonsterFormat);
     }
     return(ScanError.Success);
 }
Пример #2
0
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static int Main(string[] args)
        {
            bool showHelp = false;

            string        inputDirectory        = "";
            string        outputDirectory       = "";
            MonsterFormat inputFormat           = MonsterFormat.TfsXml;
            MonsterFormat outputFormat          = MonsterFormat.TfsRevScriptSys;
            bool          mirrorFolderStructure = true;

            var p = new OptionSet()
            {
                "Usage: OTMonsterConverter [OPTIONS]+",
                "",
                "Options:",
                { "i|inputDirectory=", "The directory of monster files to parse.", v => inputDirectory = v },
                { "o|outputDirectory=", "The directory of monster files to parse.", v => outputDirectory = v },
                { "inputFormat=", "The starting monster file format.", (MonsterFormat v) => inputFormat = v },
                { "outputFormat=", "The format to converter the monster files to.", (MonsterFormat v) => outputFormat = v },
                { "m|MirrorFolders", "True to mirror the folder structure of the input directory", v => mirrorFolderStructure = v != null },
                { "h|help", "show this message and exit", v => showHelp = v != null },
            };

            List <string> extra;

            try
            {
                extra = p.Parse(args);
            }
            catch (OptionException e)
            {
                Console.Write("OTMonsterConverter: ");
                Console.WriteLine(e.Message);
                Console.WriteLine("Try `OTMonsterConverter --help' for more information.");
                return(-1);
            }

            if (showHelp)
            {
                p.WriteOptionDescriptions(Console.Out);
                return(0);
            }

            ConsoleWindow consoleWindow = new ConsoleWindow(inputDirectory, outputDirectory, inputFormat, outputFormat, mirrorFolderStructure);

            if (!consoleWindow.ValidateValues())
            {
                return(-2);
            }
            if (!consoleWindow.ScanFiles())
            {
                return(-3);
            }
            else
            {
                return(0);
            }
        }
        public ConsoleWindow(string inputDirectory, string outputDirectory, MonsterFormat inputFormat, MonsterFormat outputFormat, bool mirrorFolderStructure)
        {
            this.inputDirectory        = inputDirectory;
            this.outputDirectory       = outputDirectory;
            this.inputFormat           = inputFormat;
            this.outputFormat          = outputFormat;
            this.mirrorFolderStructure = mirrorFolderStructure;

            fileProcessor = new MonsterFileProcessor();
        }
Пример #4
0
        private async void buttonConvert_Click(object sender, RoutedEventArgs e)
        {
            buttonConvert.IsEnabled = false;
            Cursor = Cursors.Wait;
            textBlockScanStatus.Text          = "scanning...";
            progressBarScan.Visibility        = Visibility.Visible;
            taskBarProgressScan.ProgressState = System.Windows.Shell.TaskbarItemProgressState.Indeterminate;

            monsterListDataTable.Rows.Clear();

            string        inputDir     = textBoxInputPath.Text;
            string        outputDir    = textBoxOutputPath.Text;
            MonsterFormat inputFormat  = (MonsterFormat)GetMonsterFormatFromCombo(comboInputFormat);
            MonsterFormat outputFormat = (MonsterFormat)GetMonsterFormatFromCombo(comboOutputFormat);
            ScanError     result       = ScanError.Success;
            await Task.Run(() =>
            {
                result = fileProcessor.ConvertMonsterFiles(inputDir, inputFormat, outputDir, outputFormat, true);
            });

            switch (result)
            {
            case ScanError.Success:
                textBlockScanStatus.Text = "Completed successfully.";
                break;

            case ScanError.NoMonstersFound:
                textBlockScanStatus.Text = "Couldn't find any monster files.";
                break;

            case ScanError.InvalidMonsterDirectory:
                textBlockScanStatus.Text = "The selected project directory is invald.";
                break;

            case ScanError.InvalidMonsterFormat:
                textBlockScanStatus.Text = "The selected input or output monster format is invalid.";
                break;

            case ScanError.CouldNotCreateDirectory:
                textBlockScanStatus.Text = "Couldn't create destination directory.";
                break;

            case ScanError.DirectoriesMatch:
                textBlockScanStatus.Text = "Input and output directories can't be the same.";
                break;

            default:
                break;
            }

            taskBarProgressScan.ProgressState = System.Windows.Shell.TaskbarItemProgressState.None;
            progressBarScan.Visibility        = Visibility.Hidden;
            Cursor = Cursors.Arrow;
            buttonConvert.IsEnabled = true;
        }
        // Functions
        public ScanError ConvertMonsterFiles(string monsterDirectory, MonsterFormat inputFormat, string outputDirectory, MonsterFormat outputFormat, bool mirroredFolderStructure = false)
        {
            if ((inputFormat != MonsterFormat.TibiaWiki) && (!Directory.Exists(monsterDirectory)))
            {
                return(ScanError.InvalidMonsterDirectory);
            }

            if (!Directory.Exists(outputDirectory))
            {
                try
                {
                    Directory.CreateDirectory(outputDirectory);
                }
                catch (Exception)
                {
                    return(ScanError.CouldNotCreateDirectory);
                }
            }

            if ((inputFormat != MonsterFormat.TibiaWiki) &&
                (Path.GetFullPath(monsterDirectory) == Path.GetFullPath(outputDirectory)))
            {
                return(ScanError.DirectoriesMatch);
            }

            var result = FormatToConverter(inputFormat, out IMonsterConverter inputConverter);

            if (result != ScanError.Success)
            {
                return(result);
            }

            result = FormatToConverter(outputFormat, out IMonsterConverter outputConverter);
            if (result != ScanError.Success)
            {
                return(result);
            }

            string[] files;
            if (inputFormat == MonsterFormat.TibiaWiki)
            {
                files = GetWikiMonsters();
                // TibiaWiki provides a flat list
                mirroredFolderStructure = false;
            }
            else
            {
                files = GetLocalFiles(monsterDirectory, inputConverter.FileExtRegEx);
            }
            if ((files != null) && (files.Length == 0))
            {
                return(ScanError.NoMonstersFound);
            }

            bool   copyOk;
            string destination;

            foreach (string file in files)
            {
                destination = FindExactFileDestination(monsterDirectory, outputDirectory, file, mirroredFolderStructure);
                copyOk      = ProcessFile(file, inputConverter, outputConverter, destination);
                RaiseEvent(OnMonsterConverted, new FileProcessorEventArgs(file, destination, copyOk));
            }

            return(ScanError.Success);
        }