public override void OnSave(ConfigNode node) { base.OnSave(node); ConfigNode configNode; if (string.IsNullOrEmpty(exemptKerbals) == false) { node.AddValue("exemptKerbals", exemptKerbals); } foreach (string key in sciencePenalties.Keys) { configNode = new ConfigNode("SCIENCE_PENALTY"); configNode.AddValue("vesselID", key); configNode.AddValue("amount", sciencePenalties[key].ToString()); node.AddNode(configNode); } List <AstronautData> .Enumerator dataValues = crewData.GetListEnumerator(); List <string> .Enumerator keyValueEnumerator; string keyValueKey; AstronautData data; ConfigNode keyValueNode; while (dataValues.MoveNext()) { data = dataValues.Current; configNode = new ConfigNode("ASTRONAUT"); configNode.AddValue("name", data.name); configNode.AddValue("experienceTrait", data.experienceTrait); configNode.AddValue("mealsMissed", data.mealsMissed); configNode.AddValue("lastUpdated", data.lastUpdated); configNode.AddValue("isExempt", data.isExempt); keyValueEnumerator = data.keyValuePairs.GetListEnumerator(); while (keyValueEnumerator.MoveNext()) { keyValueKey = keyValueEnumerator.Current; keyValueNode = new ConfigNode("KEYVALUE"); keyValueNode.AddValue(keyValueKey, data.keyValuePairs[keyValueKey]); configNode.AddNode(keyValueNode); } node.AddNode(configNode); } }
/// <summary> /// Saves persistent astronaut data to the supplied config node. /// </summary> /// <param name="crewData">A map of astronaut data, keyed by kerbal name.</param> /// <param name="node">The ConfigNode to save the data to.</param> public static void Save(DictionaryValueList <string, AstronautData> crewData, ConfigNode node) { List <AstronautData> .Enumerator dataValues = crewData.GetListEnumerator(); AstronautData astronautData; ConfigNode configNode; ConfigNode astronautNode; string[] keys; while (dataValues.MoveNext()) { astronautData = dataValues.Current; astronautNode = new ConfigNode(AstronautNode); astronautNode.AddValue(AstronautNodeName, astronautData.name); astronautNode.AddValue(AstronautNodeTrait, astronautData.experienceTrait); astronautNode.AddValue(AstronautNodeUpdated, astronautData.lastUpdated); astronautNode.AddValue(AstronautNodeExempt, astronautData.isExempt); if (!string.IsNullOrEmpty(astronautData.conditionSummary)) { astronautNode.AddValue(AstronautNodeCondition, astronautData.conditionSummary); } if (!string.IsNullOrEmpty(astronautData.disqualifiedPreconditions)) { astronautNode.AddValue(AstronautNodeDisqualifiers, astronautData.disqualifiedPreconditions); } //Save keyvalue pairs keys = astronautData.keyValuePairs.Keys.ToArray(); for (int index = 0; index < keys.Length; index++) { configNode = new ConfigNode(KeyValueNode); configNode.AddValue(KeyValuePairKey, keys[index]); configNode.AddValue(KeyValuePairValue, astronautData.keyValuePairs[keys[index]]); astronautNode.AddNode(configNode); } //Save resource process results keys = astronautData.processedResourceSuccesses.Keys.ToArray(); for (int index = 0; index < keys.Length; index++) { configNode = new ConfigNode(ResourceCounterNode); configNode.AddValue(ResourceCounterName, keys[index]); configNode.AddValue(ResourceCounterIsSuccess, true); configNode.AddValue(ResourceCounterValue, astronautData.processedResourceSuccesses[keys[index]]); astronautNode.AddNode(configNode); } keys = astronautData.processedResourceFailures.Keys.ToArray(); for (int index = 0; index < keys.Length; index++) { configNode = new ConfigNode(ResourceCounterNode); configNode.AddValue(ResourceCounterName, keys[index]); configNode.AddValue(ResourceCounterIsSuccess, false); configNode.AddValue(ResourceCounterValue, astronautData.processedResourceFailures[keys[index]]); astronautNode.AddNode(configNode); } //Save roster resources SnacksRosterResource.SaveToAstronautData(astronautData.rosterResources, astronautNode); node.AddNode(astronautNode); } }