コード例 #1
0
ファイル: DatDatabase.cs プロジェクト: jacobtipp/trACE
        public void ExtractCategorizedPortalContents(string path)
        {
            foreach (KeyValuePair <uint, DatFile> entry in AllFiles)
            {
                string thisFolder;

                if (entry.Value.GetFileType(DatDatabaseType.Portal) != null)
                {
                    thisFolder = Path.Combine(path, entry.Value.GetFileType(DatDatabaseType.Portal).ToString());
                }
                else
                {
                    thisFolder = Path.Combine(path, "UnknownType");
                }

                if (!Directory.Exists(thisFolder))
                {
                    Directory.CreateDirectory(thisFolder);
                }

                string hex      = entry.Value.ObjectId.ToString("X8");
                string thisFile = Path.Combine(thisFolder, hex + ".bin");

                // Use the DatReader to get the file data
                DatReader dr = GetReaderForFile(entry.Value.ObjectId);

                File.WriteAllBytes(thisFile, dr.Buffer);
            }
        }
コード例 #2
0
ファイル: DatDatabase.cs プロジェクト: jacobtipp/trACE
        public DatReader GetReaderForFile(uint fileId)
        {
            if (AllFiles.TryGetValue(fileId, out var file))
            {
                DatReader dr;

                if (stream != null)
                {
                    lock (streamMutex)
                        dr = new DatReader(stream, file.FileOffset, file.FileSize, Header.BlockSize);
                }
                else
                {
                    dr = new DatReader(FilePath, file.FileOffset, file.FileSize, Header.BlockSize);
                }

                return(dr);
            }

            if ((fileId & 0xFFFF) == 0xFFFE) // These are LandBlockInfo objects. Not every landblock has extra info (buildings, etc..)
            {
                log.DebugFormat("Unable to find object_id {0:X8} in {1}", fileId, Enum.GetName(typeof(DatDatabaseType), Header.DataSet));
            }
            else
            {
                log.InfoFormat("Unable to find object_id {0:X8} in {1}", fileId, Enum.GetName(typeof(DatDatabaseType), Header.DataSet));
            }

            return(null);
        }
コード例 #3
0
        public DatReader GetReaderForFile(uint fileId)
        {
            if (AllFiles.TryGetValue(fileId, out var file))
            {
                DatReader dr = new DatReader(FilePath, file.FileOffset, file.FileSize, Header.BlockSize);
                return(dr);
            }

            log.InfoFormat("Unable to find object_id {0} in {1}", fileId, Enum.GetName(typeof(DatDatabaseType), Header.DataSet));
            return(null);
        }
コード例 #4
0
 public DatReader GetReaderForFile(uint object_id)
 {
     if (AllFiles.ContainsKey(object_id))
     {
         DatReader dr = new DatReader(FilePath, AllFiles[object_id].FileOffset, AllFiles[object_id].FileSize, SectorSize);
         return(dr);
     }
     else
     {
         log.InfoFormat("Unable to find object_id {0} in {1}", object_id.ToString(), Enum.GetName(typeof(DatDatabaseType), DatType));
         return(null);
     }
 }
コード例 #5
0
        public DatReader GetReaderForFile(uint fileId)
        {
            uint       override_offset;
            uint       override_filesize;
            FileStream override_filestream;

            if (GameChangerServer.ServerPluginCore.DatFileOverride(FilePath, fileId, out override_filestream, out override_offset, out override_filesize))
            {
                if (override_filesize > 0)
                {
                    DatReader dr = new DatReader(override_filestream, override_offset, override_filesize, uint.MaxValue);
                    return(dr);
                }
                else
                {
                    return(null);
                }
            }

            if (AllFiles.TryGetValue(fileId, out var file))
            {
                DatReader dr;

                if (stream != null)
                {
                    lock (streamMutex)
                        dr = new DatReader(stream, file.FileOffset, file.FileSize, Header.BlockSize);
                }
                else
                {
                    dr = new DatReader(FilePath, file.FileOffset, file.FileSize, Header.BlockSize);
                }

                return(dr);
            }

            if ((fileId & 0xFFFF) == 0xFFFE) // These are LandBlockInfo objects. Not every landblock has extra info (buildings, etc..)
            {
                log.DebugFormat("Unable to find object_id {0:X8} in {1}", fileId, Enum.GetName(typeof(DatDatabaseType), Header.DataSet));
            }
            else
            {
                log.InfoFormat("Unable to find object_id {0:X8} in {1}", fileId, Enum.GetName(typeof(DatDatabaseType), Header.DataSet));
            }

            return(null);
        }
コード例 #6
0
ファイル: DatDirectory.cs プロジェクト: jacobtipp/trACE
        public void Read(FileStream stream)
        {
            var headerReader = new DatReader(stream, rootSectorOffset, DatDirectoryHeader.ObjectSize, blockSize);

            using (var memoryStream = new MemoryStream(headerReader.Buffer))
                using (var reader = new BinaryReader(memoryStream))
                    DatDirectoryHeader.Unpack(reader);

            // directory is allowed to have files + 1 subdirectories
            if (DatDirectoryHeader.Branches[0] != 0)
            {
                for (int i = 0; i < DatDirectoryHeader.EntryCount + 1; i++)
                {
                    var directory = new DatDirectory(DatDirectoryHeader.Branches[i], blockSize);
                    directory.Read(stream);
                    Directories.Add(directory);
                }
            }
        }
コード例 #7
0
ファイル: CellDatDatabase.cs プロジェクト: shawarma-golem/ACE
        public void ExtractLandblockContents(string path)
        {
            foreach (KeyValuePair <uint, DatFile> entry in this.AllFiles)
            {
                string thisFolder = Path.Combine(path, (entry.Value.ObjectId >> 16).ToString("X4"));

                if (!Directory.Exists(thisFolder))
                {
                    Directory.CreateDirectory(thisFolder);
                }

                // Use the DatReader to get the file data - file blocks can extend over block size.
                DatReader dr = this.GetReaderForFile(entry.Value.ObjectId);

                string hex      = entry.Value.ObjectId.ToString("X8");
                string thisFile = Path.Combine(thisFolder, hex + ".bin");
                File.WriteAllBytes(thisFile, dr.Buffer);
            }
        }