/// <summary> /// Parse an XmlNode and create the Cyberware for it and its children, adding them to the list of Cyberware in the suite. /// </summary> /// <param name="objXmlSuite">XmlNode to parse.</param> /// <param name="objGrade">Grade that the Cyberware should be created with.</param> /// <param name="objParent">Parent that child items should be assigned to.</param> private void ParseNode(XmlNode objXmlSuite, Grade objGrade, Cyberware objParent) { // Run through all of the items in the Suite list. foreach (XmlNode objXmlItem in objXmlSuite.SelectNodes(_strType + "s/" + _strType)) { int intRating = 0; if (objXmlItem["rating"] != null) { intRating = Convert.ToInt32(objXmlItem["rating"].InnerText); } // Retrieve the information for the current piece of Cyberware and add it to the ESS and Cost totals. XmlNode objXmlCyberware = _objXmlDocument.SelectSingleNode("/chummer/" + _strType + "s/" + _strType + "[name = \"" + objXmlItem["name"].InnerText + "\"]"); TreeNode objTreeNode = new TreeNode(); List <Weapon> lstWeapons = new List <Weapon>(); List <TreeNode> lstWeaponNodes = new List <TreeNode>(); List <Vehicle> objVehicles = new List <Vehicle>(); List <TreeNode> objVehicleNodes = new List <TreeNode>(); Cyberware objCyberware = new Cyberware(_objCharacter); objCyberware.Create(objXmlCyberware, _objCharacter, objGrade, _objSource, intRating, objTreeNode, lstWeapons, lstWeaponNodes, objVehicles, objVehicleNodes, false, false); objCyberware.Suite = true; if (objParent == null) { _lstCyberware.Add(objCyberware); } else { objParent.Children.Add(objCyberware); } ParseNode(objXmlItem, objGrade, objCyberware); } }
/// <summary> /// Parse an XmlNode and create the Cyberware for it and its children, adding them to the list of Cyberware in the suite. /// </summary> /// <param name="xmlSuite">XmlNode to parse.</param> /// <param name="objGrade">Grade that the Cyberware should be created with.</param> /// <param name="lstChildren">List for children to which child items should be assigned.</param> private void ParseNode(XmlNode xmlSuite, Grade objGrade, IList <Cyberware> lstChildren) { // Run through all of the items in the Suite list. using (XmlNodeList xmlChildrenList = xmlSuite.SelectNodes(_strType + "s/" + _strType)) if (xmlChildrenList?.Count > 0) { foreach (XmlNode xmlChildItem in xmlChildrenList) { int intRating = 0; xmlChildItem.TryGetInt32FieldQuickly("rating", ref intRating); string strName = string.Empty; xmlChildItem.TryGetStringFieldQuickly("name", ref strName); // Retrieve the information for the current piece of Cyberware and add it to the ESS and Cost totals. XmlNode objXmlCyberware = _objXmlDocument.SelectSingleNode("/chummer/" + _strType + "s/" + _strType + "[name = \"" + strName + "\"]"); List <Weapon> lstWeapons = new List <Weapon>(); List <Vehicle> lstVehicles = new List <Vehicle>(); Cyberware objCyberware = new Cyberware(_objCharacter); objCyberware.Create(objXmlCyberware, objGrade, _eSource, intRating, lstWeapons, lstVehicles, false, false); objCyberware.Suite = true; lstChildren.Add(objCyberware); ParseNode(xmlChildItem, objGrade, objCyberware.Children); } } }
public void CreateAllBiowareTest() { // Create a new Human character. Character objCharacter = new Character(); objCharacter.LoadMetatype(Guid.Parse("e28e7075-f635-4c02-937c-e4fc61c51602")); TreeNode objNode = new TreeNode(); List<Weapon> lstWeapons = new List<Weapon>(); List<TreeNode> lstTreeNodes = new List<TreeNode>(); GradeList objGradeList = new GradeList(); objGradeList.LoadList(Improvement.ImprovementSource.Bioware); XmlDocument objXmlDocument = XmlManager.Instance.Load("bioware.xml"); foreach (XmlNode objXmlNode in objXmlDocument.SelectNodes("/chummer/biowares/bioware")) { Cyberware objCyberware = new Cyberware(objCharacter); objCyberware.Create(objXmlNode, objCharacter, objGradeList.GetGrade("Standard"), Improvement.ImprovementSource.Bioware, 1, objNode, lstWeapons, lstTreeNodes); } }
public void CreateAllCyberwareTest() { // Create a new Human character. Character objCharacter = new Character(); objCharacter.LoadMetatype(Guid.Parse("e28e7075-f635-4c02-937c-e4fc61c51602")); TreeNode objNode = new TreeNode(); List <Weapon> lstWeapons = new List <Weapon>(); List <TreeNode> lstTreeNodes = new List <TreeNode>(); GradeList objGradeList = new GradeList(); objGradeList.LoadList(Improvement.ImprovementSource.Cyberware); XmlDocument objXmlDocument = XmlManager.Instance.Load("cyberware.xml"); foreach (XmlNode objXmlNode in objXmlDocument.SelectNodes("/chummer/cyberwares/cyberware")) { Cyberware objCyberware = new Cyberware(objCharacter); objCyberware.Create(objXmlNode, objCharacter, objGradeList.GetGrade("Standard"), Improvement.ImprovementSource.Cyberware, 1, objNode, lstWeapons, lstTreeNodes); } }
/// <summary> /// Open the Select Cyberware window and handle adding to the Tree and Character. /// </summary> private bool PickCyberware(Improvement.ImprovementSource objSource = Improvement.ImprovementSource.Cyberware) { Cyberware objSelectedCyberware = new Cyberware(_objCharacter); int intNode = 0; if (objSource == Improvement.ImprovementSource.Bioware) intNode = 1; // Attempt to locate the selected piece of Cyberware. try { if (treCyberware.SelectedNode.Level > 0) objSelectedCyberware = _objFunctions.FindCyberware(treCyberware.SelectedNode.Tag.ToString(), _objCharacter.Cyberware); } catch { } frmSelectCyberware frmPickCyberware = new frmSelectCyberware(_objCharacter); double dblMultiplier = 1; // Apply the character's Cyberware Essence cost multiplier if applicable. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.CyberwareEssCost) != 0 && objSource == Improvement.ImprovementSource.Cyberware) { foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.CyberwareEssCost && objImprovement.Enabled) dblMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.CharacterESSMultiplier = dblMultiplier; } // Apply the character's Bioware Essence cost multiplier if applicable. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.BiowareEssCost) != 0 && objSource == Improvement.ImprovementSource.Bioware) { foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.BiowareEssCost && objImprovement.Enabled) dblMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.CharacterESSMultiplier = dblMultiplier; } // Apply the character's Basic Bioware Essence cost multiplier if applicable. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.BasicBiowareEssCost) != 0 && objSource == Improvement.ImprovementSource.Bioware) { double dblBasicMultiplier = 1; foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.BasicBiowareEssCost && objImprovement.Enabled) dblBasicMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.BasicBiowareESSMultiplier = dblBasicMultiplier; } // Genetech Cost multiplier. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.GenetechCostMultiplier) != 0 && objSource == Improvement.ImprovementSource.Bioware) { dblMultiplier = 1; foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.GenetechCostMultiplier && objImprovement.Enabled) dblMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.GenetechCostMultiplier = dblMultiplier; } // Transgenics Cost multiplier. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.TransgenicsBiowareCost) != 0 && objSource == Improvement.ImprovementSource.Bioware) { dblMultiplier = 1; foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.TransgenicsBiowareCost && objImprovement.Enabled) dblMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.TransgenicsBiowareCostMultiplier = dblMultiplier; } try { if (treCyberware.SelectedNode.Level > 0) { frmPickCyberware.SetGrade = cboCyberwareGrade.SelectedValue.ToString(); frmPickCyberware.LockGrade(); // If the Cyberware has a Capacity with no brackets (meaning it grants Capacity), show only Subsystems (those that conume Capacity). if (!objSelectedCyberware.Capacity.Contains('[')) { frmPickCyberware.ShowOnlySubsystems = true; frmPickCyberware.Subsystems = objSelectedCyberware.Subsytems; frmPickCyberware.MaximumCapacity = objSelectedCyberware.CapacityRemaining; } } } catch { } if (objSource == Improvement.ImprovementSource.Bioware) frmPickCyberware.WindowMode = frmSelectCyberware.Mode.Bioware; frmPickCyberware.AllowModularPlugins = objSelectedCyberware.AllowModularPlugins; frmPickCyberware.ShowDialog(this); // Make sure the dialogue window was not canceled. if (frmPickCyberware.DialogResult == DialogResult.Cancel) return false; // Open the Cyberware XML file and locate the selected piece. XmlDocument objXmlDocument = new XmlDocument(); if (objSource == Improvement.ImprovementSource.Bioware) objXmlDocument = XmlManager.Instance.Load("bioware.xml"); else objXmlDocument = XmlManager.Instance.Load("cyberware.xml"); XmlNode objXmlCyberware; if (objSource == Improvement.ImprovementSource.Bioware) objXmlCyberware = objXmlDocument.SelectSingleNode("/chummer/biowares/bioware[name = \"" + frmPickCyberware.SelectedCyberware + "\"]"); else objXmlCyberware = objXmlDocument.SelectSingleNode("/chummer/cyberwares/cyberware[name = \"" + frmPickCyberware.SelectedCyberware + "\"]"); // Create the Cyberware object. Cyberware objCyberware = new Cyberware(_objCharacter); List<Weapon> objWeapons = new List<Weapon>(); TreeNode objNode = new TreeNode(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); objCyberware.Create(objXmlCyberware, _objCharacter, frmPickCyberware.SelectedGrade, objSource, frmPickCyberware.SelectedRating, objNode, objWeapons, objWeaponNodes); if (objCyberware.InternalId == Guid.Empty.ToString()) return false; // Force the item to be Transgenic if selected. if (frmPickCyberware.ForceTransgenic) objCyberware.Category = "Genetech: Transgenics"; // Apply the ESS discount if applicable. if (_objOptions.AllowCyberwareESSDiscounts) objCyberware.ESSDiscount = frmPickCyberware.SelectedESSDiscount; if (frmPickCyberware.FreeCost) objCyberware.Cost = "0"; try { if (treCyberware.SelectedNode.Level > 0) { treCyberware.SelectedNode.Nodes.Add(objNode); treCyberware.SelectedNode.Expand(); objSelectedCyberware.Children.Add(objCyberware); objCyberware.Parent = objSelectedCyberware; } else { treCyberware.Nodes[intNode].Nodes.Add(objNode); treCyberware.Nodes[intNode].Expand(); _objCharacter.Cyberware.Add(objCyberware); } } catch { treCyberware.Nodes[intNode].Nodes.Add(objNode); treCyberware.Nodes[intNode].Expand(); _objCharacter.Cyberware.Add(objCyberware); } // Select the node that was just added. _blnSkipRefresh = true; if (objSource == Improvement.ImprovementSource.Cyberware) objNode.ContextMenuStrip = cmsCyberware; else if (objSource == Improvement.ImprovementSource.Bioware) objNode.ContextMenuStrip = cmsBioware; _blnSkipRefresh = true; foreach (Weapon objWeapon in objWeapons) _objCharacter.Weapons.Add(objWeapon); // Create the Weapon Node if one exists. foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } // Add any additional Qualities that are forced on the character. if (objXmlCyberware.SelectNodes("addqualities/addquality").Count > 0) { XmlDocument objXmlQuality = XmlManager.Instance.Load("qualities.xml"); foreach (XmlNode objXmlAddQuality in objXmlCyberware.SelectNodes("addqualities/addquality")) { XmlNode objXmlSelectedQuality = objXmlQuality.SelectSingleNode("/chummer/qualities/quality[name = \"" + objXmlAddQuality.InnerText + "\"]"); Quality objQuality = new Quality(_objCharacter); objQuality = AddQuality(objXmlAddQuality, objXmlSelectedQuality, objWeapons, objWeaponNodes); objQuality.BP = 0; objQuality.ContributeToLimit = false; objQuality.OriginSource = QualitySource.BuiltIn; if (objQuality != null) { _objCharacter.Qualities.Add(objQuality); } } } treCyberware.SortCustom(); treCyberware.SelectedNode = objNode; _blnSkipRefresh = true; PopulateCyberwareGradeList(); UpdateCharacterInfo(); RefreshSelectedCyberware(); _blnSkipRefresh = false; _blnIsDirty = true; PopulateGearList(); UpdateWindowTitle(); return frmPickCyberware.AddAgain; }
private void tsVehicleAddCyberware_Click(object sender, EventArgs e) { Vehicle objVehicle = new Vehicle(_objCharacter); VehicleMod objMod = _objFunctions.FindVehicleMod(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objVehicle); if (objMod == null) { MessageBox.Show(LanguageManager.Instance.GetString("Message_VehicleCyberwarePlugin"), LanguageManager.Instance.GetString("MessageTitle_NoCyberware"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (!objMod.AllowCyberware) { MessageBox.Show(LanguageManager.Instance.GetString("Message_VehicleCyberwarePlugin"), LanguageManager.Instance.GetString("MessageTitle_NoCyberware"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } frmSelectCyberware frmPickCyberware = new frmSelectCyberware(_objCharacter); frmPickCyberware.SetGrade = "Standard"; frmPickCyberware.LockGrade(); frmPickCyberware.ShowOnlySubsystems = true; frmPickCyberware.Subsystems = objMod.Subsystems; frmPickCyberware.AllowModularPlugins = objMod.AllowModularPlugins; frmPickCyberware.ShowDialog(this); if (frmPickCyberware.DialogResult == DialogResult.Cancel) return; // Open the Cyberware XML file and locate the selected piece. XmlDocument objXmlDocument = XmlManager.Instance.Load("cyberware.xml"); XmlNode objXmlCyberware = objXmlDocument.SelectSingleNode("/chummer/cyberwares/cyberware[name = \"" + frmPickCyberware.SelectedCyberware + "\"]"); // Create the Cyberware object. Cyberware objCyberware = new Cyberware(_objCharacter); List<Weapon> objWeapons = new List<Weapon>(); TreeNode objNode = new TreeNode(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); objCyberware.Create(objXmlCyberware, _objCharacter, frmPickCyberware.SelectedGrade, Improvement.ImprovementSource.Cyberware, frmPickCyberware.SelectedRating, objNode, objWeapons, objWeaponNodes, false); if (objCyberware.InternalId == Guid.Empty.ToString()) return; if (frmPickCyberware.FreeCost) objCyberware.Cost = "0"; treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); objMod.Cyberware.Add(objCyberware); foreach (Weapon objWeapon in objWeapons) { objWeapon.VehicleMounted = true; objVehicle.Weapons.Add(objWeapon); } // Create the Weapon Node if one exists. foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsVehicleWeapon; treVehicles.SelectedNode.Parent.Nodes.Add(objWeaponNode); treVehicles.SelectedNode.Parent.Expand(); } UpdateCharacterInfo(); if (frmPickCyberware.AddAgain) tsVehicleAddCyberware_Click(sender, e); }
private void tsVehicleAddCyberware_Click(object sender, EventArgs e) { Vehicle objVehicle = new Vehicle(_objCharacter); VehicleMod objMod = _objFunctions.FindVehicleMod(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objVehicle); if (objMod == null) { MessageBox.Show(LanguageManager.Instance.GetString("Message_VehicleCyberwarePlugin"), LanguageManager.Instance.GetString("MessageTitle_NoCyberware"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (!objMod.AllowCyberware) { MessageBox.Show(LanguageManager.Instance.GetString("Message_VehicleCyberwarePlugin"), LanguageManager.Instance.GetString("MessageTitle_NoCyberware"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } frmSelectCyberware frmPickCyberware = new frmSelectCyberware(_objCharacter); frmPickCyberware.SetGrade = "Standard"; frmPickCyberware.LockGrade(); frmPickCyberware.ShowOnlySubsystems = true; frmPickCyberware.Subsystems = objMod.Subsystems; frmPickCyberware.AllowModularPlugins = objMod.AllowModularPlugins; frmPickCyberware.ShowDialog(this); if (frmPickCyberware.DialogResult == DialogResult.Cancel) return; // Open the Cyberware XML file and locate the selected piece. XmlDocument objXmlDocument = XmlManager.Instance.Load("cyberware.xml"); XmlNode objXmlCyberware = objXmlDocument.SelectSingleNode("/chummer/cyberwares/cyberware[name = \"" + frmPickCyberware.SelectedCyberware + "\"]"); // Create the Cyberware object. Cyberware objCyberware = new Cyberware(_objCharacter); List<Weapon> objWeapons = new List<Weapon>(); TreeNode objNode = new TreeNode(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); objCyberware.Create(objXmlCyberware, _objCharacter, frmPickCyberware.SelectedGrade, Improvement.ImprovementSource.Cyberware, frmPickCyberware.SelectedRating, objNode, objWeapons, objWeaponNodes, false); if (objCyberware.InternalId == Guid.Empty.ToString()) return; if (frmPickCyberware.FreeCost) objCyberware.Cost = "0"; int intCost = objCyberware.TotalCost; // Multiply the cost if applicable. if (objCyberware.TotalAvail.EndsWith(LanguageManager.Instance.GetString("String_AvailRestricted")) && _objOptions.MultiplyRestrictedCost) intCost *= _objOptions.RestrictedCostMultiplier; if (objCyberware.TotalAvail.EndsWith(LanguageManager.Instance.GetString("String_AvailForbidden")) && _objOptions.MultiplyForbiddenCost) intCost *= _objOptions.ForbiddenCostMultiplier; // Check the item's Cost and make sure the character can afford it. if (!frmPickCyberware.FreeCost) { if (intCost > _objCharacter.Nuyen) { MessageBox.Show(LanguageManager.Instance.GetString("Message_NotEnoughNuyen"), LanguageManager.Instance.GetString("MessageTitle_NotEnoughNuyen"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { // Create the Expense Log Entry. ExpenseLogEntry objExpense = new ExpenseLogEntry(); string strEntry = ""; strEntry = LanguageManager.Instance.GetString("String_ExpensePurchaseVehicleCyberware"); objExpense.Create(intCost * -1, strEntry + " " + objCyberware.DisplayNameShort, ExpenseType.Nuyen, DateTime.Now); _objCharacter.ExpenseEntries.Add(objExpense); _objCharacter.Nuyen -= intCost; ExpenseUndo objUndo = new ExpenseUndo(); objUndo.CreateNuyen(NuyenExpenseType.AddVehicleModCyberware, objCyberware.InternalId); objExpense.Undo = objUndo; } } treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); objMod.Cyberware.Add(objCyberware); foreach (Weapon objWeapon in objWeapons) { objWeapon.VehicleMounted = true; objVehicle.Weapons.Add(objWeapon); } // Create the Weapon Node if one exists. foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsVehicleWeapon; treVehicles.SelectedNode.Parent.Nodes.Add(objWeaponNode); treVehicles.SelectedNode.Parent.Expand(); } UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); if (frmPickCyberware.AddAgain) tsVehicleAddCyberware_Click(sender, e); }
/// <summary> /// Open the Select Cyberware window and handle adding to the Tree and Character. /// </summary> private bool PickCyberware(Improvement.ImprovementSource objSource = Improvement.ImprovementSource.Cyberware) { // Determine the lowest whole number for the character's current Essence. decimal decStartingESS = Math.Floor(_objCharacter.Essence); Cyberware objSelectedCyberware = new Cyberware(_objCharacter); int intNode = 0; if (objSource == Improvement.ImprovementSource.Bioware) intNode = 1; // Attempt to locate the selected piece of Cyberware. try { if (treCyberware.SelectedNode.Level > 0) objSelectedCyberware = _objFunctions.FindCyberware(treCyberware.SelectedNode.Tag.ToString(), _objCharacter.Cyberware); } catch { } frmSelectCyberware frmPickCyberware = new frmSelectCyberware(_objCharacter, true); double dblMultiplier = 1; // Apply the character's Cyberware Essence cost multiplier if applicable. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.CyberwareEssCost) != 0 && objSource == Improvement.ImprovementSource.Cyberware) { foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.CyberwareEssCost && objImprovement.Enabled) dblMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.CharacterESSMultiplier = dblMultiplier; } // Apply the character's Bioware Essence cost multiplier if applicable. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.BiowareEssCost) != 0 && objSource == Improvement.ImprovementSource.Bioware) { foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.BiowareEssCost && objImprovement.Enabled) dblMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.CharacterESSMultiplier = dblMultiplier; } // Apply the character's Basic Bioware Essence cost multiplier if applicable. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.BasicBiowareEssCost) != 0 && objSource == Improvement.ImprovementSource.Bioware) { double dblBasicMultiplier = 1; foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.BasicBiowareEssCost && objImprovement.Enabled) dblBasicMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.BasicBiowareESSMultiplier = dblBasicMultiplier; } // Genetech Cost multiplier. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.GenetechCostMultiplier) != 0 && objSource == Improvement.ImprovementSource.Bioware) { dblMultiplier = 1; foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.GenetechCostMultiplier && objImprovement.Enabled) dblMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.GenetechCostMultiplier = dblMultiplier; } // Transgenics Cost multiplier. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.TransgenicsBiowareCost) != 0 && objSource == Improvement.ImprovementSource.Bioware) { dblMultiplier = 1; foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.TransgenicsBiowareCost && objImprovement.Enabled) dblMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.TransgenicsBiowareCostMultiplier = dblMultiplier; } try { if (treCyberware.SelectedNode.Level > 0) { frmPickCyberware.SetGrade = lblCyberwareGrade.Text; frmPickCyberware.LockGrade(); // If the Cyberware has a Capacity with no brackets (meaning it grants Capacity), show only Subsystems (those that conume Capacity). if (!objSelectedCyberware.Capacity.Contains('[')) { frmPickCyberware.ShowOnlySubsystems = true; frmPickCyberware.Subsystems = objSelectedCyberware.Subsytems; frmPickCyberware.MaximumCapacity = objSelectedCyberware.CapacityRemaining; // Do not allow the user to add a new piece of Cyberware if its Capacity has been reached. if (_objOptions.EnforceCapacity && objSelectedCyberware.CapacityRemaining < 0) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CapacityReached"), LanguageManager.Instance.GetString("MessageTitle_CapacityReached"), MessageBoxButtons.OK, MessageBoxIcon.Information); return false; } } } } catch { } if (objSource == Improvement.ImprovementSource.Bioware) frmPickCyberware.WindowMode = frmSelectCyberware.Mode.Bioware; frmPickCyberware.AllowModularPlugins = objSelectedCyberware.AllowModularPlugins; frmPickCyberware.ShowDialog(this); // Make sure the dialogue window was not canceled. if (frmPickCyberware.DialogResult == DialogResult.Cancel) return false; // Open the Cyberware XML file and locate the selected piece. XmlDocument objXmlDocument = new XmlDocument(); if (objSource == Improvement.ImprovementSource.Bioware) objXmlDocument = XmlManager.Instance.Load("bioware.xml"); else objXmlDocument = XmlManager.Instance.Load("cyberware.xml"); XmlNode objXmlCyberware; if (objSource == Improvement.ImprovementSource.Bioware) objXmlCyberware = objXmlDocument.SelectSingleNode("/chummer/biowares/bioware[name = \"" + frmPickCyberware.SelectedCyberware + "\"]"); else objXmlCyberware = objXmlDocument.SelectSingleNode("/chummer/cyberwares/cyberware[name = \"" + frmPickCyberware.SelectedCyberware + "\"]"); // Create the Cyberware object. Cyberware objCyberware = new Cyberware(_objCharacter); List<Weapon> objWeapons = new List<Weapon>(); TreeNode objNode = new TreeNode(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); objCyberware.Create(objXmlCyberware, _objCharacter, frmPickCyberware.SelectedGrade, objSource, frmPickCyberware.SelectedRating, objNode, objWeapons, objWeaponNodes); if (objCyberware.InternalId == Guid.Empty.ToString()) return false; // Force the item to be Transgenic if selected. if (frmPickCyberware.ForceTransgenic) objCyberware.Category = "Genetech: Transgenics"; // Apply the ESS discount if applicable. if (_objOptions.AllowCyberwareESSDiscounts) objCyberware.ESSDiscount = frmPickCyberware.SelectedESSDiscount; int intCost = objCyberware.TotalCost; // Multiply the cost if applicable. if (objCyberware.TotalAvail.EndsWith(LanguageManager.Instance.GetString("String_AvailRestricted")) && _objOptions.MultiplyRestrictedCost) intCost *= _objOptions.RestrictedCostMultiplier; if (objCyberware.TotalAvail.EndsWith(LanguageManager.Instance.GetString("String_AvailForbidden")) && _objOptions.MultiplyForbiddenCost) intCost *= _objOptions.ForbiddenCostMultiplier; // Check the item's Cost and make sure the character can afford it. if (!frmPickCyberware.FreeCost) { if (intCost > _objCharacter.Nuyen) { MessageBox.Show(LanguageManager.Instance.GetString("Message_NotEnoughNuyen"), LanguageManager.Instance.GetString("MessageTitle_NotEnoughNuyen"), MessageBoxButtons.OK, MessageBoxIcon.Information); // Remove any Improvements created by the Cyberware. _objImprovementManager.RemoveImprovements(objCyberware.SourceType, objCyberware.InternalId); return frmPickCyberware.AddAgain; } else { // Create the Expense Log Entry. ExpenseLogEntry objExpense = new ExpenseLogEntry(); string strEntry = ""; if (objCyberware.SourceType == Improvement.ImprovementSource.Cyberware) strEntry = LanguageManager.Instance.GetString("String_ExpensePurchaseCyberware"); else strEntry = LanguageManager.Instance.GetString("String_ExpensePurchaseBioware"); objExpense.Create(intCost * -1, strEntry + " " + objCyberware.DisplayNameShort, ExpenseType.Nuyen, DateTime.Now); _objCharacter.ExpenseEntries.Add(objExpense); _objCharacter.Nuyen -= intCost; ExpenseUndo objUndo = new ExpenseUndo(); objUndo.CreateNuyen(NuyenExpenseType.AddCyberware, objCyberware.InternalId); objExpense.Undo = objUndo; } } try { if (treCyberware.SelectedNode.Level > 0) { treCyberware.SelectedNode.Nodes.Add(objNode); treCyberware.SelectedNode.Expand(); objSelectedCyberware.Children.Add(objCyberware); objCyberware.Parent = objSelectedCyberware; } else { treCyberware.Nodes[intNode].Nodes.Add(objNode); treCyberware.Nodes[intNode].Expand(); _objCharacter.Cyberware.Add(objCyberware); } } catch { treCyberware.Nodes[intNode].Nodes.Add(objNode); treCyberware.Nodes[intNode].Expand(); _objCharacter.Cyberware.Add(objCyberware); } // Select the node that was just added. if (objSource == Improvement.ImprovementSource.Cyberware) objNode.ContextMenuStrip = cmsCyberware; else if (objSource == Improvement.ImprovementSource.Bioware) objNode.ContextMenuStrip = cmsBioware; foreach (Weapon objWeapon in objWeapons) _objCharacter.Weapons.Add(objWeapon); // Create the Weapon Node if one exists. foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } _objFunctions.SortTree(treCyberware); treCyberware.SelectedNode = objNode; UpdateCharacterInfo(); RefreshSelectedCyberware(); PopulateGearList(); if (frmPickCyberware.DialogResult != DialogResult.Cancel) { _blnIsDirty = true; UpdateWindowTitle(); } return frmPickCyberware.AddAgain; }
/// <summary> /// Update the Cyberware's information based on the Cyberware selected and current Rating. /// </summary> private void UpdateCyberwareInfo() { if (lstCyberware.Text != "" && cboGrade.SelectedValue != null) { Cyberware objCyberware = new Cyberware(_objCharacter); XmlNode objNode = _objXmlDocument.SelectSingleNode("/chummer/" + _strNode + "s/" + _strNode + "[id = \"" + lstCyberware.SelectedValue + "\"]"); Grade objGrade = GlobalOptions.CyberwareGrades.GetGrade(cboGrade.SelectedValue.ToString()); Improvement.ImprovementSource objImprovementSource; if (_objMode == Mode.Cyberware) objImprovementSource = Improvement.ImprovementSource.Cyberware; else objImprovementSource = Improvement.ImprovementSource.Bioware; TreeNode objTreeNode = new TreeNode(); List<Weapon> lstWeapons = new List<Weapon>(); List<TreeNode> lstTreeNodes = new List<TreeNode>(); objCyberware.Create(objNode, _objCharacter, objGrade, objImprovementSource, Convert.ToInt32(nudRating.Value, GlobalOptions.Instance.CultureInfo), objTreeNode, lstWeapons, lstTreeNodes, false); // Avail. lblAvail.Text = objCyberware.TotalAvail; // Cost. int intItemCost = 0; if (objCyberware.Cost.StartsWith("Variable")) { int intMin = 0; int intMax = 0; string strCost = objCyberware.Cost.Replace("Variable(", string.Empty).Replace(")", string.Empty); if (strCost.Contains("-")) { string[] strValues = strCost.Split('-'); intMin = Convert.ToInt32(strValues[0]); intMax = Convert.ToInt32(strValues[1]); } else intMin = Convert.ToInt32(strCost.Replace("+", string.Empty)); if (intMax == 0) { intMax = 1000000; lblCost.Text = String.Format("{0:###,###,##0¥+}", intMin); } else lblCost.Text = String.Format("{0:###,###,##0}", intMin) + "-" + String.Format("{0:###,###,##0¥}", intMax); intItemCost = intMin; } else { if (chkFree.Checked) intItemCost = 0; else intItemCost = objCyberware.TotalCost; lblCost.Text = String.Format("{0:###,###,##0¥}", intItemCost); } lblTest.Text = _objCharacter.AvailTest(intItemCost, lblAvail.Text); // Essence. lblEssence.Text = objCyberware.CalculatedESS.ToString(); // Capacity. lblCapacity.Text = objCyberware.CalculatedCapacity; } }
private void IncreaseEssenceHole(int centiessence) { //id of essence hole, get by id to avoid name confusions Guid essenceHoldID = Guid.Parse("b57eadaa-7c3b-4b80-8d79-cbbd922c1196"); //don't parse for every obj Cyberware objHole = _objCharacter.Cyberware.Find(x => x.SourceID == essenceHoldID); if (objHole == null) { XmlDocument xmlCyberware = XmlManager.Instance.Load("cyberware.xml"); XmlNode xmlEssHole = xmlCyberware.SelectSingleNode("//id[.='b57eadaa-7c3b-4b80-8d79-cbbd922c1196']/.."); objHole = new Cyberware(_objCharacter); TreeNode treNode = new TreeNode(); objHole.Create(xmlEssHole, _objCharacter, GlobalOptions.CyberwareGrades.GetGrade("Standard"), Improvement.ImprovementSource.Cyberware, centiessence, treNode, new List<Weapon>(), new List<TreeNode>()); treCyberware.Nodes.Add(treNode); _objCharacter.Cyberware.Add(objHole); } else { objHole.Rating += centiessence; } }
private void TestCyberware(string strFile) { string strPrefix = "cyberware"; Improvement.ImprovementSource objSource = Improvement.ImprovementSource.Cyberware; if (strFile == "bioware.xml") { strPrefix = "bioware"; objSource = Improvement.ImprovementSource.Bioware; } Character objCharacter = new Character(); XmlDocument objXmlDocument = XmlManager.Load(strFile); pgbProgress.Minimum = 0; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlDocument.SelectNodes("/chummer/" + strPrefix + "s/" + strPrefix).Count; Grade objTestGrade = objCharacter.GetGradeList(objSource, true).FirstOrDefault(x => x.Name == "Standard"); // Gear. foreach (XmlNode objXmlGear in objXmlDocument.SelectNodes("/chummer/" + strPrefix + "s/" + strPrefix)) { pgbProgress.Value++; Application.DoEvents(); try { Cyberware objTemp = new Cyberware(objCharacter); List <Weapon> lstWeapons = new List <Weapon>(); List <Vehicle> objVehicles = new List <Vehicle>(); objTemp.Create(objXmlGear, objCharacter, objTestGrade, objSource, 1, lstWeapons, objVehicles); try { decimal objValue = objTemp.TotalCost; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalCost\r\n"; } try { string objValue = objTemp.TotalAvail(GlobalOptions.CultureInfo, GlobalOptions.Language); } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalAvail\r\n"; } try { int objValue = objTemp.TotalAgility; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalAgility\r\n"; } try { int objValue = objTemp.TotalBody; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalBody\r\n"; } try { int objValue = objTemp.TotalStrength; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalStrength\r\n"; } try { string objValue = objTemp.CalculatedCapacity; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed CalculatedCapacity\r\n"; } try { decimal objValue = objTemp.CalculatedESS(); } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed CalculatedESS()\r\n"; } } catch { txtOutput.Text += objXmlGear["name"].InnerText + " general failure\r\n"; } } objCharacter.DeleteCharacter(); }
private void TestCyberware(string strFile) { string strPrefix = ""; Improvement.ImprovementSource objSource = new Improvement.ImprovementSource(); if (strFile == "bioware.xml") { strPrefix = "bioware"; objSource = Improvement.ImprovementSource.Bioware; } else { strPrefix = "cyberware"; objSource = Improvement.ImprovementSource.Cyberware; } Character objCharacter = new Character(); XmlDocument objXmlDocument = XmlManager.Instance.Load(strFile); pgbProgress.Minimum = 0; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlDocument.SelectNodes("/chummer/" + strPrefix + "s/" + strPrefix).Count; // Gear. foreach (XmlNode objXmlGear in objXmlDocument.SelectNodes("/chummer/" + strPrefix + "s/" + strPrefix)) { pgbProgress.Value++; Application.DoEvents(); try { TreeNode objTempNode = new TreeNode(); Cyberware objTemp = new Cyberware(objCharacter); List<Weapon> lstWeapons = new List<Weapon>(); List<TreeNode> lstNodes = new List<TreeNode>(); objTemp.Create(objXmlGear, objCharacter, GlobalOptions.CyberwareGrades.GetGrade("Standard"), objSource, 1, objTempNode, lstWeapons, lstNodes); try { int objValue = objTemp.TotalCost; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalCost\n"; } try { string objValue = objTemp.TotalAvail; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalAvail\n"; } try { int objValue = objTemp.TotalAgility; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalAgility\n"; } try { int objValue = objTemp.TotalBody; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalBody\n"; } try { int objValue = objTemp.TotalStrength; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalStrength\n"; } try { string objValue = objTemp.CalculatedCapacity; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed CalculatedCapacity\n"; } try { decimal objValue = objTemp.CalculatedESS; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed CalculatedESS\n"; } } catch { txtOutput.Text += objXmlGear["name"].InnerText + " general failure\n"; } } }
/// <summary> /// Open the Select Cyberware window and handle adding to the Tree and Character. /// </summary> private bool PickCyberware(Improvement.ImprovementSource objSource = Improvement.ImprovementSource.Cyberware) { // Determine the lowest whole number for the character's current Essence. decimal decStartingESS = Math.Floor(_objCharacter.Essence); Cyberware objSelectedCyberware = new Cyberware(_objCharacter); int intNode = 0; if (objSource == Improvement.ImprovementSource.Bioware) intNode = 1; // Attempt to locate the selected piece of Cyberware. try { if (treCyberware.SelectedNode.Level > 0) objSelectedCyberware = (Cyberware)_objFunctions.FindEquipment(treCyberware.SelectedNode.Tag.ToString(), _objCharacter.Cyberware, typeof(Cyberware)); } catch { } frmSelectCyberware frmPickCyberware = new frmSelectCyberware(_objCharacter, true); double dblMultiplier = 1; // Apply the character's Cyberware Essence cost multiplier if applicable. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.CyberwareEssCost) != 0 && objSource == Improvement.ImprovementSource.Cyberware) { foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.CyberwareEssCost && objImprovement.Enabled) dblMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.CharacterESSMultiplier = dblMultiplier; } // Apply the character's Bioware Essence cost multiplier if applicable. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.BiowareEssCost) != 0 && objSource == Improvement.ImprovementSource.Bioware) { foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.BiowareEssCost && objImprovement.Enabled) dblMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.CharacterESSMultiplier = dblMultiplier; } // Apply the character's Basic Bioware Essence cost multiplier if applicable. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.BasicBiowareEssCost) != 0 && objSource == Improvement.ImprovementSource.Bioware) { double dblBasicMultiplier = 1; foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.BasicBiowareEssCost && objImprovement.Enabled) dblBasicMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.BasicBiowareESSMultiplier = dblBasicMultiplier; } // Genetech Cost multiplier. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.GenetechCostMultiplier) != 0 && objSource == Improvement.ImprovementSource.Bioware) { dblMultiplier = 1; foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.GenetechCostMultiplier && objImprovement.Enabled) dblMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.GenetechCostMultiplier = dblMultiplier; } // Transgenics Cost multiplier. if (_objImprovementManager.ValueOf(Improvement.ImprovementType.TransgenicsBiowareCost) != 0 && objSource == Improvement.ImprovementSource.Bioware) { dblMultiplier = 1; foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.ImproveType == Improvement.ImprovementType.TransgenicsBiowareCost && objImprovement.Enabled) dblMultiplier -= (1 - (Convert.ToDouble(objImprovement.Value, GlobalOptions.Instance.CultureInfo) / 100)); } frmPickCyberware.TransgenicsBiowareCostMultiplier = dblMultiplier; } try { if (treCyberware.SelectedNode.Level > 0) { frmPickCyberware.SetGrade = lblCyberwareGrade.Text; frmPickCyberware.LockGrade(); // If the Cyberware has a Capacity with no brackets (meaning it grants Capacity), show only Subsystems (those that conume Capacity). if (!objSelectedCyberware.Capacity.Contains('[')) { frmPickCyberware.ShowOnlySubsystems = true; frmPickCyberware.Subsystems = objSelectedCyberware.Subsytems; frmPickCyberware.MaximumCapacity = objSelectedCyberware.CapacityRemaining; // Do not allow the user to add a new piece of Cyberware if its Capacity has been reached. if (_objOptions.EnforceCapacity && objSelectedCyberware.CapacityRemaining < 0) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CapacityReached"), LanguageManager.Instance.GetString("MessageTitle_CapacityReached"), MessageBoxButtons.OK, MessageBoxIcon.Information); return false; } } } } catch { } if (objSource == Improvement.ImprovementSource.Bioware) frmPickCyberware.WindowMode = frmSelectCyberware.Mode.Bioware; frmPickCyberware.AllowModularPlugins = objSelectedCyberware.AllowModularPlugins; frmPickCyberware.ShowDialog(this); // Make sure the dialogue window was not canceled. if (frmPickCyberware.DialogResult == DialogResult.Cancel) return false; // Open the Cyberware XML file and locate the selected piece. XmlDocument objXmlDocument = new XmlDocument(); if (objSource == Improvement.ImprovementSource.Bioware) objXmlDocument = XmlManager.Instance.Load("bioware.xml"); else objXmlDocument = XmlManager.Instance.Load("cyberware.xml"); XmlNode objXmlCyberware; if (objSource == Improvement.ImprovementSource.Bioware) objXmlCyberware = objXmlDocument.SelectSingleNode("/chummer/biowares/bioware[id = \"" + frmPickCyberware.SelectedCyberware + "\"]"); else objXmlCyberware = objXmlDocument.SelectSingleNode("/chummer/cyberwares/cyberware[id = \"" + frmPickCyberware.SelectedCyberware + "\"]"); // Create the Cyberware object. Cyberware objCyberware = new Cyberware(_objCharacter); List<Weapon> objWeapons = new List<Weapon>(); TreeNode objNode = new TreeNode(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); objCyberware.Create(objXmlCyberware, _objCharacter, frmPickCyberware.SelectedGrade, objSource, frmPickCyberware.SelectedRating, objNode, objWeapons, objWeaponNodes); if (objCyberware.InternalId == Guid.Empty.ToString()) return false; // Force the item to be Transgenic if selected. if (frmPickCyberware.ForceTransgenic) objCyberware.Category = "Genetech: Transgenics"; int intCost = objCyberware.TotalCost; // Check the item's Cost and make sure the character can afford it. if (!frmPickCyberware.FreeCost) { if (intCost > _objCharacter.Nuyen) { MessageBox.Show(LanguageManager.Instance.GetString("Message_NotEnoughNuyen"), LanguageManager.Instance.GetString("MessageTitle_NotEnoughNuyen"), MessageBoxButtons.OK, MessageBoxIcon.Information); // Remove any Improvements created by the Cyberware. _objImprovementManager.RemoveImprovements(objCyberware.SourceType, objCyberware.InternalId); return frmPickCyberware.AddAgain; } else { // Create the Expense Log Entry. ExpenseLogEntry objExpense = new ExpenseLogEntry(); string strEntry = ""; if (objCyberware.SourceType == Improvement.ImprovementSource.Cyberware) strEntry = LanguageManager.Instance.GetString("String_ExpensePurchaseCyberware"); else strEntry = LanguageManager.Instance.GetString("String_ExpensePurchaseBioware"); objExpense.Create(intCost * -1, strEntry + " " + objCyberware.DisplayNameShort, ExpenseType.Nuyen, DateTime.Now); _objCharacter.ExpenseEntries.Add(objExpense); _objCharacter.Nuyen -= intCost; ExpenseUndo objUndo = new ExpenseUndo(); objUndo.CreateNuyen(NuyenExpenseType.AddCyberware, objCyberware.InternalId); objExpense.Undo = objUndo; } } try { if (treCyberware.SelectedNode.Level > 0) { treCyberware.SelectedNode.Nodes.Add(objNode); treCyberware.SelectedNode.Expand(); objSelectedCyberware.Cyberwares.Add(objCyberware); objCyberware.Parent = objSelectedCyberware; } else { treCyberware.Nodes[intNode].Nodes.Add(objNode); treCyberware.Nodes[intNode].Expand(); _objCharacter.Cyberware.Add(objCyberware); } } catch { treCyberware.Nodes[intNode].Nodes.Add(objNode); treCyberware.Nodes[intNode].Expand(); _objCharacter.Cyberware.Add(objCyberware); } // Select the node that was just added. if (objSource == Improvement.ImprovementSource.Cyberware) objNode.ContextMenuStrip = cmsCyberware; else if (objSource == Improvement.ImprovementSource.Bioware) objNode.ContextMenuStrip = cmsBioware; foreach (Weapon objWeapon in objWeapons) _objCharacter.Weapons.Add(objWeapon); // Create the Weapon Node if one exists. foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } // Determine the lowest whole number for the character's Essence after adding the 'Ware. decimal decEndingESS = Math.Floor(_objCharacter.Essence); decimal decDifferent = decStartingESS - decEndingESS; if (decDifferent > 0.0m) { // Permanently reduce the character's MAG/RES Attributes. _objCharacter.MAG.Value -= Convert.ToInt32(decDifferent); _objCharacter.RES.Value -= Convert.ToInt32(decDifferent); // If the Attribute reaches 0, the character has burned out. if (_objCharacter.MAG.Value < 1) { _objCharacter.MAG.Value = 0; _objCharacter.MAG.MetatypeMinimum = 0; _objCharacter.MAG.MetatypeMaximum = 0; _objCharacter.MAG.MetatypeAugmentedMaximum = 0; if (_objCharacter.MAGEnabled) { // Move all MAG-linked Active Skills to Knowledge Skills. List<Skill> lstNewSkills = new List<Skill>(); foreach (Skill objSkill in _objCharacter.Skills) { if (objSkill.Attribute == "MAG" && objSkill.Rating > 0) { int i = panKnowledgeSkills.Controls.Count; Skill objKnowledge = new Skill(_objCharacter); SkillControl objSkillControl = new SkillControl(); objKnowledge.Name = objSkill.Name; objSkillControl.SkillObject = objKnowledge; // Attach an EventHandler for the RatingChanged and SpecializationChanged Events. objSkillControl.RatingChanged += objKnowledgeSkill_RatingChanged; objSkillControl.SpecializationChanged += objSkill_SpecializationChanged; objSkillControl.DeleteSkill += objKnowledgeSkill_DeleteSkill; objSkillControl.SkillKarmaClicked += objKnowledgeSkill_KarmaClicked; objSkillControl.DiceRollerClicked += objSkill_DiceRollerClicked; objSkillControl.KnowledgeSkill = true; objSkillControl.AllowDelete = true; if (objSkill.Rating > 7) objSkillControl.SkillRatingMaximum = objSkill.Rating; else objSkillControl.SkillRatingMaximum = 6; objSkillControl.SkillRating = objSkill.Rating; objSkillControl.SkillCategory = "Professional"; // Set the SkillControl's Location since scrolling the Panel causes it to actually change the child Controls' Locations. objSkillControl.Location = new Point(0, objSkillControl.Height * i + panKnowledgeSkills.AutoScrollPosition.Y); panKnowledgeSkills.Controls.Add(objSkillControl); lstNewSkills.Add(objKnowledge); } } foreach (Skill objSkill in lstNewSkills) _objCharacter.Skills.Add(objSkill); } _objCharacter.MAGEnabled = false; _objCharacter.MagicianEnabled = false; _objCharacter.AdeptEnabled = false; } if (_objCharacter.RES.Value < 1) { _objCharacter.RES.Value = 0; _objCharacter.RES.MetatypeMinimum = 0; _objCharacter.RES.MetatypeMinimum = 0; _objCharacter.RES.MetatypeAugmentedMaximum = 0; if (_objCharacter.RESEnabled) { // Move all RES-linked Active Skills to Knowledge Skills. List<Skill> lstNewSkills = new List<Skill>(); foreach (Skill objSkill in _objCharacter.Skills) { if (objSkill.Attribute == "RES" && objSkill.Rating > 0) { int i = panKnowledgeSkills.Controls.Count; Skill objKnowledge = new Skill(_objCharacter); SkillControl objSkillControl = new SkillControl(); objKnowledge.Name = objSkill.Name; objSkillControl.SkillObject = objKnowledge; // Attach an EventHandler for the RatingChanged and SpecializationChanged Events. objSkillControl.RatingChanged += objKnowledgeSkill_RatingChanged; objSkillControl.SpecializationChanged += objSkill_SpecializationChanged; objSkillControl.DeleteSkill += objKnowledgeSkill_DeleteSkill; objSkillControl.SkillKarmaClicked += objKnowledgeSkill_KarmaClicked; objSkillControl.DiceRollerClicked += objSkill_DiceRollerClicked; objSkillControl.KnowledgeSkill = true; objSkillControl.AllowDelete = true; if (objSkill.Rating > 7) objSkillControl.SkillRatingMaximum = objSkill.Rating; else objSkillControl.SkillRatingMaximum = 6; objSkillControl.SkillRating = objSkill.Rating; objSkillControl.SkillCategory = "Professional"; // Set the SkillControl's Location since scrolling the Panel causes it to actually change the child Controls' Locations. objSkillControl.Location = new Point(0, objSkillControl.Height * i + panKnowledgeSkills.AutoScrollPosition.Y); panKnowledgeSkills.Controls.Add(objSkillControl); lstNewSkills.Add(objKnowledge); } } foreach (Skill objSkill in lstNewSkills) _objCharacter.Skills.Add(objSkill); } _objCharacter.RESEnabled = false; _objCharacter.TechnomancerEnabled = false; } } _objFunctions.SortTree(treCyberware); treCyberware.SelectedNode = objNode; UpdateCharacterInfo(); RefreshSelectedCyberware(); PopulateGearList(); if (frmPickCyberware.DialogResult != DialogResult.Cancel) { _blnIsDirty = true; UpdateWindowTitle(); } return frmPickCyberware.AddAgain; }
/// <summary> /// Update the Cyberware's information based on the Cyberware selected and current Rating. /// </summary> private void UpdateCyberwareInfo() { if (lstCyberware.Text != "" && cboGrade.SelectedValue != null) { Cyberware objCyberware = new Cyberware(_objCharacter); XmlNode objNode = _objXmlDocument.SelectSingleNode("/chummer/" + _strNode + "s/" + _strNode + "[id = \"" + lstCyberware.SelectedValue + "\"]"); Grade objGrade = GlobalOptions.CyberwareGrades.GetGrade(cboGrade.SelectedValue.ToString()); Improvement.ImprovementSource objImprovementSource; if (_objMode == Mode.Cyberware) { objImprovementSource = Improvement.ImprovementSource.Cyberware; } else { objImprovementSource = Improvement.ImprovementSource.Bioware; } TreeNode objTreeNode = new TreeNode(); List <Weapon> lstWeapons = new List <Weapon>(); List <TreeNode> lstTreeNodes = new List <TreeNode>(); objCyberware.Create(objNode, _objCharacter, objGrade, objImprovementSource, Convert.ToInt32(nudRating.Value, GlobalOptions.Instance.CultureInfo), objTreeNode, lstWeapons, lstTreeNodes, false); // Avail. lblAvail.Text = objCyberware.TotalAvail; // Cost. int intItemCost = 0; if (objCyberware.Cost.StartsWith("Variable")) { int intMin = 0; int intMax = 0; string strCost = objCyberware.Cost.Replace("Variable(", string.Empty).Replace(")", string.Empty); if (strCost.Contains("-")) { string[] strValues = strCost.Split('-'); intMin = Convert.ToInt32(strValues[0]); intMax = Convert.ToInt32(strValues[1]); } else { intMin = Convert.ToInt32(strCost.Replace("+", string.Empty)); } if (intMax == 0) { intMax = 1000000; lblCost.Text = String.Format("{0:###,###,##0¥+}", intMin); } else { lblCost.Text = String.Format("{0:###,###,##0}", intMin) + "-" + String.Format("{0:###,###,##0¥}", intMax); } intItemCost = intMin; } else { if (chkFree.Checked) { intItemCost = 0; } else { intItemCost = objCyberware.TotalCost; } lblCost.Text = String.Format("{0:###,###,##0¥}", intItemCost); } lblTest.Text = _objCharacter.AvailTest(intItemCost, lblAvail.Text); // Essence. lblEssence.Text = objCyberware.CalculatedESS.ToString(); // Capacity. lblCapacity.Text = objCyberware.CalculatedCapacity; } }
/// <summary> /// Create Cyberware from a Cyberware Suite. /// </summary> /// <param name="objXmlNode">XmlNode for the Cyberware to add.</param> /// <param name="objGrade">CyberwareGrade to add the item as.</param> /// <param name="intRating">Rating of the Cyberware.</param> /// <param name="blnAddToCharacter">Whether or not the Cyberware should be added directly to the character.</param> /// <param name="objParent">Parent Cyberware if the item is not being added directly to the character.</param> private TreeNode CreateSuiteCyberware(XmlNode objXmlItem, XmlNode objXmlNode, Grade objGrade, int intRating, bool blnAddToCharacter, Improvement.ImprovementSource objSource, string strType, Cyberware objParent = null) { // Create the Cyberware object. List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); TreeNode objNode = new TreeNode(); Cyberware objCyberware = new Cyberware(_objCharacter); string strForced = ""; if (objXmlItem["name"].Attributes["select"] != null) strForced = objXmlItem["name"].Attributes["select"].InnerText; objCyberware.Create(objXmlNode, _objCharacter, objGrade, objSource, intRating, objNode, objWeapons, objWeaponNodes, true, true, strForced); objCyberware.Suite = true; foreach (Weapon objWeapon in objWeapons) _objCharacter.Weapons.Add(objWeapon); foreach (TreeNode objWeaponNode in objWeaponNodes) { treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } if (blnAddToCharacter) _objCharacter.Cyberware.Add(objCyberware); else objParent.Children.Add(objCyberware); foreach (XmlNode objXmlChild in objXmlItem.SelectNodes(strType + "s/" + strType)) { XmlDocument objXmlDocument = XmlManager.Instance.Load(strType + ".xml"); XmlNode objXmlChildCyberware = objXmlDocument.SelectSingleNode("/chummer/" + strType + "s/" + strType + "[name = \"" + objXmlChild["name"].InnerText + "\"]"); TreeNode objChildNode = new TreeNode(); int intChildRating = 0; if (objXmlChild["rating"] != null) intChildRating = Convert.ToInt32(objXmlChild["rating"].InnerText); objChildNode = CreateSuiteCyberware(objXmlChild, objXmlChildCyberware, objGrade, intChildRating, false, objSource, strType, objCyberware); objNode.Nodes.Add(objChildNode); objNode.Expand(); } return objNode; }
/// <summary> /// Add a PACKS Kit to the character. /// </summary> public void AddPACKSKit() { frmSelectPACKSKit frmPickPACKSKit = new frmSelectPACKSKit(_objCharacter); frmPickPACKSKit.ShowDialog(this); bool blnCreateChildren = true; // If the form was canceled, don't do anything. if (frmPickPACKSKit.DialogResult == DialogResult.Cancel) return; XmlDocument objXmlDocument = XmlManager.Instance.Load("packs.xml"); // Do not create child items for Gear if the chosen Kit is in the Custom category since these items will contain the exact plugins desired. if (frmPickPACKSKit.SelectedCategory == "Custom") blnCreateChildren = false; XmlNode objXmlKit = objXmlDocument.SelectSingleNode("/chummer/packs/pack[name = \"" + frmPickPACKSKit.SelectedKit + "\" and category = \"" + frmPickPACKSKit.SelectedCategory + "\"]"); // Update Qualities. if (objXmlKit["qualities"] != null) { XmlDocument objXmlQualityDocument = XmlManager.Instance.Load("qualities.xml"); // Positive Qualities. foreach (XmlNode objXmlQuality in objXmlKit.SelectNodes("qualities/positive/quality")) { XmlNode objXmlQualityNode = objXmlQualityDocument.SelectSingleNode("/chummer/qualities/quality[name = \"" + objXmlQuality.InnerText + "\"]"); TreeNode objNode = new TreeNode(); List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); Quality objQuality = new Quality(_objCharacter); string strForceValue = ""; if (objXmlQuality.Attributes["select"] != null) strForceValue = objXmlQuality.Attributes["select"].InnerText; objQuality.Create(objXmlQualityNode, _objCharacter, QualitySource.Selected, objNode, objWeapons, objWeaponNodes, strForceValue); _objCharacter.Qualities.Add(objQuality); treQualities.Nodes[0].Nodes.Add(objNode); treQualities.Nodes[0].Expand(); // Add any created Weapons to the character. foreach (Weapon objWeapon in objWeapons) _objCharacter.Weapons.Add(objWeapon); // Create the Weapon Node if one exists. foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } } // Negative Qualities. foreach (XmlNode objXmlQuality in objXmlKit.SelectNodes("qualities/negative/quality")) { XmlNode objXmlQualityNode = objXmlQualityDocument.SelectSingleNode("/chummer/qualities/quality[name = \"" + objXmlQuality.InnerText + "\"]"); TreeNode objNode = new TreeNode(); List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); Quality objQuality = new Quality(_objCharacter); string strForceValue = ""; if (objXmlQuality.Attributes["select"] != null) strForceValue = objXmlQuality.Attributes["select"].InnerText; objQuality.Create(objXmlQualityNode, _objCharacter, QualitySource.Selected, objNode, objWeapons, objWeaponNodes, strForceValue); _objCharacter.Qualities.Add(objQuality); treQualities.Nodes[1].Nodes.Add(objNode); treQualities.Nodes[1].Expand(); // Add any created Weapons to the character. foreach (Weapon objWeapon in objWeapons) _objCharacter.Weapons.Add(objWeapon); // Create the Weapon Node if one exists. foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } } } // Update Attributes. if (objXmlKit["attributes"] != null) { // Reset all Attributes back to 1 so we don't go over any BP limits. nudBOD.Value = nudBOD.Minimum; nudAGI.Value = nudAGI.Minimum; nudREA.Value = nudREA.Minimum; nudSTR.Value = nudSTR.Minimum; nudCHA.Value = nudCHA.Minimum; nudINT.Value = nudINT.Minimum; nudLOG.Value = nudLOG.Minimum; nudWIL.Value = nudWIL.Minimum; nudEDG.Value = nudEDG.Minimum; nudMAG.Value = nudMAG.Minimum; nudRES.Value = nudRES.Minimum; foreach (XmlNode objXmlAttribute in objXmlKit["attributes"]) { // The Attribute is calculated as given value - (6 - Metatype Maximum) so that each Metatype has the values from the file adjusted correctly. switch (objXmlAttribute.Name) { case "bod": nudBOD.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.BOD.MetatypeMaximum); break; case "agi": nudAGI.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.AGI.MetatypeMaximum); break; case "rea": nudREA.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.REA.MetatypeMaximum); break; case "str": nudSTR.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.STR.MetatypeMaximum); break; case "cha": nudCHA.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.CHA.MetatypeMaximum); break; case "int": nudINT.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.INT.MetatypeMaximum); break; case "log": nudLOG.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.LOG.MetatypeMaximum); break; case "wil": nudWIL.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.WIL.MetatypeMaximum); break; case "mag": nudMAG.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.MAG.MetatypeMaximum); break; case "res": nudRES.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.RES.MetatypeMaximum); break; default: nudEDG.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.EDG.MetatypeMaximum); break; } } } // Update Skills. if (objXmlKit["skills"] != null) { // Active Skills. foreach (XmlNode objXmlSkill in objXmlKit.SelectNodes("skills/skill")) { if (objXmlSkill["name"].InnerText.Contains("Exotic")) { int i = panActiveSkills.Controls.Count; Skill objSkill = new Skill(_objCharacter); SkillControl objSkillControl = new SkillControl(_objCharacter); objSkillControl.SkillObject = objSkill; objSkillControl.Width = 510; // Attach an EventHandler for the RatingChanged and SpecializationChanged Events. objSkillControl.RatingChanged += objActiveSkill_RatingChanged; objSkillControl.SpecializationChanged += objSkill_SpecializationChanged; objSkillControl.SkillName = objXmlSkill["name"].InnerText; switch (objXmlSkill["name"].InnerText) { case "Exotic Ranged Weapon": case "Exotic Melee Weapon": objSkill.Attribute = "AGI"; objSkillControl.SkillCategory = "Combat Active"; objSkill.Default = true; break; default: objSkill.Attribute = "REA"; objSkillControl.SkillCategory = "Vehicle Active"; objSkill.Default = false; break; } objSkill.ExoticSkill = true; _objCharacter.Skills.Add(objSkill); if (_objCharacter.IgnoreRules) { objSkillControl.SkillRatingMaximum = 12; } else { objSkillControl.SkillRatingMaximum = 6; } // Make sure it's not going above the maximum number. if (Convert.ToInt32(objXmlSkill["rating"].InnerText) > objSkillControl.SkillRatingMaximum) objSkillControl.SkillRating = objSkillControl.SkillRatingMaximum; else objSkillControl.SkillRating = Convert.ToInt32(objXmlSkill["rating"].InnerText); if (objXmlSkill["spec"] != null) objSkillControl.SkillSpec = objXmlSkill["spec"].InnerText; else objSkillControl.SkillSpec = ""; // Set the SkillControl's Location since scrolling the Panel causes it to actually change the child Controls' Locations. objSkillControl.Location = new Point(0, objSkillControl.Height * i + panActiveSkills.AutoScrollPosition.Y); panActiveSkills.Controls.Add(objSkillControl); } else { // Find the correct Skill Control. SkillControl objSkillControl = new SkillControl(_objCharacter); foreach (SkillControl objControl in panActiveSkills.Controls) { if (objControl.SkillName == objXmlSkill["name"].InnerText) { objSkillControl = objControl; break; } } // Make sure it's not going above the maximum number. if (Convert.ToInt32(objXmlSkill["rating"].InnerText) > objSkillControl.SkillRatingMaximum) objSkillControl.SkillRating = objSkillControl.SkillRatingMaximum; else objSkillControl.SkillRating = Convert.ToInt32(objXmlSkill["rating"].InnerText); if (objXmlSkill["spec"] != null) objSkillControl.SkillSpec = objXmlSkill["spec"].InnerText; else objSkillControl.SkillSpec = ""; } } // Skill Groups. foreach (XmlNode objXmlGroup in objXmlKit.SelectNodes("skills/skillgroup")) { // Find the correct SkillGroupControl. SkillGroupControl objSkillGroupControl = new SkillGroupControl(_objCharacter.Options, _objCharacter); foreach (SkillGroupControl objControl in panSkillGroups.Controls) { if (objControl.GroupName == objXmlGroup["name"].InnerText) { objSkillGroupControl = objControl; break; } } // Make sure it's not going above the maximum number. if (Convert.ToInt32(objXmlGroup["base"].InnerText) > objSkillGroupControl.GroupRatingMaximum) { objSkillGroupControl.BaseRating = objSkillGroupControl.GroupRatingMaximum; objSkillGroupControl.KarmaRating = 0; } else if (Convert.ToInt32(objXmlGroup["base"].InnerText) + Convert.ToInt32(objXmlGroup["karma"].InnerText) > objSkillGroupControl.GroupRatingMaximum) { objSkillGroupControl.BaseRating = Convert.ToInt32(objXmlGroup["base"].InnerText); objSkillGroupControl.KarmaRating = objSkillGroupControl.GroupRatingMaximum - objSkillGroupControl.BaseRating; } else { objSkillGroupControl.BaseRating = Convert.ToInt32(objXmlGroup["base"].InnerText); objSkillGroupControl.KarmaRating = Convert.ToInt32(objXmlGroup["karma"].InnerText); } } } // Update Knowledge Skills. if (objXmlKit["knowledgeskills"] != null) { foreach (XmlNode objXmlSkill in objXmlKit.SelectNodes("knowledgeskills/skill")) { int i = panKnowledgeSkills.Controls.Count; Skill objSkill = new Skill(_objCharacter); objSkill.Name = objXmlSkill["name"].InnerText; SkillControl objSkillControl = new SkillControl(_objCharacter); objSkillControl.SkillObject = objSkill; // Attach an EventHandler for the RatingChanged and SpecializationChanged Events. objSkillControl.RatingChanged += objKnowledgeSkill_RatingChanged; objSkillControl.SpecializationChanged += objSkill_SpecializationChanged; objSkillControl.DeleteSkill += objKnowledgeSkill_DeleteSkill; objSkillControl.KnowledgeSkill = true; objSkillControl.AllowDelete = true; if (_objCharacter.IgnoreRules) { objSkillControl.SkillRatingMaximum = 12; } else { objSkillControl.SkillRatingMaximum = 6; } // Set the SkillControl's Location since scrolling the Panel causes it to actually change the child Controls' Locations. objSkillControl.Location = new Point(0, objSkillControl.Height * i + panKnowledgeSkills.AutoScrollPosition.Y); panKnowledgeSkills.Controls.Add(objSkillControl); objSkillControl.SkillName = objXmlSkill["name"].InnerText; // Make sure it's not going above the maximum number. if (Convert.ToInt32(objXmlSkill["rating"].InnerText) > objSkillControl.SkillRatingMaximum) objSkillControl.SkillRating = objSkillControl.SkillRatingMaximum; else objSkillControl.SkillRating = Convert.ToInt32(objXmlSkill["rating"].InnerText); if (objXmlSkill["spec"] != null) objSkillControl.SkillSpec = objXmlSkill["spec"].InnerText; else objSkillControl.SkillSpec = ""; if (objXmlSkill["category"] != null) objSkillControl.SkillCategory = objXmlSkill["category"].InnerText; _objCharacter.Skills.Add(objSkill); } } // Select a Martial Art. if (objXmlKit["selectmartialart"] != null) { string strForcedValue = ""; int intRating = 1; if (objXmlKit["selectmartialart"].Attributes["select"] != null) strForcedValue = objXmlKit["selectmartialart"].Attributes["select"].InnerText; if (objXmlKit["selectmartialart"].Attributes["rating"] != null) intRating = Convert.ToInt32(objXmlKit["selectmartialart"].Attributes["rating"].InnerText); frmSelectMartialArt frmPickMartialArt = new frmSelectMartialArt(_objCharacter); frmPickMartialArt.ForcedValue = strForcedValue; frmPickMartialArt.ShowDialog(this); if (frmPickMartialArt.DialogResult != DialogResult.Cancel) { // Open the Martial Arts XML file and locate the selected piece. XmlDocument objXmlMartialArtDocument = XmlManager.Instance.Load("martialarts.xml"); XmlNode objXmlArt = objXmlMartialArtDocument.SelectSingleNode("/chummer/martialarts/martialart[name = \"" + frmPickMartialArt.SelectedMartialArt + "\"]"); TreeNode objNode = new TreeNode(); MartialArt objMartialArt = new MartialArt(_objCharacter); objMartialArt.Create(objXmlArt, objNode, _objCharacter); objMartialArt.Rating = intRating; _objCharacter.MartialArts.Add(objMartialArt); objNode.ContextMenuStrip = cmsMartialArts; treMartialArts.Nodes[0].Nodes.Add(objNode); treMartialArts.Nodes[0].Expand(); treMartialArts.SelectedNode = objNode; } } // Update Martial Arts. if (objXmlKit["martialarts"] != null) { // Open the Martial Arts XML file and locate the selected art. XmlDocument objXmlMartialArtDocument = XmlManager.Instance.Load("martialarts.xml"); foreach (XmlNode objXmlArt in objXmlKit.SelectNodes("martialarts/martialart")) { TreeNode objNode = new TreeNode(); MartialArt objArt = new MartialArt(_objCharacter); XmlNode objXmlArtNode = objXmlMartialArtDocument.SelectSingleNode("/chummer/martialarts/martialart[name = \"" + objXmlArt["name"].InnerText + "\"]"); objArt.Create(objXmlArtNode, objNode, _objCharacter); objArt.Rating = Convert.ToInt32(objXmlArt["rating"].InnerText); _objCharacter.MartialArts.Add(objArt); // Check for Advantages. foreach (XmlNode objXmlAdvantage in objXmlArt.SelectNodes("techniques/technique")) { TreeNode objChildNode = new TreeNode(); MartialArtAdvantage objAdvantage = new MartialArtAdvantage(_objCharacter); XmlNode objXmlAdvantageNode = objXmlMartialArtDocument.SelectSingleNode("/chummer/martialarts/martialart[name = \"" + objXmlArt["name"].InnerText + "\"]/techniques/technique[. = \"" + objXmlAdvantage.InnerText + "\"]"); objAdvantage.Create(objXmlAdvantageNode, _objCharacter, objChildNode); objArt.Advantages.Add(objAdvantage); objNode.Nodes.Add(objChildNode); objNode.Expand(); } treMartialArts.Nodes[0].Nodes.Add(objNode); treMartialArts.Nodes[0].Expand(); } } // Update Adept Powers. if (objXmlKit["powers"] != null) { // Open the Powers XML file and locate the selected power. XmlDocument objXmlPowerDocument = XmlManager.Instance.Load("powers.xml"); foreach (XmlNode objXmlPower in objXmlKit.SelectNodes("powers/power")) { XmlNode objXmlPowerNode = objXmlPowerDocument.SelectSingleNode("/chummer/powers/power[name = \"" + objXmlPower["name"].InnerText + "\"]"); int i = panPowers.Controls.Count; Power objPower = new Power(_objCharacter); _objCharacter.Powers.Add(objPower); PowerControl objPowerControl = new PowerControl(); objPowerControl.PowerObject = objPower; // Attach an EventHandler for the PowerRatingChanged Event. objPowerControl.PowerRatingChanged += objPower_PowerRatingChanged; objPowerControl.DeletePower += objPower_DeletePower; objPowerControl.PowerName = objXmlPowerNode["name"].InnerText; objPowerControl.PointsPerLevel = Convert.ToDecimal(objXmlPowerNode["points"].InnerText, GlobalOptions.Instance.CultureInfo); objPowerControl.AdeptWayDiscount = Convert.ToDecimal(objXmlPowerNode["adeptway"].InnerText, GlobalOptions.Instance.CultureInfo); if (objXmlPowerNode["levels"].InnerText == "no") { objPowerControl.LevelEnabled = false; } else { objPowerControl.LevelEnabled = true; if (objXmlPowerNode["levels"].InnerText != "yes") objPower.MaxLevels = Convert.ToInt32(objXmlPowerNode["levels"].InnerText); } objPower.Source = objXmlPowerNode["source"].InnerText; objPower.Page = objXmlPowerNode["page"].InnerText; if (objXmlPowerNode["doublecost"] != null) objPower.DoubleCost = false; if (objXmlPowerNode.InnerXml.Contains("bonus")) { objPower.Bonus = objXmlPowerNode["bonus"]; if (objXmlPower["name"].Attributes["select"] != null) _objImprovementManager.ForcedValue = objXmlPower["name"].Attributes["select"].InnerText; _objImprovementManager.CreateImprovements(Improvement.ImprovementSource.Power, objPower.InternalId, objPower.Bonus, false, Convert.ToInt32(objPower.Rating), objPower.DisplayNameShort); objPowerControl.Extra = _objImprovementManager.SelectedValue; } objPowerControl.Top = i * objPowerControl.Height; panPowers.Controls.Add(objPowerControl); // Set the Rating of the Power if applicable. if (objXmlPower["rating"] != null) objPowerControl.PowerLevel = Convert.ToInt32(objXmlPower["rating"].InnerText); } } // Update Complex Forms. if (objXmlKit["programs"] != null) { // Open the Programs XML file and locate the selected program. XmlDocument objXmlProgramDocument = XmlManager.Instance.Load("complexforms.xml"); foreach (XmlNode objXmlProgram in objXmlKit.SelectNodes("complexforms/complexform")) { XmlNode objXmlProgramNode = objXmlProgramDocument.SelectSingleNode("/chummer/complexforms/complexform[name = \"" + objXmlProgram["name"].InnerText + "\"]"); string strForceValue = ""; if (objXmlProgram.Attributes["select"] != null) strForceValue = objXmlProgram.Attributes["select"].InnerText; TreeNode objNode = new TreeNode(); ComplexForm objProgram = new ComplexForm(_objCharacter); objProgram.Create(objXmlProgramNode, _objCharacter, objNode, strForceValue); treComplexForms.Nodes[0].Nodes.Add(objNode); treComplexForms.Nodes[0].Expand(); _objCharacter.ComplexForms.Add(objProgram); treComplexForms.SortCustom(); } } // Update Spells. if (objXmlKit["spells"] != null) { XmlDocument objXmlSpellDocument = XmlManager.Instance.Load("spells.xml"); foreach (XmlNode objXmlSpell in objXmlKit.SelectNodes("spells/spell")) { // Make sure the Spell has not already been added to the character. bool blnFound = false; foreach (TreeNode nodSpell in treSpells.Nodes[0].Nodes) { if (nodSpell.Text == objXmlSpell.InnerText) { blnFound = true; break; } } // The Spell is not in the list, so add it. if (!blnFound) { string strForceValue = ""; if (objXmlSpell.Attributes["select"] != null) strForceValue = objXmlSpell.Attributes["select"].InnerText; XmlNode objXmlSpellNode = objXmlSpellDocument.SelectSingleNode("/chummer/spells/spell[name = \"" + objXmlSpell.InnerText + "\"]"); Spell objSpell = new Spell(_objCharacter); TreeNode objNode = new TreeNode(); objSpell.Create(objXmlSpellNode, _objCharacter, objNode, strForceValue); objNode.ContextMenuStrip = cmsSpell; _objCharacter.Spells.Add(objSpell); switch (objSpell.Category) { case "Combat": treSpells.Nodes[0].Nodes.Add(objNode); treSpells.Nodes[0].Expand(); break; case "Detection": treSpells.Nodes[1].Nodes.Add(objNode); treSpells.Nodes[1].Expand(); break; case "Health": treSpells.Nodes[2].Nodes.Add(objNode); treSpells.Nodes[2].Expand(); break; case "Illusion": treSpells.Nodes[3].Nodes.Add(objNode); treSpells.Nodes[3].Expand(); break; case "Manipulation": treSpells.Nodes[4].Nodes.Add(objNode); treSpells.Nodes[4].Expand(); break; case "Rituals": int intNode = 5; if (_objCharacter.AdeptEnabled && !_objCharacter.MagicianEnabled) intNode = 0; treSpells.Nodes[intNode].Nodes.Add(objNode); treSpells.Nodes[intNode].Expand(); break; } treSpells.SortCustom(); } } } // Update Spirits. if (objXmlKit["spirits"] != null) { foreach (XmlNode objXmlSpirit in objXmlKit.SelectNodes("spirits/spirit")) { int i = panSpirits.Controls.Count; Spirit objSpirit = new Spirit(_objCharacter); _objCharacter.Spirits.Add(objSpirit); SpiritControl objSpiritControl = new SpiritControl(); objSpiritControl.SpiritObject = objSpirit; objSpiritControl.EntityType = SpiritType.Spirit; // Attach an EventHandler for the ServicesOwedChanged Event. objSpiritControl.ServicesOwedChanged += objSpirit_ServicesOwedChanged; objSpiritControl.ForceChanged += objSpirit_ForceChanged; objSpiritControl.BoundChanged += objSpirit_BoundChanged; objSpiritControl.DeleteSpirit += objSpirit_DeleteSpirit; objSpiritControl.Name = objXmlSpirit["name"].InnerText; objSpiritControl.Force = Convert.ToInt32(objXmlSpirit["force"].InnerText); objSpiritControl.ServicesOwed = Convert.ToInt32(objXmlSpirit["services"].InnerText); objSpiritControl.Top = i * objSpiritControl.Height; panSpirits.Controls.Add(objSpiritControl); } } // Update Lifestyles. if (objXmlKit["lifestyles"] != null) { XmlDocument objXmlLifestyleDocument = XmlManager.Instance.Load("lifestyles.xml"); foreach (XmlNode objXmlLifestyle in objXmlKit.SelectNodes("lifestyles/lifestyle")) { string strName = objXmlLifestyle["name"].InnerText; int intMonths = Convert.ToInt32(objXmlLifestyle["months"].InnerText); // Create the Lifestyle. TreeNode objNode = new TreeNode(); Lifestyle objLifestyle = new Lifestyle(_objCharacter); XmlNode objXmlLifestyleNode = objXmlLifestyleDocument.SelectSingleNode("/chummer/lifestyles/lifestyle[name = \"" + strName + "\"]"); if (objXmlLifestyleNode != null) { // This is a standard Lifestyle, so just use the Create method. objLifestyle.Create(objXmlLifestyleNode, objNode); objLifestyle.Months = intMonths; } else { // This is an Advanced Lifestyle, so build it manually. objLifestyle.Name = strName; objLifestyle.Months = intMonths; objLifestyle.Cost = Convert.ToInt32(objXmlLifestyle["cost"].InnerText); objLifestyle.Dice = Convert.ToInt32(objXmlLifestyle["dice"].InnerText); objLifestyle.Multiplier = Convert.ToInt32(objXmlLifestyle["multiplier"].InnerText); objLifestyle.BaseLifestyle = objXmlLifestyle["baselifestyle"].InnerText; objLifestyle.Source = "SR5"; objLifestyle.Page = "373"; objLifestyle.Comforts = Convert.ToInt32(objXmlLifestyle["comforts"].InnerText); objLifestyle.ComfortsEntertainment = Convert.ToInt32(objXmlLifestyle["comfortsentertainment"].InnerText); objLifestyle.Security = Convert.ToInt32(objXmlLifestyle["security"].InnerText); objLifestyle.SecurityEntertainment = Convert.ToInt32(objXmlLifestyle["securityentertainment"].InnerText); objLifestyle.Area = Convert.ToInt32(objXmlLifestyle["area"].InnerText); objLifestyle.AreaEntertainment = Convert.ToInt32(objXmlLifestyle["areaentertainment"].InnerText); foreach (LifestyleQuality objXmlQuality in objXmlLifestyle.SelectNodes("lifestylequalities/lifestylequality")) objLifestyle.LifestyleQualities.Add(objXmlQuality); objNode.Text = strName; } // Add the Lifestyle to the character and Lifestyle Tree. if (objLifestyle.BaseLifestyle != "") objNode.ContextMenuStrip = cmsAdvancedLifestyle; else objNode.ContextMenuStrip = cmsLifestyleNotes; _objCharacter.Lifestyles.Add(objLifestyle); treLifestyles.Nodes[0].Nodes.Add(objNode); treLifestyles.Nodes[0].Expand(); } } // Update NuyenBP. if (objXmlKit["nuyenbp"] != null) { int intAmount = Convert.ToInt32(objXmlKit["nuyenbp"].InnerText); //if (_objCharacter.BuildMethod == CharacterBuildMethod.Karma) //intAmount *= 2; // Make sure we don't go over the field's maximum which would throw an Exception. if (nudNuyen.Value + intAmount > nudNuyen.Maximum) nudNuyen.Value = nudNuyen.Maximum; else nudNuyen.Value += intAmount; } // Update Armor. if (objXmlKit["armors"] != null) { XmlDocument objXmlArmorDocument = XmlManager.Instance.Load("armor.xml"); foreach (XmlNode objXmlArmor in objXmlKit.SelectNodes("armors/armor")) { XmlNode objXmlArmorNode = objXmlArmorDocument.SelectSingleNode("/chummer/armors/armor[name = \"" + objXmlArmor["name"].InnerText + "\"]"); Armor objArmor = new Armor(_objCharacter); TreeNode objNode = new TreeNode(); objArmor.Create(objXmlArmorNode, objNode, cmsArmorMod, Convert.ToInt32(objXmlArmor["rating"].InnerText), false, blnCreateChildren); _objCharacter.Armor.Add(objArmor); // Look for Armor Mods. if (objXmlArmor["mods"] != null) { foreach (XmlNode objXmlMod in objXmlArmor.SelectNodes("mods/mod")) { List<Weapon> lstWeapons = new List<Weapon>(); List<TreeNode> lstWeaponNodes = new List<TreeNode>(); XmlNode objXmlModNode = objXmlArmorDocument.SelectSingleNode("/chummer/mods/mod[name = \"" + objXmlMod["name"].InnerText + "\"]"); ArmorMod objMod = new ArmorMod(_objCharacter); TreeNode objModNode = new TreeNode(); int intRating = 0; if (objXmlMod["rating"] != null) intRating = Convert.ToInt32(objXmlMod["rating"].InnerText); objMod.Create(objXmlModNode, objModNode, intRating, lstWeapons, lstWeaponNodes); objModNode.ContextMenuStrip = cmsArmorMod; objMod.Parent = objArmor; objArmor.ArmorMods.Add(objMod); objNode.Nodes.Add(objModNode); objNode.Expand(); // Add any Weapons created by the Mod. foreach (Weapon objWeapon in lstWeapons) _objCharacter.Weapons.Add(objWeapon); foreach (TreeNode objWeaponNode in lstWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } } } XmlDocument objXmlGearDocument = XmlManager.Instance.Load("gear.xml"); foreach (XmlNode objXmlGear in objXmlArmor.SelectNodes("gears/gear")) AddPACKSGear(objXmlGearDocument, objXmlGear, objNode, objArmor, cmsArmorGear, blnCreateChildren); objNode.ContextMenuStrip = cmsArmor; treArmor.Nodes[0].Nodes.Add(objNode); treArmor.Nodes[0].Expand(); } } // Update Weapons. if (objXmlKit["weapons"] != null) { XmlDocument objXmlWeaponDocument = XmlManager.Instance.Load("weapons.xml"); pgbProgress.Visible = true; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlKit.SelectNodes("weapons/weapon").Count; int i = 0; foreach (XmlNode objXmlWeapon in objXmlKit.SelectNodes("weapons/weapon")) { i++; pgbProgress.Value = i; Application.DoEvents(); XmlNode objXmlWeaponNode = objXmlWeaponDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + objXmlWeapon["name"].InnerText + "\"]"); Weapon objWeapon = new Weapon(_objCharacter); TreeNode objNode = new TreeNode(); objWeapon.Create(objXmlWeaponNode, _objCharacter, objNode, cmsWeapon, cmsWeaponAccessory, cmsWeaponMod, blnCreateChildren); _objCharacter.Weapons.Add(objWeapon); // Look for Weapon Accessories. if (objXmlWeapon["accessories"] != null) { foreach (XmlNode objXmlAccessory in objXmlWeapon.SelectNodes("accessories/accessory")) { XmlNode objXmlAccessoryNode = objXmlWeaponDocument.SelectSingleNode("/chummer/accessories/accessory[name = \"" + objXmlAccessory["name"].InnerText + "\"]"); WeaponAccessory objMod = new WeaponAccessory(_objCharacter); TreeNode objModNode = new TreeNode(); string strMount = ""; int intRating = 0; if (objXmlAccessory["mount"] != null) strMount = objXmlAccessory["mount"].InnerText; objMod.Create(objXmlAccessoryNode, objModNode, strMount, intRating); objModNode.ContextMenuStrip = cmsWeaponAccessory; objMod.Parent = objWeapon; objWeapon.WeaponAccessories.Add(objMod); XmlDocument objXmlGearDocument = XmlManager.Instance.Load("gear.xml"); foreach (XmlNode objXmlGear in objXmlAccessory.SelectNodes("gears/gear")) AddPACKSGear(objXmlGearDocument, objXmlGear, objModNode, objMod, cmsWeaponAccessoryGear, blnCreateChildren); objNode.Nodes.Add(objModNode); objNode.Expand(); } } // Look for Weapon Mods. if (objXmlWeapon["mods"] != null) { foreach (XmlNode objXmlMod in objXmlWeapon.SelectNodes("mods/mod")) { XmlNode objXmlModNode = objXmlWeaponDocument.SelectSingleNode("/chummer/mods/mod[name = \"" + objXmlMod["name"].InnerText + "\"]"); WeaponMod objMod = new WeaponMod(_objCharacter); TreeNode objModNode = new TreeNode(); objMod.Create(objXmlModNode, objModNode); objModNode.ContextMenuStrip = cmsWeaponMod; objMod.Parent = objWeapon; objWeapon.WeaponMods.Add(objMod); objNode.Nodes.Add(objModNode); objNode.Expand(); } } // Look for an Underbarrel Weapon. if (objXmlWeapon["underbarrel"] != null) { XmlNode objXmlUnderbarrelNode = objXmlWeaponDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + objXmlWeapon["underbarrel"].InnerText + "\"]"); Weapon objUnderbarrelWeapon = new Weapon(_objCharacter); TreeNode objUnderbarrelNode = new TreeNode(); objUnderbarrelWeapon.Create(objXmlUnderbarrelNode, _objCharacter, objUnderbarrelNode, cmsWeapon, cmsWeaponAccessory, cmsWeaponMod, blnCreateChildren); objWeapon.UnderbarrelWeapons.Add(objUnderbarrelWeapon); objNode.Nodes.Add(objUnderbarrelNode); objNode.Expand(); } objNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objNode); treWeapons.Nodes[0].Expand(); Application.DoEvents(); } } // Update Cyberware. if (objXmlKit["cyberwares"] != null) { XmlDocument objXmlCyberwareDocument = XmlManager.Instance.Load("cyberware.xml"); XmlDocument objXmlGearDocument = XmlManager.Instance.Load("gear.xml"); pgbProgress.Visible = true; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlKit.SelectNodes("cyberwares/cyberware").Count; int i = 0; foreach (XmlNode objXmlCyberware in objXmlKit.SelectNodes("cyberwares/cyberware")) { i++; pgbProgress.Value = i; Application.DoEvents(); List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); TreeNode objNode = new TreeNode(); Cyberware objCyberware = new Cyberware(_objCharacter); Grade objGrade = objCyberware.ConvertToCyberwareGrade(objXmlCyberware["grade"].InnerText, Improvement.ImprovementSource.Cyberware); int intRating = 0; if (objXmlCyberware["rating"] != null) intRating = Convert.ToInt32(objXmlCyberware["rating"].InnerText); XmlNode objXmlCyberwareNode = objXmlCyberwareDocument.SelectSingleNode("/chummer/cyberwares/cyberware[name = \"" + objXmlCyberware["name"].InnerText + "\"]"); objCyberware.Create(objXmlCyberwareNode, _objCharacter, objGrade, Improvement.ImprovementSource.Cyberware, intRating, objNode, objWeapons, objWeaponNodes, true, blnCreateChildren); _objCharacter.Cyberware.Add(objCyberware); // Add any children. if (objXmlCyberware["cyberwares"] != null) { foreach (XmlNode objXmlChild in objXmlCyberware.SelectNodes("cyberwares/cyberware")) { TreeNode objChildNode = new TreeNode(); Cyberware objChildCyberware = new Cyberware(_objCharacter); int intChildRating = 0; if (objXmlChild["rating"] != null) intChildRating = Convert.ToInt32(objXmlChild["rating"].InnerText); XmlNode objXmlChildNode = objXmlCyberwareDocument.SelectSingleNode("/chummer/cyberwares/cyberware[name = \"" + objXmlChild["name"].InnerText + "\"]"); objChildCyberware.Create(objXmlChildNode, _objCharacter, objGrade, Improvement.ImprovementSource.Cyberware, intChildRating, objChildNode, objWeapons, objWeaponNodes, true, blnCreateChildren); objCyberware.Children.Add(objChildCyberware); objChildNode.ContextMenuStrip = cmsCyberware; foreach (XmlNode objXmlGear in objXmlChild.SelectNodes("gears/gear")) AddPACKSGear(objXmlGearDocument, objXmlGear, objChildNode, objChildCyberware, cmsCyberwareGear, blnCreateChildren); objNode.Nodes.Add(objChildNode); objNode.Expand(); } } foreach (XmlNode objXmlGear in objXmlCyberware.SelectNodes("gears/gear")) AddPACKSGear(objXmlGearDocument, objXmlGear, objNode, objCyberware, cmsCyberwareGear, blnCreateChildren); objNode.ContextMenuStrip = cmsCyberware; treCyberware.Nodes[0].Nodes.Add(objNode); treCyberware.Nodes[0].Expand(); // Add any Weapons created by the Gear. foreach (Weapon objWeapon in objWeapons) _objCharacter.Weapons.Add(objWeapon); foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } Application.DoEvents(); } treCyberware.SortCustom(); } // Update Bioware. if (objXmlKit["biowares"] != null) { XmlDocument objXmlBiowareDocument = XmlManager.Instance.Load("bioware.xml"); pgbProgress.Visible = true; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlKit.SelectNodes("biowares/bioware").Count; int i = 0; foreach (XmlNode objXmlBioware in objXmlKit.SelectNodes("biowares/bioware")) { i++; pgbProgress.Value = i; Application.DoEvents(); List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); TreeNode objNode = new TreeNode(); Cyberware objCyberware = new Cyberware(_objCharacter); Grade objGrade = objCyberware.ConvertToCyberwareGrade(objXmlBioware["grade"].InnerText, Improvement.ImprovementSource.Bioware); int intRating = 0; if (objXmlBioware["rating"] != null) intRating = Convert.ToInt32(objXmlBioware["rating"].InnerText); XmlNode objXmlBiowareNode = objXmlBiowareDocument.SelectSingleNode("/chummer/biowares/bioware[name = \"" + objXmlBioware["name"].InnerText + "\"]"); objCyberware.Create(objXmlBiowareNode, _objCharacter, objGrade, Improvement.ImprovementSource.Bioware, intRating, objNode, objWeapons, objWeaponNodes, true, blnCreateChildren); _objCharacter.Cyberware.Add(objCyberware); objNode.ContextMenuStrip = cmsBioware; treCyberware.Nodes[1].Nodes.Add(objNode); treCyberware.Nodes[1].Expand(); // Add any Weapons created by the Gear. foreach (Weapon objWeapon in objWeapons) _objCharacter.Weapons.Add(objWeapon); foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } Application.DoEvents(); } treCyberware.SortCustom(); } // Update Gear. if (objXmlKit["gears"] != null) { XmlDocument objXmlGearDocument = XmlManager.Instance.Load("gear.xml"); pgbProgress.Visible = true; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlKit.SelectNodes("gears/gear").Count; int i = 0; foreach (XmlNode objXmlGear in objXmlKit.SelectNodes("gears/gear")) { i++; pgbProgress.Value = i; Application.DoEvents(); AddPACKSGear(objXmlGearDocument, objXmlGear, treGear.Nodes[0], _objCharacter, cmsGear, blnCreateChildren); Application.DoEvents(); } } // Update Vehicles. if (objXmlKit["vehicles"] != null) { XmlDocument objXmlVehicleDocument = XmlManager.Instance.Load("vehicles.xml"); pgbProgress.Visible = true; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlKit.SelectNodes("vehicles/vehicle").Count; int i = 0; foreach (XmlNode objXmlVehicle in objXmlKit.SelectNodes("vehicles/vehicle")) { i++; pgbProgress.Value = i; Application.DoEvents(); Gear objDefaultSensor = new Gear(_objCharacter); TreeNode objNode = new TreeNode(); Vehicle objVehicle = new Vehicle(_objCharacter); XmlNode objXmlVehicleNode = objXmlVehicleDocument.SelectSingleNode("/chummer/vehicles/vehicle[name = \"" + objXmlVehicle["name"].InnerText + "\"]"); objVehicle.Create(objXmlVehicleNode, objNode, cmsVehicle, cmsVehicleGear, cmsVehicleWeapon, cmsVehicleWeaponAccessory, cmsVehicleWeaponMod, blnCreateChildren); _objCharacter.Vehicles.Add(objVehicle); // Grab the default Sensor that comes with the Vehicle. foreach (Gear objSensorGear in objVehicle.Gear) { if (objSensorGear.Category == "Sensors" && objSensorGear.Cost == "0" && objSensorGear.Rating == 0) { objDefaultSensor = objSensorGear; break; } } // Add any Vehicle Mods. if (objXmlVehicle["mods"] != null) { foreach (XmlNode objXmlMod in objXmlVehicle.SelectNodes("mods/mod")) { TreeNode objModNode = new TreeNode(); VehicleMod objMod = new VehicleMod(_objCharacter); int intRating = 0; if (objXmlMod["rating"] != null) intRating = Convert.ToInt32(objXmlMod["rating"].InnerText); XmlNode objXmlModNode = objXmlVehicleDocument.SelectSingleNode("/chummer/mods/mod[name = \"" + objXmlMod["name"].InnerText + "\"]"); objMod.Create(objXmlModNode, objModNode, intRating); objVehicle.Mods.Add(objMod); objNode.Nodes.Add(objModNode); objNode.Expand(); } } // Add any Vehicle Gear. if (objXmlVehicle["gears"] != null) { XmlDocument objXmlGearDocument = XmlManager.Instance.Load("gear.xml"); foreach (XmlNode objXmlGear in objXmlVehicle.SelectNodes("gears/gear")) { List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); TreeNode objGearNode = new TreeNode(); Gear objGear = new Gear(_objCharacter); int intQty = 1; int intRating = 0; if (objXmlGear["rating"] != null) intRating = Convert.ToInt32(objXmlGear["rating"].InnerText); string strForceValue = ""; if (objXmlGear["name"].Attributes["select"] != null) strForceValue = objXmlGear["name"].Attributes["select"].InnerText; if (objXmlGear["qty"] != null) intQty = Convert.ToInt32(objXmlGear["qty"].InnerText); XmlNode objXmlGearNode = objXmlGearDocument.SelectSingleNode("/chummer/gears/gear[name = \"" + objXmlGear["name"].InnerText + "\"]"); objGear.Create(objXmlGearNode, _objCharacter, objGearNode, intRating, objWeapons, objWeaponNodes, strForceValue, false, false, false, blnCreateChildren, false); objGear.Quantity = intQty; objGearNode.Text = objGear.DisplayName; objVehicle.Gear.Add(objGear); // Look for child components. if (objXmlGear["gears"] != null) { foreach (XmlNode objXmlChild in objXmlGear.SelectNodes("gears/gear")) { AddPACKSGear(objXmlGearDocument, objXmlChild, objGearNode, objGear, cmsVehicleGear, blnCreateChildren); } } objGearNode.Expand(); objGearNode.ContextMenuStrip = cmsVehicleGear; objNode.Nodes.Add(objGearNode); objNode.Expand(); // If this is a Sensor, it will replace the Vehicle's base sensor, so remove it. if (objGear.Category == "Sensors" && objGear.Cost == "0" && objGear.Rating == 0) { objVehicle.Gear.Remove(objDefaultSensor); foreach (TreeNode objSensorNode in objNode.Nodes) { if (objSensorNode.Tag.ToString() == objDefaultSensor.InternalId) { objSensorNode.Remove(); break; } } } } } // Add any Vehicle Weapons. if (objXmlVehicle["weapons"] != null) { XmlDocument objXmlWeaponDocument = XmlManager.Instance.Load("weapons.xml"); foreach (XmlNode objXmlWeapon in objXmlVehicle.SelectNodes("weapons/weapon")) { TreeNode objWeaponNode = new TreeNode(); Weapon objWeapon = new Weapon(_objCharacter); XmlNode objXmlWeaponNode = objXmlWeaponDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + objXmlWeapon["name"].InnerText + "\"]"); objWeapon.Create(objXmlWeaponNode, _objCharacter, objWeaponNode, cmsVehicleWeapon, cmsVehicleWeaponAccessory, cmsVehicleWeaponMod, blnCreateChildren); objWeapon.VehicleMounted = true; // Find the first Weapon Mount in the Vehicle. foreach (VehicleMod objMod in objVehicle.Mods) { if (objMod.Name.StartsWith("Weapon Mount") || objMod.Name.StartsWith("Heavy Weapon Mount")) { objMod.Weapons.Add(objWeapon); foreach (TreeNode objModNode in objNode.Nodes) { if (objModNode.Tag.ToString() == objMod.InternalId) { objWeaponNode.ContextMenuStrip = cmsVehicleWeapon; objModNode.Nodes.Add(objWeaponNode); objModNode.Expand(); break; } } break; } } // Look for Weapon Accessories. if (objXmlWeapon["accessories"] != null) { foreach (XmlNode objXmlAccessory in objXmlWeapon.SelectNodes("accessories/accessory")) { XmlNode objXmlAccessoryNode = objXmlWeaponDocument.SelectSingleNode("/chummer/accessories/accessory[name = \"" + objXmlAccessory["name"].InnerText + "\"]"); WeaponAccessory objMod = new WeaponAccessory(_objCharacter); TreeNode objModNode = new TreeNode(); string strMount = ""; int intRating = 0; if (objXmlAccessory["mount"] != null) strMount = objXmlAccessory["mount"].InnerText; objMod.Create(objXmlAccessoryNode, objModNode, strMount,intRating); objModNode.ContextMenuStrip = cmsWeaponAccessory; objMod.Parent = objWeapon; objWeapon.WeaponAccessories.Add(objMod); objWeaponNode.Nodes.Add(objModNode); objWeaponNode.Expand(); } } // Look for Weapon Mods. if (objXmlWeapon["mods"] != null) { foreach (XmlNode objXmlMod in objXmlWeapon.SelectNodes("mods/mod")) { XmlNode objXmlModNode = objXmlWeaponDocument.SelectSingleNode("/chummer/mods/mod[name = \"" + objXmlMod["name"].InnerText + "\"]"); WeaponMod objMod = new WeaponMod(_objCharacter); TreeNode objModNode = new TreeNode(); objMod.Create(objXmlModNode, objModNode); objModNode.ContextMenuStrip = cmsVehicleWeaponMod; objMod.Parent = objWeapon; objWeapon.WeaponMods.Add(objMod); objWeaponNode.Nodes.Add(objModNode); objWeaponNode.Expand(); } } } } objNode.ContextMenuStrip = cmsVehicle; treVehicles.Nodes[0].Nodes.Add(objNode); treVehicles.Nodes[0].Expand(); Application.DoEvents(); } } pgbProgress.Visible = false; if (frmPickPACKSKit.AddAgain) AddPACKSKit(); PopulateGearList(); UpdateCharacterInfo(); }
/// <summary> /// Parse an XmlNode and create the Cyberware for it and its children, adding them to the list of Cyberware in the suite. /// </summary> /// <param name="objXmlSuite">XmlNode to parse.</param> /// <param name="objGrade">Grade that the Cyberware should be created with.</param> /// <param name="objParent">Parent that child items should be assigned to.</param> private void ParseNode(XmlNode objXmlSuite, Grade objGrade, Cyberware objParent) { // Run through all of the items in the Suite list. foreach (XmlNode objXmlItem in objXmlSuite.SelectNodes(_strType + "s/" + _strType)) { int intRating = 0; if (objXmlItem["rating"] != null) { intRating = Convert.ToInt32(objXmlItem["rating"].InnerText); } // Retrieve the information for the current piece of Cyberware and add it to the ESS and Cost totals. XmlNode objXmlCyberware = _objXmlDocument.SelectSingleNode("/chummer/" + _strType + "s/" + _strType + "[name = \"" + objXmlItem["name"].InnerText + "\"]"); TreeNode objTreeNode = new TreeNode(); List<Weapon> lstWeapons = new List<Weapon>(); List<TreeNode> lstWeaponNodes = new List<TreeNode>(); Cyberware objCyberware = new Cyberware(_objCharacter); objCyberware.Create(objXmlCyberware, _objCharacter, objGrade, _objSource, intRating, objTreeNode, lstWeapons, lstWeaponNodes, false, false); objCyberware.Suite = true; if (objParent == null) _lstCyberware.Add(objCyberware); else objParent.Children.Add(objCyberware); ParseNode(objXmlItem, objGrade, objCyberware); } }