/// <summary> /// Applies metadata to an in-memory ESD, adding additional info. /// </summary> public static void Apply(SoulsFormats.ESD.ESD 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; } } }
/// <summary> /// Generates metadata based on the in-memory ESD file. /// </summary> public static ESDMetadata Generate(SoulsFormats.ESD.ESD 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); }