public void Load(XmlDocument xmlDoc) { Timekeeper.Start("load_char_attrib"); AttributeList.Clear(); SpecialAttributeList.Clear(); XmlDocument objXmlDocument = XmlManager.Load(_character.IsCritter ? "critters.xml" : "metatypes.xml"); XPathNavigator nav = objXmlDocument.CreateNavigator(); XmlNode objCharNode = objXmlDocument.SelectSingleNode("/chummer/metatypes/metatype[name = \"" + _character.Metatype + "\"]/metavariants/metavariant[name = \"" + _character.Metavariant + "\"]") ?? objXmlDocument.SelectSingleNode("/chummer/metatypes/metatype[name = \"" + _character.Metatype + "\"]"); XmlNode objCharNodeAnimalForm = null; // We only want to remake attributes for shifters in career mode, because they only get their second set of attributes when exporting from create mode into career mode if (_character.MetatypeCategory == "Shapeshifter" && _character.Created) { objCharNodeAnimalForm = objXmlDocument.SelectSingleNode("/chummer/metatypes/metatype[name = \"" + _character.Metatype + "\"]"); } foreach (string s in AttributeStrings) { XmlNodeList attNodeList = xmlDoc.SelectNodes("/character/attributes/attribute[name = \"" + s + "\"]"); // Couldn't find the appopriate attribute in the loaded file, so regenerate it from scratch. if (attNodeList.Count == 0) { CharacterAttrib att = new CharacterAttrib(_character, s); att = RemakeAttribute(att, objCharNode, nav); switch (att.ConvertToAttributeCategory(att.Abbrev)) { case CharacterAttrib.AttributeCategory.Special: SpecialAttributeList.Add(att); break; case CharacterAttrib.AttributeCategory.Standard: AttributeList.Add(att); break; } if (objCharNodeAnimalForm != null) { att = new CharacterAttrib(_character, s, CharacterAttrib.AttributeCategory.Shapeshifter); att = RemakeAttribute(att, objCharNodeAnimalForm, nav); switch (att.ConvertToAttributeCategory(att.Abbrev)) { case CharacterAttrib.AttributeCategory.Special: SpecialAttributeList.Add(att); break; case CharacterAttrib.AttributeCategory.Standard: AttributeList.Add(att); break; } } } else { foreach (XmlNode attNode in attNodeList) { CharacterAttrib att = new CharacterAttrib(_character, s); att.Load(attNode); switch (att.ConvertToAttributeCategory(att.Abbrev)) { case CharacterAttrib.AttributeCategory.Special: SpecialAttributeList.Add(att); break; case CharacterAttrib.AttributeCategory.Standard: AttributeList.Add(att); break; } } } } ResetBindings(); Timekeeper.Finish("load_char_attrib"); }
public void Load(XmlNode xmlSavedCharacterNode) { Timekeeper.Start("load_char_attrib"); foreach (CharacterAttrib objAttribute in AttributeList.Concat(SpecialAttributeList)) { objAttribute.UnbindAttribute(); } AttributeList.Clear(); SpecialAttributeList.Clear(); XmlDocument objXmlDocument = XmlManager.Load(_objCharacter.IsCritter ? "critters.xml" : "metatypes.xml"); XmlNode xmlMetatypeNode = objXmlDocument.SelectSingleNode("/chummer/metatypes/metatype[name = \"" + _objCharacter.Metatype + "\"]"); XmlNode xmlCharNode = xmlMetatypeNode?.SelectSingleNode("metavariants/metavariant[name = \"" + _objCharacter.Metavariant + "\"]") ?? xmlMetatypeNode; // We only want to remake attributes for shifters in career mode, because they only get their second set of attributes when exporting from create mode into career mode XmlNode xmlCharNodeAnimalForm = _objCharacter.MetatypeCategory == "Shapeshifter" && _objCharacter.Created ? xmlMetatypeNode : null; foreach (string strAttribute in AttributeStrings) { XmlNodeList lstAttributeNodes = xmlSavedCharacterNode.SelectNodes("attributes/attribute[name = \"" + strAttribute + "\"]"); // Couldn't find the appopriate attribute in the loaded file, so regenerate it from scratch. if (lstAttributeNodes == null || lstAttributeNodes.Count == 0 || xmlCharNodeAnimalForm != null && _objCharacter.LastSavedVersion < new Version("5.200.25")) { CharacterAttrib objAttribute; switch (CharacterAttrib.ConvertToAttributeCategory(strAttribute)) { case CharacterAttrib.AttributeCategory.Special: objAttribute = new CharacterAttrib(_objCharacter, strAttribute, CharacterAttrib.AttributeCategory.Special); objAttribute = RemakeAttribute(objAttribute, xmlCharNode); SpecialAttributeList.Add(objAttribute); break; case CharacterAttrib.AttributeCategory.Standard: objAttribute = new CharacterAttrib(_objCharacter, strAttribute); objAttribute = RemakeAttribute(objAttribute, xmlCharNode); AttributeList.Add(objAttribute); break; } if (xmlCharNodeAnimalForm == null) { continue; } objAttribute = new CharacterAttrib(_objCharacter, strAttribute, CharacterAttrib.AttributeCategory.Shapeshifter); objAttribute = RemakeAttribute(objAttribute, xmlCharNodeAnimalForm); switch (CharacterAttrib.ConvertToAttributeCategory(objAttribute.Abbrev)) { case CharacterAttrib.AttributeCategory.Special: SpecialAttributeList.Add(objAttribute); break; case CharacterAttrib.AttributeCategory.Standard: AttributeList.Add(objAttribute); break; } } else { foreach (XmlNode xmlAttributeNode in lstAttributeNodes) { CharacterAttrib att = new CharacterAttrib(_objCharacter, strAttribute); att.Load(xmlAttributeNode); switch (CharacterAttrib.ConvertToAttributeCategory(att.Abbrev)) { case CharacterAttrib.AttributeCategory.Special: SpecialAttributeList.Add(att); break; case CharacterAttrib.AttributeCategory.Standard: AttributeList.Add(att); break; } } } } Attributes = new ObservableCollection <CharacterAttrib> { _objCharacter.BOD, _objCharacter.AGI, _objCharacter.REA, _objCharacter.STR, _objCharacter.CHA, _objCharacter.INT, _objCharacter.LOG, _objCharacter.WIL, _objCharacter.EDG }; if (_objCharacter.MAGEnabled) { Attributes.Add(_objCharacter.MAG); if (_objCharacter.Options.MysAdeptSecondMAGAttribute && _objCharacter.IsMysticAdept) { Attributes.Add(_objCharacter.MAGAdept); } } if (_objCharacter.RESEnabled) { Attributes.Add(_objCharacter.RES); } if (_objCharacter.DEPEnabled) { Attributes.Add(_objCharacter.DEP); } ResetBindings(); _objCharacter.RefreshAttributeBindings(); Timekeeper.Finish("load_char_attrib"); }
public void Load(XmlNode xmlSavedCharacterNode) { Timekeeper.Start("load_char_attrib"); foreach (CharacterAttrib objAttribute in AttributeList.Concat(SpecialAttributeList)) { objAttribute.UnbindAttribute(); } AttributeList.Clear(); SpecialAttributeList.Clear(); XmlDocument objXmlDocument = XmlManager.Load(_objCharacter.IsCritter ? "critters.xml" : "metatypes.xml"); XmlNode xmlMetatypeNode = objXmlDocument.SelectSingleNode("/chummer/metatypes/metatype[name = \"" + _objCharacter.Metatype + "\"]"); XmlNode xmlCharNode = xmlMetatypeNode?.SelectSingleNode("metavariants/metavariant[name = \"" + _objCharacter.Metavariant + "\"]") ?? xmlMetatypeNode; // We only want to remake attributes for shifters in career mode, because they only get their second set of attributes when exporting from create mode into career mode XmlNode xmlCharNodeAnimalForm = _objCharacter.MetatypeCategory == "Shapeshifter" && _objCharacter.Created ? xmlMetatypeNode : null; foreach (string strAttribute in AttributeStrings) { XmlNodeList lstAttributeNodes = xmlSavedCharacterNode.SelectNodes("attributes/attribute[name = \"" + strAttribute + "\"]"); // Couldn't find the appopriate attribute in the loaded file, so regenerate it from scratch. if (lstAttributeNodes == null || lstAttributeNodes.Count == 0) { CharacterAttrib objAttribute = new CharacterAttrib(_objCharacter, strAttribute); objAttribute = RemakeAttribute(objAttribute, xmlCharNode); switch (CharacterAttrib.ConvertToAttributeCategory(objAttribute.Abbrev)) { case CharacterAttrib.AttributeCategory.Special: SpecialAttributeList.Add(objAttribute); break; case CharacterAttrib.AttributeCategory.Standard: AttributeList.Add(objAttribute); break; } if (xmlCharNodeAnimalForm != null) { objAttribute = new CharacterAttrib(_objCharacter, strAttribute, CharacterAttrib.AttributeCategory.Shapeshifter); objAttribute = RemakeAttribute(objAttribute, xmlCharNodeAnimalForm); switch (CharacterAttrib.ConvertToAttributeCategory(objAttribute.Abbrev)) { case CharacterAttrib.AttributeCategory.Special: SpecialAttributeList.Add(objAttribute); break; case CharacterAttrib.AttributeCategory.Standard: AttributeList.Add(objAttribute); break; } } } else { foreach (XmlNode xmlAttributeNode in lstAttributeNodes) { CharacterAttrib att = new CharacterAttrib(_objCharacter, strAttribute); att.Load(xmlAttributeNode); switch (CharacterAttrib.ConvertToAttributeCategory(att.Abbrev)) { case CharacterAttrib.AttributeCategory.Special: SpecialAttributeList.Add(att); break; case CharacterAttrib.AttributeCategory.Standard: AttributeList.Add(att); break; } } } } ResetBindings(); Timekeeper.Finish("load_char_attrib"); }