static void Main(string[] args) { Serializer ser = new Serializer(); Trait xmlTrait = ser.Deserialize <Trait>("trait.xml"); EffectCity xmlEffectCity = ser.Deserialize <EffectCity>("effectCity.xml"); EffectPlayer xmlEffectPlayer = ser.Deserialize <EffectPlayer>("effectPlayer.xml"); EffectUnit xmlEffectUnit = ser.Deserialize <EffectUnit>("effectUnit.xml"); // Load Trait.xml, then load other XMLs // Look for trait in city, player, unit. // If found, add to output obj OldWorldXmlParser parser = new OldWorldXmlParser(); var vals = parser.GetArchtypeMetadata(); foreach (var key in vals) { Console.WriteLine(key.Key); foreach (var val in key.Value) { Console.WriteLine($"{val.Key} + {val.Value}"); } } Console.Read(); }
public Dictionary <string, Dictionary <string, object> > GetArchtypeMetadata() { var retDict = new Dictionary <string, Dictionary <string, object> >(); Serializer ser = new Serializer(); Trait xmlTrait = ser.Deserialize <Trait>("trait.xml"); EffectCity xmlEffectCity = ser.Deserialize <EffectCity>("effectCity.xml"); EffectPlayer xmlEffectPlayer = ser.Deserialize <EffectPlayer>("effectPlayer.xml"); EffectUnit xmlEffectUnit = ser.Deserialize <EffectUnit>("effectUnit.xml"); var listOfArchtypes = GetArchtypes(xmlTrait); foreach (var archtype in listOfArchtypes) { var traitEntry = xmlTrait.Entries.First(a => a.Name.Contains(archtype)); var archtypeStats = new Dictionary <string, object>(); // LeaderEffectPlayer - EffectPlayer (applies global) // GeneralEffectUnit - EffectUnit (applies bonuses to the unit it is controlling.) // LeaderEffectUnit - EffectUnit (not sure) // GovernorEffectCity - EffectCity (governor) if (traitEntry.LeaderEffectPlayer != null) { //var newdict = GetLeaderEffectPlayer(zealotEntry, xmlEffectPlayer); var effPlayerEntry = xmlEffectPlayer.Entries.First(a => a.zType == traitEntry.LeaderEffectPlayer); var newdict = GetKeyValuesFromXml(effPlayerEntry); archtypeStats = archtypeStats.Concat(newdict).ToDictionary(x => x.Key, x => x.Value); } if (traitEntry.GeneralEffectUnit != null) { var effPlayerEntry = xmlEffectUnit.Entries.First(a => a.zType == traitEntry.GeneralEffectUnit); var newdict = GetKeyValuesFromXml(effPlayerEntry); archtypeStats = archtypeStats.Concat(newdict).ToDictionary(x => x.Key, x => x.Value); } if (traitEntry.LeaderEffectUnit != null) { var effPlayerEntry = xmlEffectUnit.Entries.First(a => a.zType == traitEntry.LeaderEffectUnit); var newdict = GetKeyValuesFromXml(effPlayerEntry); archtypeStats = archtypeStats.Concat(newdict).ToDictionary(x => x.Key, x => x.Value); } if (traitEntry.GovernorEffectCity != null) { var effPlayerEntry = xmlEffectCity.Entries.First(a => a.zType == traitEntry.GovernorEffectCity); var newdict = GetKeyValuesFromXml(effPlayerEntry); archtypeStats = archtypeStats.Concat(newdict).ToDictionary(x => x.Key, x => x.Value); } List <string> removeProcessedKeys = new List <string>(); Dictionary <string, object> postProcessDict = new Dictionary <string, object>(); // Post process elements. foreach (var stat in archtypeStats) { if (stat.Key.Contains("EffectCity")) { var entry = xmlEffectCity.Entries.First(a => a.zType == (string)stat.Value); var childValues = GetKeyValuesFromXml(entry); foreach (var childval in childValues) { postProcessDict[childval.Key] = childval.Value; } removeProcessedKeys.Add("EffectCity"); } } removeProcessedKeys.ForEach(a => archtypeStats.Remove(a)); archtypeStats = archtypeStats.Concat(postProcessDict).ToDictionary(x => x.Key, x => x.Value); retDict[archtype] = archtypeStats; } return(retDict); }