/// <summary> /// Create a weapon mount using names instead of IDs, because user readability is important and untrustworthy. /// </summary> /// <param name="xmlNode"></param> public void CreateByName(XmlNode xmlNode) { XmlDocument xmlDoc = XmlManager.Load("vehicles.xml"); WeaponMount objMount = this; XmlNode xmlDataNode = xmlDoc.SelectSingleNode($"/chummer/weaponmounts/weaponmount[name = \"{xmlNode["size"]?.InnerText}\" and category = \"Size\"]"); if (xmlDataNode != null) { objMount.Create(xmlDataNode); xmlDataNode = xmlDoc.SelectSingleNode($"/chummer/weaponmounts/weaponmount[name = \"{xmlNode["flexibility"]?.InnerText}\" and category = \"Flexibility\"]"); if (xmlDataNode != null) { WeaponMountOption objWeaponMountOption = new WeaponMountOption(_objCharacter); objWeaponMountOption.Create(xmlDataNode); objMount.WeaponMountOptions.Add(objWeaponMountOption); } xmlDataNode = xmlDoc.SelectSingleNode($"/chummer/weaponmounts/weaponmount[name = \"{xmlNode["control"]?.InnerText}\" and category = \"Control\"]"); if (xmlDataNode != null) { WeaponMountOption objWeaponMountOption = new WeaponMountOption(_objCharacter); objWeaponMountOption.Create(xmlDataNode); objMount.WeaponMountOptions.Add(objWeaponMountOption); } xmlDataNode = xmlDoc.SelectSingleNode($"/chummer/weaponmounts/weaponmount[name = \"{xmlNode["visibility"]?.InnerText}\" and category = \"Visibility\"]"); if (xmlDataNode != null) { WeaponMountOption objWeaponMountOption = new WeaponMountOption(_objCharacter); objWeaponMountOption.Create(xmlDataNode); objMount.WeaponMountOptions.Add(objWeaponMountOption); } _strLocation = xmlNode["location"]?.InnerText ?? string.Empty; _strAllowedWeapons = xmlNode["allowedweapons"]?.InnerText ?? string.Empty; xmlDataNode = xmlNode["mods"]; if (xmlDataNode == null) { return; } using (XmlNodeList xmlModList = xmlDataNode.SelectNodes("mod")) if (xmlModList != null) { foreach (XmlNode xmlModNode in xmlModList) { VehicleMod objMod = new VehicleMod(_objCharacter) { Parent = Parent, WeaponMountParent = this }; objMod.Load(xmlModNode); _lstMods.Add(objMod); } } } }
/// <summary> /// Load the VehicleMod from the XmlNode. /// </summary> /// <param name="objNode">XmlNode to load.</param> /// <param name="objVehicle">Vehicle that the mod is attached to.</param> /// <param name="blnCopy">Indicates whether a new item will be created as a copy of this one.</param> public void Load(XmlNode objNode, Vehicle objVehicle, bool blnCopy = false) { if (blnCopy) { _guiID = Guid.NewGuid(); } else { objNode.TryGetField("guid", Guid.TryParse, out _guiID); } objNode.TryGetStringFieldQuickly("name", ref _strName); if (!objNode.TryGetStringFieldQuickly("sourceid", ref _strSourceId)) { _strSourceId = XmlManager.Load("vehicles.xml").SelectSingleNode("/chummer/weaponmounts/weaponmount[name = \"" + _strName + "\"]/id")?.InnerText ?? Guid.NewGuid().ToString("D"); } objNode.TryGetStringFieldQuickly("category", ref _strCategory); objNode.TryGetStringFieldQuickly("limit", ref _strLimit); objNode.TryGetInt32FieldQuickly("slots", ref _intSlots); objNode.TryGetStringFieldQuickly("weaponmountcategories", ref _strWeaponMountCategories); objNode.TryGetStringFieldQuickly("page", ref _strPage); objNode.TryGetStringFieldQuickly("avail", ref _strAvail); objNode.TryGetStringFieldQuickly("cost", ref _strCost); objNode.TryGetDecFieldQuickly("markup", ref _decMarkup); objNode.TryGetStringFieldQuickly("source", ref _strSource); objNode.TryGetBoolFieldQuickly("included", ref _blnIncludeInVehicle); objNode.TryGetBoolFieldQuickly("installed", ref _blnInstalled); XmlNode xmlChildrenNode = objNode["weapons"]; if (xmlChildrenNode != null) { using (XmlNodeList xmlWeaponList = xmlChildrenNode.SelectNodes("weapon")) if (xmlWeaponList != null) { foreach (XmlNode xmlWeaponNode in xmlWeaponList) { Weapon objWeapon = new Weapon(_objCharacter) { ParentVehicle = Parent, ParentMount = this }; objWeapon.Load(xmlWeaponNode, blnCopy); _lstWeapons.Add(objWeapon); } } } xmlChildrenNode = objNode["weaponmountoptions"]; if (xmlChildrenNode != null) { using (XmlNodeList xmlWeaponMountOptionList = xmlChildrenNode.SelectNodes("weaponmountoption")) if (xmlWeaponMountOptionList != null) { foreach (XmlNode xmlWeaponMountOptionNode in xmlWeaponMountOptionList) { WeaponMountOption objWeaponMountOption = new WeaponMountOption(_objCharacter); objWeaponMountOption.Load(xmlWeaponMountOptionNode); WeaponMountOptions.Add(objWeaponMountOption); } } } xmlChildrenNode = objNode["mods"]; if (xmlChildrenNode != null) { using (XmlNodeList xmlModList = xmlChildrenNode.SelectNodes("mod")) if (xmlModList != null) { foreach (XmlNode xmlModNode in xmlModList) { VehicleMod objMod = new VehicleMod(_objCharacter) { Parent = Parent, WeaponMountParent = this }; objMod.Load(xmlModNode); _lstMods.Add(objMod); } } } objNode.TryGetStringFieldQuickly("notes", ref _strNotes); objNode.TryGetBoolFieldQuickly("discountedcost", ref _blnDiscountCost); objNode.TryGetStringFieldQuickly("extra", ref _strExtra); }
/// <summary> /// Load the Vehicle from the XmlNode. /// </summary> /// <param name="objNode">XmlNode to load.</param> public void Load(XmlNode objNode, bool blnCopy = false) { _guiID = Guid.Parse(objNode["guid"].InnerText); _strName = objNode["name"].InnerText; _strCategory = objNode["category"].InnerText; //Some vehicles have different Offroad Handling speeds. If so, we want to split this up for use with mods and such later. if (objNode["handling"].InnerText.Contains('/')) { _intHandling = Convert.ToInt32(objNode["handling"].InnerText.Split('/')[0]); _intOffroadHandling = Convert.ToInt32(objNode["handling"].InnerText.Split('/')[1]); } else { _intHandling = Convert.ToInt32(objNode["handling"].InnerText); if (objNode.InnerXml.Contains("offroadhandling")) { _intOffroadHandling = Convert.ToInt32(objNode["offroadhandling"].InnerText); } } _intAccel = Convert.ToInt32(objNode["accel"].InnerText); objNode.TryGetField("seats", out _intSeats); _intSpeed = Convert.ToInt32(objNode["speed"].InnerText); _intPilot = Convert.ToInt32(objNode["pilot"].InnerText); _intBody = Convert.ToInt32(objNode["body"].InnerText); _intArmor = Convert.ToInt32(objNode["armor"].InnerText); _intSensor = Convert.ToInt32(objNode["sensor"].InnerText); objNode.TryGetField("devicerating", out _intDeviceRating); _strAvail = objNode["avail"].InnerText; _strCost = objNode["cost"].InnerText; objNode.TryGetField("addslots", out _intAddSlots); objNode.TryGetField("modslots", out _intModSlots); _strSource = objNode["source"].InnerText; objNode.TryGetField("page", out _strPage); objNode.TryGetField("matrixcmfilled", out _intMatrixCMFilled); objNode.TryGetField("physicalcmfilled", out _intPhysicalCMFilled); objNode.TryGetField("vehiclename", out _strVehicleName); objNode.TryGetField("homenode", out _blnHomeNode); if (GlobalOptions.Instance.Language != "en-us") { XmlDocument objXmlDocument = XmlManager.Instance.Load("vehicles.xml"); XmlNode objVehicleNode = objXmlDocument.SelectSingleNode("/chummer/vehicles/vehicle[name = \"" + _strName + "\"]"); if (objVehicleNode != null) { if (objVehicleNode["translate"] != null) _strAltName = objVehicleNode["translate"].InnerText; if (objVehicleNode["altpage"] != null) _strAltPage = objVehicleNode["altpage"].InnerText; } objVehicleNode = objXmlDocument.SelectSingleNode("/chummer/categories/category[. = \"" + _strCategory + "\"]"); if (objVehicleNode != null) { if (objVehicleNode.Attributes["translate"] != null) _strAltCategory = objVehicleNode.Attributes["translate"].InnerText; } } if (objNode.InnerXml.Contains("<mods>")) { XmlNodeList nodChildren = objNode.SelectNodes("mods/mod"); foreach (XmlNode nodChild in nodChildren) { VehicleMod objMod = new VehicleMod(_objCharacter); objMod.Load(nodChild, blnCopy); _lstVehicleMods.Add(objMod); } } if (objNode.InnerXml.Contains("<gears>")) { XmlNodeList nodChildren = objNode.SelectNodes("gears/gear"); foreach (XmlNode nodChild in nodChildren) { switch (nodChild["category"].InnerText) { case "Commlinks": case "Commlink Accessories": case "Cyberdecks": case "Rigger Command Consoles": Commlink objCommlink = new Commlink(_objCharacter); objCommlink.Load(nodChild, blnCopy); _lstGear.Add(objCommlink); break; default: Gear objGear = new Gear(_objCharacter); objGear.Load(nodChild, blnCopy); _lstGear.Add(objGear); break; } } } if (objNode.InnerXml.Contains("<weapons>")) { XmlNodeList nodChildren = objNode.SelectNodes("weapons/weapon"); foreach (XmlNode nodChild in nodChildren) { Weapon objWeapon = new Weapon(_objCharacter); objWeapon.Load(nodChild, blnCopy); objWeapon.VehicleMounted = true; if (objWeapon.UnderbarrelWeapons.Count > 0) { foreach (Weapon objUnderbarrel in objWeapon.UnderbarrelWeapons) objUnderbarrel.VehicleMounted = true; } _lstWeapons.Add(objWeapon); } } objNode.TryGetField("notes", out _strNotes); objNode.TryGetField("dealerconnection", out _blnDealerConnectionDiscount); if (objNode["locations"] != null) { // Locations. foreach (XmlNode objXmlLocation in objNode.SelectNodes("locations/location")) { _lstLocations.Add(objXmlLocation.InnerText); } } if (blnCopy) { _guiID = Guid.NewGuid(); _blnHomeNode = false; } }