using System.Collections.Generic; using System.IO; using ACE.DatLoader.FileTypes; namespace ACE.DatLoader { public class PortalDatDatabase : DatDatabase { public PortalDatDatabase(string filename) : base(filename) { } public BadData BadData => ReadFromDat(BadData.FILE_ID); public ChatPoseTable ChatPoseTable => ReadFromDat(ChatPoseTable.FILE_ID); public CharGen CharGen => ReadFromDat(CharGen.FILE_ID); public ContractTable ContractTable => ReadFromDat(ContractTable.FILE_ID); public GeneratorTable GeneratorTable => ReadFromDat(GeneratorTable.FILE_ID); public NameFilterTable NameFilterTable => ReadFromDat(NameFilterTable.FILE_ID); public RegionDesc RegionDesc => ReadFromDat(RegionDesc.FILE_ID); public SecondaryAttributeTable SecondaryAttributeTable => ReadFromDat(SecondaryAttributeTable.FILE_ID); public SkillTable SkillTable => ReadFromDat(SkillTable.FILE_ID); public SpellComponentsTable SpellComponentsTable => ReadFromDat(SpellComponentsTable.FILE_ID); public SpellTable SpellTable => ReadFromDat(SpellTable.FILE_ID); public XpTable XpTable => ReadFromDat(XpTable.FILE_ID); public void ExtractCategorizedContents(string path) { foreach (KeyValuePair 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); } } } }