/// <summary> /// Save the Character to an XML file. /// </summary> public void Save() { FileStream objStream = new FileStream(_strFileName, FileMode.Create, FileAccess.Write, FileShare.ReadWrite); XmlTextWriter objWriter = new XmlTextWriter(objStream, Encoding.Unicode); objWriter.Formatting = Formatting.Indented; objWriter.Indentation = 1; objWriter.IndentChar = '\t'; objWriter.WriteStartDocument(); // <character> objWriter.WriteStartElement("character"); // <appversion /> objWriter.WriteElementString("appversion", Application.ProductVersion.ToString().Replace("0.0.0.", string.Empty)); // <gameedition /> objWriter.WriteElementString("gameedition", "SR4"); // <settings /> objWriter.WriteElementString("settings", _strSettingsFileName); // <metatype /> objWriter.WriteElementString("metatype", _strMetatype); // <metatypebp /> objWriter.WriteElementString("metatypebp", _intMetatypeBP.ToString()); // <metavariant /> objWriter.WriteElementString("metavariant", _strMetavariant); // <metatypecategory /> objWriter.WriteElementString("metatypecategory", _strMetatypeCategory); // <movement /> objWriter.WriteElementString("movement", _strMovement); // <mutantcritterbaseskills /> objWriter.WriteElementString("mutantcritterbaseskills", _intMutantCritterBaseSkills.ToString()); // <essenceatspecialstart /> objWriter.WriteElementString("essenceatspecialstart", _decEssenceAtSpecialStart.ToString(GlobalOptions.Instance.CultureInfo)); // <name /> objWriter.WriteElementString("name", _strName); // <mugshot /> objWriter.WriteElementString("mugshot", _strMugshot); // <sex /> objWriter.WriteElementString("sex", _strSex); // <age /> objWriter.WriteElementString("age", _strAge); // <eyes /> objWriter.WriteElementString("eyes", _strEyes); // <height /> objWriter.WriteElementString("height", _strHeight); // <weight /> objWriter.WriteElementString("weight", _strWeight); // <skin /> objWriter.WriteElementString("skin", _strSkin); // <hair /> objWriter.WriteElementString("hair", _strHair); // <description /> objWriter.WriteElementString("description", _strDescription); // <background /> objWriter.WriteElementString("background", _strBackground); // <concept /> objWriter.WriteElementString("concept", _strConcept); // <notes /> objWriter.WriteElementString("notes", _strNotes); // <alias /> objWriter.WriteElementString("alias", _strAlias); // <playername /> objWriter.WriteElementString("playername", _strPlayerName); // <gamenotes /> objWriter.WriteElementString("gamenotes", _strGameNotes); // <ignorerules /> if (_blnIgnoreRules) objWriter.WriteElementString("ignorerules", _blnIgnoreRules.ToString()); // <iscritter /> if (_blnIsCritter) objWriter.WriteElementString("iscritter", _blnIsCritter.ToString()); if (_blnPossessed) objWriter.WriteElementString("possessed", _blnPossessed.ToString()); if (_blnOverrideSpecialAttributeESSLoss) objWriter.WriteElementString("overridespecialattributeessloss", _blnOverrideSpecialAttributeESSLoss.ToString()); // <karma /> objWriter.WriteElementString("karma", _intKarma.ToString()); // <totalkarma /> objWriter.WriteElementString("totalkarma", _intTotalKarma.ToString()); // <streetcred /> objWriter.WriteElementString("streetcred", _intStreetCred.ToString()); // <notoriety /> objWriter.WriteElementString("notoriety", _intNotoriety.ToString()); // <publicaware /> objWriter.WriteElementString("publicawareness", _intPublicAwareness.ToString()); // <burntstreetcred /> objWriter.WriteElementString("burntstreetcred", _intBurntStreetCred.ToString()); // <created /> objWriter.WriteElementString("created", _blnCreated.ToString()); // <maxavail /> objWriter.WriteElementString("maxavail", _intMaxAvail.ToString()); // <nuyen /> objWriter.WriteElementString("nuyen", _intNuyen.ToString()); // <buildpoints /> objWriter.WriteElementString("bp", _intBuildPoints.ToString()); // <buildkarma /> objWriter.WriteElementString("buildkarma", _intBuildKarma.ToString()); // <buildmethod /> objWriter.WriteElementString("buildmethod", _objBuildMethod.ToString()); // <knowpts /> objWriter.WriteElementString("knowpts", _intKnowledgeSkillPoints.ToString()); // <nuyenbp /> objWriter.WriteElementString("nuyenbp", _decNuyenBP.ToString()); // <nuyenmaxbp /> objWriter.WriteElementString("nuyenmaxbp", _decNuyenMaximumBP.ToString()); // <adept /> objWriter.WriteElementString("adept", _blnAdeptEnabled.ToString()); // <magician /> objWriter.WriteElementString("magician", _blnMagicianEnabled.ToString()); // <technomancer /> objWriter.WriteElementString("technomancer", _blnTechnomancerEnabled.ToString()); // <initiationoverride /> objWriter.WriteElementString("initiationoverride", _blnInitiationEnabled.ToString()); // <critter /> objWriter.WriteElementString("critter", _blnCritterEnabled.ToString()); // <uneducated /> objWriter.WriteElementString("uneducated", _blnUneducated.ToString()); // <uncouth /> objWriter.WriteElementString("uncouth", _blnUncouth.ToString()); // <infirm /> objWriter.WriteElementString("infirm", _blnInfirm.ToString()); // <blackmarket /> objWriter.WriteElementString("blackmarket", _blnBlackMarket.ToString()); // <attributes> objWriter.WriteStartElement("attributes"); _attBOD.Save(objWriter); _attAGI.Save(objWriter); _attREA.Save(objWriter); _attSTR.Save(objWriter); _attCHA.Save(objWriter); _attINT.Save(objWriter); _attLOG.Save(objWriter); _attWIL.Save(objWriter); _attINI.Save(objWriter); _attEDG.Save(objWriter); _attMAG.Save(objWriter); _attRES.Save(objWriter); _attESS.Save(objWriter); // Include any special A.I. Attributes if applicable. if (_strMetatype.EndsWith("A.I.") || _strMetatypeCategory == "Technocritters" || _strMetatypeCategory == "Protosapients") { objWriter.WriteElementString("response", _intResponse.ToString()); objWriter.WriteElementString("signal", _intSignal.ToString()); } if (_intMaxSkillRating > 0) objWriter.WriteElementString("maxskillrating", _intMaxSkillRating.ToString()); // </attributes> objWriter.WriteEndElement(); // <magenabled /> objWriter.WriteElementString("magenabled", _blnMAGEnabled.ToString()); // <initiategrade /> objWriter.WriteElementString("initiategrade", _intInitiateGrade.ToString()); // <resenabled /> objWriter.WriteElementString("resenabled", _blnRESEnabled.ToString()); // <submersiongrade /> objWriter.WriteElementString("submersiongrade", _intSubmersionGrade.ToString()); // <groupmember /> objWriter.WriteElementString("groupmember", _blnGroupMember.ToString()); // <groupname /> objWriter.WriteElementString("groupname", _strGroupName); // <groupnotes /> objWriter.WriteElementString("groupnotes", _strGroupNotes); // External reader friendly stuff. objWriter.WriteElementString("totaless", Essence.ToString()); // Write out the Mystic Adept MAG split info. if (_blnAdeptEnabled && _blnMagicianEnabled) { objWriter.WriteElementString("magsplitadept", _intMAGAdept.ToString()); objWriter.WriteElementString("magsplitmagician", _intMAGMagician.ToString()); } // Write the Magic Tradition. objWriter.WriteElementString("tradition", _strMagicTradition); // Write the Technomancer Stream. objWriter.WriteElementString("stream", _strTechnomancerStream); // Condition Monitor Progress. // <physicalcmfilled /> objWriter.WriteElementString("physicalcmfilled", _intPhysicalCMFilled.ToString()); // <stuncmfilled /> objWriter.WriteElementString("stuncmfilled", _intStunCMFilled.ToString()); // <skillgroups> objWriter.WriteStartElement("skillgroups"); foreach (SkillGroup objSkillGroup in _lstSkillGroups) { objSkillGroup.Save(objWriter); } // </skillgroups> objWriter.WriteEndElement(); // <skills> objWriter.WriteStartElement("skills"); foreach (Skill objSkill in _lstSkills) { objSkill.Save(objWriter); } // </skills> objWriter.WriteEndElement(); // <contacts> objWriter.WriteStartElement("contacts"); foreach (Contact objContact in _lstContacts) { objContact.Save(objWriter); } // </contacts> objWriter.WriteEndElement(); // <spells> objWriter.WriteStartElement("spells"); foreach (Spell objSpell in _lstSpells) { objSpell.Save(objWriter); } // </spells> objWriter.WriteEndElement(); // <foci> objWriter.WriteStartElement("foci"); foreach (Focus objFocus in _lstFoci) { objFocus.Save(objWriter); } // </foci> objWriter.WriteEndElement(); // <stackedfoci> objWriter.WriteStartElement("stackedfoci"); foreach (StackedFocus objStack in _lstStackedFoci) { objStack.Save(objWriter); } // </stackedfoci> objWriter.WriteEndElement(); // <powers> objWriter.WriteStartElement("powers"); foreach (Power objPower in _lstPowers) { objPower.Save(objWriter); } // </powers> objWriter.WriteEndElement(); // <spirits> objWriter.WriteStartElement("spirits"); foreach (Spirit objSpirit in _lstSpirits) { objSpirit.Save(objWriter); } // </spirits> objWriter.WriteEndElement(); // <techprograms> objWriter.WriteStartElement("techprograms"); foreach (TechProgram objProgram in _lstTechPrograms) { objProgram.Save(objWriter); } // </techprograms> objWriter.WriteEndElement(); // <martialarts> objWriter.WriteStartElement("martialarts"); foreach (MartialArt objMartialArt in _lstMartialArts) { objMartialArt.Save(objWriter); } // </martialarts> objWriter.WriteEndElement(); // <martialartmaneuvers> objWriter.WriteStartElement("martialartmaneuvers"); foreach (MartialArtManeuver objManeuver in _lstMartialArtManeuvers) { objManeuver.Save(objWriter); } // </martialartmaneuvers> objWriter.WriteEndElement(); // <armors> objWriter.WriteStartElement("armors"); foreach (Armor objArmor in _lstArmor) { objArmor.Save(objWriter); } // </armors> objWriter.WriteEndElement(); // <weapons> objWriter.WriteStartElement("weapons"); foreach (Weapon objWeapon in _lstWeapons) { objWeapon.Save(objWriter); } // </weapons> objWriter.WriteEndElement(); // <cyberwares> objWriter.WriteStartElement("cyberwares"); foreach (Cyberware objCyberware in _lstCyberware) { objCyberware.Save(objWriter); } // </cyberwares> objWriter.WriteEndElement(); // <qualities> objWriter.WriteStartElement("qualities"); foreach (Quality objQuality in _lstQualities) { objQuality.Save(objWriter); } // </qualities> objWriter.WriteEndElement(); // <lifestyles> objWriter.WriteStartElement("lifestyles"); foreach (Lifestyle objLifestyle in _lstLifestyles) { objLifestyle.Save(objWriter); } // </lifestyles> objWriter.WriteEndElement(); // <gears> objWriter.WriteStartElement("gears"); foreach (Gear objGear in _lstGear) { // Use the Gear's SubClass if applicable. if (objGear.GetType() == typeof(Commlink)) { Commlink objCommlink = new Commlink(this); objCommlink = (Commlink)objGear; objCommlink.Save(objWriter); } else if (objGear.GetType() == typeof(OperatingSystem)) { OperatingSystem objOperatinSystem = new OperatingSystem(this); objOperatinSystem = (OperatingSystem)objGear; objOperatinSystem.Save(objWriter); } else { objGear.Save(objWriter); } } // </gears> objWriter.WriteEndElement(); // <vehicles> objWriter.WriteStartElement("vehicles"); foreach (Vehicle objVehicle in _lstVehicles) { objVehicle.Save(objWriter); } // </vehicles> objWriter.WriteEndElement(); // <metamagics> objWriter.WriteStartElement("metamagics"); foreach (Metamagic objMetamagic in _lstMetamagics) { objMetamagic.Save(objWriter); } // </metamagics> objWriter.WriteEndElement(); // <critterpowers> objWriter.WriteStartElement("critterpowers"); foreach (CritterPower objPower in _lstCritterPowers) { objPower.Save(objWriter); } // </critterpowers> objWriter.WriteEndElement(); // <initiationgrades> objWriter.WriteStartElement("initiationgrades"); foreach (InitiationGrade objGrade in _lstInitiationGrades) { objGrade.Save(objWriter); } // </initiationgrades> objWriter.WriteEndElement(); // <improvements> objWriter.WriteStartElement("improvements"); foreach (Improvement objImprovement in _lstImprovements) { objImprovement.Save(objWriter); } // </improvements> objWriter.WriteEndElement(); // <expenses> objWriter.WriteStartElement("expenses"); foreach (ExpenseLogEntry objExpenseLogEntry in _lstExpenseLog) { objExpenseLogEntry.Save(objWriter); } // </expenses> objWriter.WriteEndElement(); // <locations> objWriter.WriteStartElement("locations"); foreach (string strLocation in _lstLocations) { objWriter.WriteElementString("location", strLocation); } // </locations> objWriter.WriteEndElement(); // <armorbundles> objWriter.WriteStartElement("armorbundles"); foreach (string strBundle in _lstArmorBundles) { objWriter.WriteElementString("armorbundle", strBundle); } // </armorbundles> objWriter.WriteEndElement(); // <weaponlocations> objWriter.WriteStartElement("weaponlocations"); foreach (string strLocation in _lstWeaponLocations) { objWriter.WriteElementString("weaponlocation", strLocation); } // </weaponlocations> objWriter.WriteEndElement(); // <improvementgroups> objWriter.WriteStartElement("improvementgroups"); foreach (string strGroup in _lstImprovementGroups) { objWriter.WriteElementString("improvementgroup", strGroup); } // </improvementgroups> objWriter.WriteEndElement(); // <calendar> objWriter.WriteStartElement("calendar"); foreach (CalendarWeek objWeek in _lstCalendar) { objWeek.Save(objWriter); } objWriter.WriteEndElement(); // </calendar> // </character> objWriter.WriteEndElement(); objWriter.WriteEndDocument(); objWriter.Close(); objStream.Close(); }