/// <summary> /// Applies metadata to an in-memory ESD, adding additional info. /// </summary> public static void Apply(ESDL esd, ESDMetadata meta) { if (meta.ESDHash.Trim().ToUpper() != esd.LastSavedHash.Trim().ToUpper()) { throw new Exception("MD5 Hash of ESD file does not match that of the saved metadata. Metadata was not made for this ESD file."); } esd.StateGroupNames = meta.StateGroupNames; foreach (var g in esd.StateGroups.Keys) { foreach (var s in esd.StateGroups[g].Keys) { esd.StateGroups[g][s].Name = meta.StateMetadatas[g][s].Name; esd.StateGroups[g][s].EntryScript = meta.StateMetadatas[g][s].EntryScript; esd.StateGroups[g][s].ExitScript = meta.StateMetadatas[g][s].ExitScript; esd.StateGroups[g][s].WhileScript = meta.StateMetadatas[g][s].WhileScript; } } foreach (var g in esd.GetAllConditions()) { foreach (var c in g.Value) { c.Name = meta.ConditionMetadatas[c.MetaRefID].Name; c.Evaluator = meta.ConditionMetadatas[c.MetaRefID].Evaluator; c.PassScript = meta.ConditionMetadatas[c.MetaRefID].PassScript; } } }
byte[] WriteESD(ESDL esd) { EzSembleContext context = EzSembleContext.LoadFromXml(docPath); // ESD esd = new ESD(); using (MemoryStream stream = new MemoryStream()) { esd.WriteWithContext(new BinaryWriterEx(false, stream), context); return(stream.ToArray()); } }
private ESDL ReadESD(byte[] data, string path, int check = -1) { if (check > 1) { int esdId = int.Parse(path.Substring(1)); if (esdId != check) { return(null); } } EzSembleContext context = EzSembleContext.LoadFromXml(docPath); ESDL esd = new ESDL(); esd.ReadWithContext(new BinaryReaderEx(false, data), context); return(esd); }
public void Custom(int esdId) { Dictionary <string, Dictionary <string, ESDL> > esds = LoadBnd(esdDir, (data, path) => ReadESD(data, path, esdId)); if (esds.Count != 1) { throw new Exception($"Found in {esds.Count} map"); } string map = esds.Keys.First(); if (esds[map].Count != 1) { throw new Exception($"Found in {esds[map].Count} esds within {map}"); } string name = esds[map].Keys.First(); ESDL esd = esds[map][name]; // Do custom logic here }
/// <summary> /// Generates metadata based on the in-memory ESD file. /// </summary> public static ESDMetadata Generate(ESDL esd) { var meta = new ESDMetadata(); meta.ESDHash = esd.LastSavedHash; meta.StateGroupNames = esd.StateGroupNames; foreach (var g in esd.StateGroups.Keys) { meta.StateMetadatas.Add(g, new Dictionary <long, StateMetadata>()); foreach (var s in esd.StateGroups[g].Keys) { meta.StateMetadatas[g].Add(s, new StateMetadata() { Name = esd.StateGroups[g][s].Name, EntryScript = esd.StateGroups[g][s].EntryScript, ExitScript = esd.StateGroups[g][s].ExitScript, WhileScript = esd.StateGroups[g][s].WhileScript, }); } } foreach (var g in esd.GetAllConditions()) { foreach (var c in g.Value) { meta.ConditionMetadatas.Add(c.MetaRefID, new ConditionMetadata() { Name = c.Name, Evaluator = c.Evaluator, PassScript = c.PassScript, }); } } return(meta); }