예제 #1
0
        public void Unpack()
        {
            Clean();
            string tacFilename     = Path.GetFileName(TADFile.Filename).ToLower().Replace(".tad", ".tac");
            string tacPath         = Path.GetDirectoryName(TADFile.Filename) + "\\" + tacFilename;
            string targetDirectory = Path.GetDirectoryName(tacPath) + "\\" + "_" + tacFilename + "_";

            Header.RelativeOutputFolder = "\\" + Helper.GetRelativePath(targetDirectory, Path.GetDirectoryName(tacPath));
            Header.RelativeTACPath      = "\\" + Helper.GetRelativePath(tacPath, Path.GetDirectoryName(tacPath));
            Header.RelativeTADPath      = "\\" + Helper.GetRelativePath(TADFile.Filename, Path.GetDirectoryName(tacPath));

            TACFile       tacFile       = new TACFile();
            LoadingDialog loadingDialog = new LoadingDialog();

            loadingDialog.SetData(tacFile);
            Thread thread = new Thread(delegate() {
                tacFile.Unpack(tacPath, targetDirectory, TADFile);
            });

            loadingDialog.ShowDialog(thread);

            string cachePath = Path.GetDirectoryName(tacPath) + "\\" + Path.GetFileName(TADFile.Filename).ToLower().Replace(".tad", ".cache");

            Filename = cachePath;
            Write(cachePath);
        }
예제 #2
0
        private void button_Merge_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog = new OpenFileDialog();

            openFileDialog.Filter = "Filename Database Dump (*.bin)|*.bin";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                if (!Helper.IsFileValid(openFileDialog.FileName))
                {
                    return;
                }

                List <FilenameDatabaseEntry> newEntries;
                using (FileStream stream = File.Open(openFileDialog.FileName, FileMode.Open))
                {
                    BinaryFormatter formatter = new BinaryFormatter();
                    newEntries = (List <FilenameDatabaseEntry>)formatter.Deserialize(stream);
                }

                LoadingDialog loadingDialog = new LoadingDialog();
                loadingDialog.SetData(this);
                Thread thread = new Thread(delegate() {
                    Merge(newEntries);
                });
                loadingDialog.ShowDialog(thread);
            }
            FilenameDatabase.Save();
            filenameDatabaseDataTable1.UpdateView(false);
        }
예제 #3
0
        public void Export(string tadFilename, bool exportModified = true)
        {
            string tacPath     = Path.GetDirectoryName(tadFilename) + "\\" + Path.GetFileName(tadFilename).ToLower().Replace(".tad", ".tac");
            string inputFolder = Path.GetDirectoryName(Filename) + Header.RelativeOutputFolder;

            if (exportModified)
            {
                LoadingDialog loadingDialogHash = new LoadingDialog();
                loadingDialogHash.SetData(this);
                Thread threadHash = new Thread(delegate()
                {
                    CalculateHashes();
                });
                loadingDialogHash.ShowDialog(threadHash);
            }

            TACFile       tacFile       = new TACFile();
            LoadingDialog loadingDialog = new LoadingDialog();

            loadingDialog.SetData(tacFile);
            Thread thread = new Thread(delegate() {
                tacFile.Pack(tacPath, inputFolder, TADFile);
            });

            loadingDialog.ShowDialog(thread);

            TADFile.Write(tadFilename);
        }
예제 #4
0
        private void mapFilenamesToTADToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (m_cacheFile == null || m_tadFile == null)
            {
                return;
            }

            FilenameDatabase filenameDB    = new FilenameDatabase();
            LoadingDialog    loadingDialog = new LoadingDialog();

            loadingDialog.SetData(filenameDB);
            Thread thread = new Thread(delegate()
            {
                filenameDB.MapFilenamesToTADInstance(m_cacheFile);
            });

            loadingDialog.ShowDialog(thread);

            DescriptionDatabase descDB = new DescriptionDatabase();

            loadingDialog = new LoadingDialog();
            loadingDialog.SetData(descDB);
            thread = new Thread(delegate()
            {
                descDB.MapDescriptionToTADInstance(m_tadFile);
            });
            loadingDialog.ShowDialog(thread);

            tadDataTable1.SetCache(m_cacheFile);
            m_cacheFile.Write(m_cacheFile.Filename);
        }
        private void button_Merge_Click(object sender, EventArgs e)
        {
            LoadingDialog loadingDialog = new LoadingDialog();

            loadingDialog.SetData(this);
            Thread thread = new Thread(delegate() {
                Merge();
            });

            loadingDialog.ShowDialog(thread);
        }
        private void button_Fetch_Click(object sender, EventArgs e)
        {
            WulinshuRaymonfAPI api           = new WulinshuRaymonfAPI();
            LoadingDialog      loadingDialog = new LoadingDialog();

            loadingDialog.SetData(api);
            Thread thread = new Thread(delegate() {
                api.FetchData("both");
            });

            loadingDialog.ShowDialog(thread);
            WulinshuRaymonfAPI.Write();
            wulinshuRaymonfDataTable1.SetData(WulinshuRaymonfAPI.Entries);
        }
예제 #7
0
        private void button_Refresh_Click(object sender, EventArgs e)
        {
            if (m_cacheFile == null)
            {
                return;
            }
            LoadingDialog loadingDialog = new LoadingDialog();

            loadingDialog.SetData(m_cacheFile);
            Thread thread = new Thread(delegate()
            {
                m_cacheFile.CalculateHashes();
                UpdateView();
            });

            loadingDialog.ShowDialog(thread);
        }
예제 #8
0
        private void button_Generate_Click(object sender, EventArgs e)
        {
            VistaFolderBrowserDialog folderDialog = new VistaFolderBrowserDialog();

            if (folderDialog.ShowDialog() == DialogResult.OK)
            {
                FilenameCrawler crawler       = new FilenameCrawler();
                LoadingDialog   loadingDialog = new LoadingDialog();
                loadingDialog.SetData(crawler);
                Thread thread = new Thread(delegate() {
                    crawler.GenerateFilenameDatabase(folderDialog.SelectedPath);
                });
                loadingDialog.ShowDialog(thread);

                FilenameDatabase.Save();
                filenameDatabaseDataTable1.UpdateView(false);
            }
        }
예제 #9
0
        public void Pack()
        {
            string tacPath     = Path.GetDirectoryName(Filename) + Header.RelativeTACPath;
            string inputFolder = Path.GetDirectoryName(Filename) + Header.RelativeOutputFolder;

            TACFile       tacFile       = new TACFile();
            LoadingDialog loadingDialog = new LoadingDialog();

            loadingDialog.SetData(tacFile);
            Thread thread = new Thread(delegate() {
                tacFile.Pack(tacPath, inputFolder, TADFile, false);
            });

            loadingDialog.ShowDialog(thread);

            string cachePath = Path.GetDirectoryName(tacPath) + "\\" + Path.GetFileName(TADFile.Filename).ToLower().Replace(".tad", ".cache");

            Filename = cachePath;
            Write(cachePath);
        }
예제 #10
0
        public void ConvertLegacy(string filename)
        {
            DataCollection dataCollection;

            using (FileStream reader = new FileStream(filename, FileMode.Open))
            {
                BinaryFormatter binaryFormatter = new BinaryFormatter();
                dataCollection = (DataCollection)binaryFormatter.Deserialize(reader);
            }
            if (dataCollection == null)
            {
                return;
            }

            Filename = filename.Replace(".shdcache", ".cache");

            TADFile                       = new TADFile();
            TADFile.Filename              = filename.Replace(".shdcache", ".tad");
            TADFile.Header.FileCount      = BitConverter.ToUInt32(dataCollection.Header.FileCount1, 0);
            TADFile.Header.HeaderChecksum = BitConverter.ToUInt32(dataCollection.Header.HeaderChecksum, 0);
            TADFile.Header.TacSize        = BitConverter.ToUInt32(dataCollection.Header.TacSize, 0);
            TADFile.Header.UnixTimestamp  = new DateTime(1970, 1, 1).AddSeconds(BitConverter.ToInt32(dataCollection.Header.UnixTimestamp, 0));

            string fileDir = Path.GetDirectoryName(Filename);
            string dir     = fileDir;

            if (dataCollection.Files.Count > 0)
            {
                dir = Path.GetDirectoryName(dataCollection.Files[0].Meta.FilePath);
            }

            Header.RelativeOutputFolder = "\\" + Helper.GetRelativePath(dir, fileDir);
            Header.RelativeTADPath      = "\\" + Helper.GetRelativePath(TADFile.Filename, fileDir);
            Header.RelativeTACPath      = "\\" + Helper.GetRelativePath(TADFile.Filename.Replace(".tad", ".tac"), fileDir);

            foreach (FileStructure file in dataCollection.Files)
            {
                TADFileEntry entry = new TADFileEntry();
                entry.FileOffset   = BitConverter.ToUInt32(file.FileStart, 0);
                entry.FileSize     = BitConverter.ToUInt32(file.FileSize, 0);
                entry.RelativePath = Helper.GetRelativePath(file.Meta.FilePath, dir);
                entry.Index        = file.Meta.Index;

                byte[] firstHash = new byte[4];
                Array.Copy(file.Hash1, firstHash, 4);
                entry.FirstHash = BitConverter.ToUInt32(firstHash, 0);

                byte[] secondHash = new byte[4];
                Array.Copy(file.Hash1, 4, secondHash, 0, 4);
                entry.SecondHash = BitConverter.ToUInt32(secondHash, 0);

                byte[] unknown = new byte[4];
                Array.Copy(file.Hash2, 0, unknown, 0, 4);
                entry.Unknown = BitConverter.ToUInt32(unknown, 0);

                entry.MD5Checksum = file.Meta.MD5Hash;

                TADFile.FileEntries.Add(entry);
            }

            FilenameDatabase filenameDB    = new FilenameDatabase();
            LoadingDialog    loadingDialog = new LoadingDialog();

            loadingDialog.SetData(filenameDB);
            Thread thread = new Thread(delegate() {
                filenameDB.MapFilenamesToTADInstance(this);
            });

            loadingDialog.ShowDialog(thread);

            DescriptionDatabase descDB = new DescriptionDatabase();

            loadingDialog = new LoadingDialog();
            loadingDialog.SetData(descDB);
            thread = new Thread(delegate() {
                descDB.MapDescriptionToTADInstance(TADFile);
            });
            loadingDialog.ShowDialog(thread);

            Write(Filename);
            if (File.Exists(filename))
            {
                File.Delete(filename);
            }
        }