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); } }
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); }
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); }
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); } }
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); }
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); } } }
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); } }