Example #1
0
 public static void AddFileBackToRPF(RpfDirectoryEntry RPFDirectory, string filename, byte[] newData)
 {
     if (Regex.Matches(filename, ".rpf").Count > 1)
     {
         string  topRPF     = StringFunctions.TopMostRPF(filename);
         RpfFile CurrentRpf = new RpfFile(topRPF, topRPF);
         CurrentRpf.ScanStructure(null, null);
         DefragmentChildren(CurrentRpf, filename, newData, RPFDirectory);
     }
     else
     {
         RpfFile.CreateFile(RPFDirectory, Path.GetFileName(filename), newData, true);
         RpfFile CurrentRpf = new RpfFile(Path.GetDirectoryName(filename), Path.GetDirectoryName(filename));
         RpfFile.Defragment(CurrentRpf);
     }
 }
Example #2
0
        private void SelectFile(RpfEntry entry, int offset, int length)
        {
            RpfSelectedEntry  = entry;
            RpfSelectedOffset = offset;
            RpfSelectedLength = length;

            RpfFileEntry rfe = entry as RpfFileEntry;

            if (rfe == null)
            {
                RpfDirectoryEntry rde = entry as RpfDirectoryEntry;
                if (rde != null)
                {
                    FileInfoLabel.Text = rde.Path + " (Directory)";
                    DataTextBox.Text   = "[Please select a data file]";
                }
                else
                {
                    FileInfoLabel.Text = "[Nothing selected]";
                    DataTextBox.Text   = "[Please select a search result]";
                }
                return;
            }


            Cursor = Cursors.WaitCursor;

            string typestr = "Resource";

            if (rfe is RpfBinaryFileEntry)
            {
                typestr = "Binary";
            }

            byte[] data = rfe.File.ExtractFile(rfe);

            int datalen = (data != null) ? data.Length : 0;

            FileInfoLabel.Text = rfe.Path + " (" + typestr + " file)  -  " + TextUtil.GetBytesReadable(datalen);


            if (ShowLargeFileContentsCheckBox.Checked || (datalen < 524287)) //512K
            {
                DisplayFileContentsText(rfe, data, length, offset);
            }
            else
            {
                DataTextBox.Text = "[Filesize >512KB. Select the Show large files option to view its contents]";
            }



            //bool istexdict = false;
            //if (rfe.NameLower.EndsWith(".ymap"))
            //{
            //    YmapFile ymap = new YmapFile(rfe);
            //    ymap.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = ymap;
            //}
            //else if (rfe.NameLower.EndsWith(".ytyp"))
            //{
            //    YtypFile ytyp = new YtypFile();
            //    ytyp.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = ytyp;
            //}
            //else if (rfe.NameLower.EndsWith(".ymf"))
            //{
            //    YmfFile ymf = new YmfFile();
            //    ymf.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = ymf;
            //}
            //else if (rfe.NameLower.EndsWith(".ymt"))
            //{
            //    YmtFile ymt = new YmtFile();
            //    ymt.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = ymt;
            //}
            //else if (rfe.NameLower.EndsWith(".ybn"))
            //{
            //    YbnFile ybn = new YbnFile();
            //    ybn.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = ybn;
            //}
            //else if (rfe.NameLower.EndsWith(".fxc"))
            //{
            //    FxcFile fxc = new FxcFile();
            //    fxc.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = fxc;
            //}
            //else if (rfe.NameLower.EndsWith(".yft"))
            //{
            //    YftFile yft = new YftFile();
            //    yft.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = yft;
            //    if ((yft.Fragment != null) && (yft.Fragment.Drawable != null) && (yft.Fragment.Drawable.ShaderGroup != null) && (yft.Fragment.Drawable.ShaderGroup.TextureDictionary != null))
            //    {
            //        ShowTextures(yft.Fragment.Drawable.ShaderGroup.TextureDictionary);
            //        istexdict = true;
            //    }
            //}
            //else if (rfe.NameLower.EndsWith(".ydr"))
            //{
            //    YdrFile ydr = new YdrFile();
            //    ydr.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = ydr;
            //    if ((ydr.Drawable != null) && (ydr.Drawable.ShaderGroup != null) && (ydr.Drawable.ShaderGroup.TextureDictionary != null))
            //    {
            //        ShowTextures(ydr.Drawable.ShaderGroup.TextureDictionary);
            //        istexdict = true;
            //    }
            //}
            //else if (rfe.NameLower.EndsWith(".ydd"))
            //{
            //    YddFile ydd = new YddFile();
            //    ydd.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = ydd;
            //    //todo: show embedded texdicts in ydd's? is this possible?
            //}
            //else if (rfe.NameLower.EndsWith(".ytd"))
            //{
            //    YtdFile ytd = new YtdFile();
            //    ytd.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = ytd;
            //    ShowTextures(ytd.TextureDict);
            //    istexdict = true;
            //}
            //else if (rfe.NameLower.EndsWith(".ycd"))
            //{
            //    YcdFile ycd = new YcdFile();
            //    ycd.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = ycd;
            //}
            //else if (rfe.NameLower.EndsWith(".ynd"))
            //{
            //    YndFile ynd = new YndFile();
            //    ynd.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = ynd;
            //}
            //else if (rfe.NameLower.EndsWith(".ynv"))
            //{
            //    YnvFile ynv = new YnvFile();
            //    ynv.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = ynv;
            //}
            //else if (rfe.NameLower.EndsWith("_cache_y.dat"))
            //{
            //    CacheDatFile cdf = new CacheDatFile();
            //    cdf.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = cdf;
            //}
            //else if (rfe.NameLower.EndsWith(".rel"))
            //{
            //    RelFile rel = new RelFile(rfe);
            //    rel.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = rel;
            //}
            //else if (rfe.NameLower.EndsWith(".gxt2"))
            //{
            //    Gxt2File gxt2 = new Gxt2File();
            //    gxt2.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = gxt2;
            //}
            //else if (rfe.NameLower.EndsWith(".pso"))
            //{
            //    JPsoFile pso = new JPsoFile();
            //    pso.Load(data, rfe);
            //    DetailsPropertyGrid.SelectedObject = pso;
            //}
            //else
            //{
            //    DetailsPropertyGrid.SelectedObject = null;
            //}


            //if (!istexdict)
            //{
            //    ShowTextures(null);
            //}


            Cursor = Cursors.Default;
        }
Example #3
0
        private void Find()
        {
            if (InProgress)
            {
                return;
            }
            if (ScannedFiles.Count == 0)
            {
                MessageBox.Show("Please scan the GTAV folder first.");
                return;
            }


            string find = FindTextBox.Text.ToLowerInvariant();

            Cursor = Cursors.WaitCursor;
            if (string.IsNullOrEmpty(find))
            {
                ClearFiles();
                foreach (RpfFile file in RootFiles)
                {
                    AddScannedFile(file, null); //reset the file tree... slow :(
                }
            }
            else
            {
                ClearFiles();
                int count = 0;
                int max   = 500;
                foreach (RpfFile file in ScannedFiles)
                {
                    if (file.Name.ToLowerInvariant().Contains(find))
                    {
                        AddFileNode(file, null);
                        count++;
                    }
                    foreach (RpfEntry entry in file.AllEntries)
                    {
                        if (entry.NameLower.Contains(find))
                        {
                            if (entry is RpfDirectoryEntry)
                            {
                                RpfDirectoryEntry direntry = entry as RpfDirectoryEntry;

                                TreeNode node = AddEntryNode(entry, null);

                                foreach (RpfFileEntry cfentry in direntry.Files)
                                {
                                    //if (cfentry.Name.EndsWith(".rpf", StringComparison.InvariantCultureIgnoreCase)) continue;
                                    AddEntryNode(cfentry, node);
                                }
                                count++;
                            }
                            else if (entry is RpfBinaryFileEntry)
                            {
                                if (entry.NameLower.EndsWith(".rpf", StringComparison.InvariantCultureIgnoreCase))
                                {
                                    continue;
                                }
                                AddEntryNode(entry, null);
                                count++;
                            }
                            else if (entry is RpfResourceFileEntry)
                            {
                                AddEntryNode(entry, null);
                                count++;
                            }
                        }
                        if (count >= max)
                        {
                            MessageBox.Show("Search results limited to " + max.ToString() + " entries.");
                            break;
                        }
                    }
                    if (count >= max)
                    {
                        break;
                    }
                }
            }
            Cursor = Cursors.Default;
        }
Example #4
0
 public static void DefragmentChildren(RpfFile CurrentRpf, string file, byte[] newData, RpfDirectoryEntry RPFDirectory)
 {
     foreach (RpfEntry RPFFile in CurrentRpf.AllEntries)
     {
         if (RPFFile.Name == Path.GetFileName(file))
         {
             RpfFile.CreateFile(RPFDirectory, Path.GetFileName(file), newData, true);
             RpfFile.Defragment(CurrentRpf);
             break;
         }
     }
     foreach (RpfFile RPFs in CurrentRpf.Children)
     {
         DefragmentChildren(RPFs, file, newData, RPFDirectory);
     }
 }