/// <summary> /// Accept the selected item and close the form. /// </summary> private void AcceptForm() { if (lstCyberware.Text != "") { XmlNode objNode = _objXmlDocument.SelectSingleNode("/chummer/" + _strNode + "s/" + _strNode + "[name = \"" + lstCyberware.SelectedValue + "\"]"); _strSelectCategory = objNode["category"].InnerText; _strSelectedCyberware = objNode["name"].InnerText; } if (_objMode == Mode.Bioware) { if (cboCategory.SelectedValue.ToString().StartsWith("Genetech:") || cboCategory.SelectedValue.ToString() == "Symbionts" || cboCategory.SelectedValue.ToString() == "Genemods") { _objSelectedGrade = GlobalOptions.BiowareGrades.GetGrade("Standard"); } else { _objSelectedGrade = GlobalOptions.BiowareGrades.GetGrade(cboGrade.SelectedValue.ToString()); } } else { _objSelectedGrade = GlobalOptions.CyberwareGrades.GetGrade(cboGrade.SelectedValue.ToString()); } _strSelectedGrade = _objSelectedGrade.ToString(); _intSelectedRating = Convert.ToInt32(nudRating.Value); _blnBlackMarketDiscount = chkBlackMarketDiscount.Checked; if (nudESSDiscount.Visible) _intSelectedESSDiscount = Convert.ToInt32(nudESSDiscount.Value); XmlNode objCyberwareNode = _objXmlDocument.SelectSingleNode("/chummer/" + _strNode + "s/" + _strNode + "[name = \"" + lstCyberware.SelectedValue + "\"]"); if (!RequirementMet(objCyberwareNode, true)) return; this.DialogResult = DialogResult.OK; }
private void AddCyberwareSuite(Improvement.ImprovementSource objSource) { frmSelectCyberwareSuite frmPickCyberwareSuite = new frmSelectCyberwareSuite(objSource, _objCharacter); frmPickCyberwareSuite.ShowDialog(this); if (frmPickCyberwareSuite.DialogResult == DialogResult.Cancel) return; string strType = ""; int intParentNode = 0; if (objSource == Improvement.ImprovementSource.Cyberware) { strType = "cyberware"; intParentNode = 0; } else { strType = "bioware"; intParentNode = 1; } XmlDocument objXmlDocument = XmlManager.Instance.Load(strType + ".xml"); XmlNode objXmlSuite = objXmlDocument.SelectSingleNode("/chummer/suites/suite[name = \"" + frmPickCyberwareSuite.SelectedSuite + "\"]"); Cyberware objTemp = new Cyberware(_objCharacter); Grade objGrade = new Grade(); objGrade = objTemp.ConvertToCyberwareGrade(objXmlSuite["grade"].InnerText, objSource); // Run through each of the items in the Suite and add them to the character. foreach (XmlNode objXmlItem in objXmlSuite.SelectNodes(strType + "s/" + strType)) { XmlNode objXmlCyberware = objXmlDocument.SelectSingleNode("/chummer/" + strType + "s/" + strType + "[name = \"" + objXmlItem["name"].InnerText + "\"]"); TreeNode objNode = new TreeNode(); int intRating = 0; if (objXmlItem["rating"] != null) intRating = Convert.ToInt32(objXmlItem["rating"].InnerText); objNode = CreateSuiteCyberware(objXmlItem, objXmlCyberware, objGrade, intRating, true, objSource, strType, null); objNode.Expand(); treCyberware.Nodes[intParentNode].Nodes.Add(objNode); treCyberware.Nodes[intParentNode].Expand(); } _blnIsDirty = true; UpdateWindowTitle(); UpdateCharacterInfo(); }
private void AddCyberwareSuite(Improvement.ImprovementSource objSource) { frmSelectCyberwareSuite frmPickCyberwareSuite = new frmSelectCyberwareSuite(objSource, _objCharacter); frmPickCyberwareSuite.ShowDialog(this); if (frmPickCyberwareSuite.DialogResult == DialogResult.Cancel) return; int intCost = frmPickCyberwareSuite.TotalCost; 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(); objExpense.Create(intCost * -1, LanguageManager.Instance.GetString("String_ExpensePurchaseCyberwareSuite") + " " + frmPickCyberwareSuite.SelectedSuite, ExpenseType.Nuyen, DateTime.Now); _objCharacter.ExpenseEntries.Add(objExpense); _objCharacter.Nuyen -= intCost; } string strType = ""; int intParentNode = 0; if (objSource == Improvement.ImprovementSource.Cyberware) { strType = "cyberware"; intParentNode = 0; } else { strType = "bioware"; intParentNode = 1; } XmlDocument objXmlDocument = XmlManager.Instance.Load(strType + ".xml"); XmlNode objXmlSuite = objXmlDocument.SelectSingleNode("/chummer/suites/suite[name = \"" + frmPickCyberwareSuite.SelectedSuite + "\"]"); Cyberware objTemp = new Cyberware(_objCharacter); Grade objGrade = new Grade(); objGrade = objTemp.ConvertToCyberwareGrade(objXmlSuite["grade"].InnerText, objSource); // Run through each of the items in the Suite and add them to the character. foreach (XmlNode objXmlItem in objXmlSuite.SelectNodes(strType + "s/" + strType)) { XmlNode objXmlCyberware = objXmlDocument.SelectSingleNode("/chummer/" + strType + "s/" + strType + "[name = \"" + objXmlItem["name"].InnerText + "\"]"); TreeNode objNode = new TreeNode(); int intRating = 0; if (objXmlItem["rating"] != null) intRating = Convert.ToInt32(objXmlItem["rating"].InnerText); objNode = CreateSuiteCyberware(objXmlItem, objXmlCyberware, objGrade, intRating, true, objSource, strType, null); objNode.Expand(); treCyberware.Nodes[intParentNode].Nodes.Add(objNode); treCyberware.Nodes[intParentNode].Expand(); } _blnIsDirty = true; UpdateWindowTitle(); UpdateCharacterInfo(); }
/// <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> /// 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); } }