Example #1
0
        private static void OpenArchive()
        {
            var fileInfo = new FileInfo(_archiveInput.Text);

            if (fileInfo.Exists)
            {
                _archiveInput.Enabled             = false;
                _archiveInputBrowseButton.Enabled = false;
                _openCloseArchiveButton.Text      = "Close archive";
                _saveAsButton.Enabled             = true;

                _archive = MpqArchive.Open(fileInfo.FullName, true);
                _archive.DiscoverFileNames();

                var map = Map.Open(_archive);
                // _originScriptLanguage = map.Info.ScriptLanguage;

                var targetScriptLanguages = new HashSet <object>(new object[]
                {
                    // ScriptLanguage.Jass,
                    ScriptLanguage.Lua,
                });

                _targetScriptLanguagesComboBox.Items.AddRange(targetScriptLanguages.OrderByDescending(patch => (int)patch).ToArray());
                _targetScriptLanguagesComboBox.Enabled = true;
                if (_targetScriptLanguagesComboBox.Items.Count == 1)
                {
                    _targetScriptLanguagesComboBox.SelectedIndex = 0;
                }
            }
        }
Example #2
0
        private static void OpenArchive()
        {
            var fileInfo = new FileInfo(_archiveInput.Text);

            if (fileInfo.Exists)
            {
                _archiveInput.Enabled             = false;
                _archiveInputBrowseButton.Enabled = false;
                _openCloseArchiveButton.Text      = "Close archive";
                _saveAsButton.Enabled             = _filesToDecompileCheckBoxes.Any(checkBox => checkBox.Checked);

                _archive = MpqArchive.Open(fileInfo.FullName, true);
                _archive.DiscoverFileNames();

                _map = Map.Open(_archive);

                _autoDetectFilesToDecompileButton.Enabled = true;
                foreach (var checkBox in _filesToDecompileCheckBoxes)
                {
                    checkBox.Enabled = true;
                }
            }
        }
Example #3
0
 public void AddFiles(MpqArchive archive)
 {
     archive.DiscoverFileNames();
     AddFiles(archive.GetMpqFiles());
 }
Example #4
0
        private static void OpenArchiveBackgroundWork(object?sender, DoWorkEventArgs e)
        {
            _archive = MpqArchive.Open((string)e.Argument, true);
            _archive.DiscoverFileNames();

            var mapsList = new HashSet <string>();

            if (_archive.IsCampaignArchive(out var campaignInfo))
            {
                for (var i = 0; i < campaignInfo.Maps.Count; i++)
                {
                    mapsList.Add(campaignInfo.Maps[i].MapFilePath);
                }
            }
            else
            {
                using var mpqStream = _archive.OpenFile(MapInfo.FileName);
                using var reader    = new BinaryReader(mpqStream);
                _originPatch        = reader.ReadMapInfo().GetOriginGamePatch();
            }

            var listViewItems         = new List <ListViewItem>();
            var possibleOriginPatches = new HashSet <GamePatch>();
            var files = _archive.ToList();

            var progress = new OpenArchiveProgress();

            progress.Maximum = files.Count;

            foreach (var file in files)
            {
                if (mapsList.Contains(file.FileName))
                {
                    var mapName = file.FileName;

                    using var mapArchiveStream = _archive.OpenFile(mapName);
                    using var mapArchive       = MpqArchive.Open(mapArchiveStream, true);
                    mapArchive.DiscoverFileNames();

                    var children = new List <ListViewItem>();
                    var mapFiles = mapArchive.ToList();

                    progress.Maximum += mapFiles.Count;

                    foreach (var mapFile in mapArchive)
                    {
                        var subItem = ListViewItemExtensions.Create(new ItemTag(mapArchive, mapFile, mapName));

                        subItem.IndentCount = 1;
                        children.Add(subItem);

                        _openArchiveWorker.ReportProgress(0, progress);
                    }

                    using (var mapInfoFileStream = mapArchive.OpenFile(MapInfo.FileName))
                    {
                        using var reader = new BinaryReader(mapInfoFileStream);
                        var mapArchiveOriginPatch = reader.ReadMapInfo().GetOriginGamePatch();

                        var mapArchiveItem = ListViewItemExtensions.Create(new ItemTag(_archive, file, children.ToArray(), mapArchiveOriginPatch));

                        listViewItems.Add(mapArchiveItem);

                        _openArchiveWorker.ReportProgress(0, progress);

                        if (mapArchiveOriginPatch.HasValue)
                        {
                            possibleOriginPatches.Add(mapArchiveOriginPatch.Value);
                        }
                    }

                    foreach (var child in children)
                    {
                        listViewItems.Add(child);
                    }
                }
                else
                {
                    var item = ListViewItemExtensions.Create(new ItemTag(_archive, file));

                    listViewItems.Add(item);

                    _openArchiveWorker.ReportProgress(0, progress);
                }
            }

            if (_originPatch is null)
            {
                _originPatch = possibleOriginPatches.Count == 1 ? possibleOriginPatches.Single() : _latestPatch;
            }

            e.Result = listViewItems;
        }