public static void Combine(List <string> files, bool notifyCollissions, string folder)
        {
            rootFiles = files;
            Combiner.notifyCollissions = notifyCollissions;

            var fileFormat = FileFormats.GetFileFormat(files[0]);

            if (fileFormat == FileFormat.Unknown)
            {
                throw new ArgumentException("Can't combine " + Path.GetExtension(files[0]) + " files. If you need to combine these files, let me know at jc3mods.com");
            }

            var originalFiles = GameFiles.GetDefaultFiles(Path.GetFileName(files[0]));

            if (originalFiles.Count == 0)
            {
                throw new Exception("Couldn't find default files for " + Path.GetFileName(files[0]));
            }
            var outputPath = Path.Combine(Settings.user.JC3Folder, folder, originalFiles[0].Substring(Settings.defaultFiles.Length + 1));
            var name       = Path.GetFileNameWithoutExtension(outputPath);

            outputPath = Path.GetDirectoryName(outputPath) + "\\" + name.Substring(0, name.LastIndexOf('_')) + Path.GetExtension(outputPath);
            Combine(originalFiles, files, FileFormats.GetFileFormat(originalFiles[0]), outputPath);
        }
        public static async void InstallMods(List <string> dropzoneFiles, List <string> skyfortressFiles)
        {
            var groupedDropzoneFiles    = GroupFiles(dropzoneFiles);
            var groupedSkyfortressFiles = GroupFiles(skyfortressFiles);

            var progressViewModel = new ProgressDialogViewModel();

            Settings.mainWindow.BusyDialog.DialogContent = progressViewModel;
            Settings.mainWindow.BusyDialog.IsOpen        = true;
            int progress = 0;

            foreach (var value in groupedDropzoneFiles.Values)
            {
                var files = value;
                await Task.Run(() =>
                {
                    if (files.Count == 1)
                    {
                        var file       = GameFiles.GetDefaultFiles(Path.GetFileName(files[0]));
                        var outputPath = Path.Combine(Settings.user.JC3Folder, "dropzone", file[0].Substring(Settings.defaultFiles.Length + 1));
                        var name       = Path.GetFileNameWithoutExtension(outputPath);
                        outputPath     = Path.GetDirectoryName(outputPath) + "\\" + name.Substring(0, name.LastIndexOf('_')) + Path.GetExtension(outputPath);
                        File.Copy(files[files.Count - 1], outputPath, true);
                    }
                    else
                    {
                        try
                        {
                            Combiner.Combine(files, false, "dropzone");
                        }
                        catch (Exception ex)
                        {
                            Errors.Handle("Failed to combine " + files.Count + " mods.", ex);
                            var file       = GameFiles.GetDefaultFiles(Path.GetFileName(files[0]));
                            var outputPath = Path.Combine(Settings.user.JC3Folder, "dropzone", file[0].Substring(Settings.defaultFiles.Length + 1));
                            var name       = Path.GetFileNameWithoutExtension(outputPath);
                            outputPath     = Path.GetDirectoryName(outputPath) + "\\" + name.Substring(0, name.LastIndexOf('_')) + Path.GetExtension(outputPath);
                            File.Copy(files[files.Count - 1], outputPath, true);
                        }
                    }
                });

                progress++;
                progressViewModel.Progress = progress / (groupedDropzoneFiles.Count + groupedSkyfortressFiles.Count);
            }

            foreach (var value in groupedSkyfortressFiles.Values)
            {
                var files = value;
                await Task.Run(() =>
                {
                    if (files.Count == 1)
                    {
                        var file       = GameFiles.GetDefaultFiles(Path.GetFileName(files[0]));
                        var outputPath = Path.Combine(Settings.user.JC3Folder, "dropzone_sky_fortress", file[0].Substring(Settings.defaultFiles.Length + 1));
                        var name       = Path.GetFileNameWithoutExtension(outputPath);
                        outputPath     = Path.GetDirectoryName(outputPath) + "\\" + name.Substring(0, name.LastIndexOf('_')) + Path.GetExtension(outputPath);
                        File.Copy(files[files.Count - 1], outputPath, true);
                    }
                    else
                    {
                        try
                        {
                            Combiner.Combine(files, false, "dropzone_sky_fortress");
                        }
                        catch (Exception ex)
                        {
                            Errors.Handle("Failed to combine " + files.Count + " mods.", ex);
                            var file       = GameFiles.GetDefaultFiles(Path.GetFileName(files[0]));
                            var outputPath = Path.Combine(Settings.user.JC3Folder, "dropzone_sky_fortress", file[0].Substring(Settings.defaultFiles.Length + 1));
                            var name       = Path.GetFileNameWithoutExtension(outputPath);
                            outputPath     = Path.GetDirectoryName(outputPath) + "\\" + name.Substring(0, name.LastIndexOf('_')) + Path.GetExtension(outputPath);
                            File.Copy(files[files.Count - 1], outputPath, true);
                        }
                    }
                });

                progress++;
                progressViewModel.Progress = progress / (groupedDropzoneFiles.Count + groupedSkyfortressFiles.Count);
            }

            if (groupedSkyfortressFiles.Count > 0)
            {
                GibbedsTools.SkyFortressPack();
            }

            Settings.mainWindow.BusyDialog.IsOpen = false;
        }