/// <summary> /// Accept the values on the Form and create the required XML data. /// </summary> private void AcceptForm() { // Make sure a value has been selected if necessary. if (txtSelect.Visible && txtSelect.Text == string.Empty) { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectItem"), LanguageManager.Instance.GetString("MessageTitle_SelectItem"), MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // Make sure a value has been provided for the name. if (txtName.Text == string.Empty) { MessageBox.Show(LanguageManager.Instance.GetString("Message_ImprovementName"), LanguageManager.Instance.GetString("MessageTitle_ImprovementName"), MessageBoxButtons.OK, MessageBoxIcon.Error); txtName.Focus(); return; } MemoryStream objStream = new MemoryStream(); XmlWriter objWriter = XmlWriter.Create(objStream); // Build the XML for the Improvement. XmlNode objFetchNode = _objDocument.SelectSingleNode("/chummer/improvements/improvement[id = \"" + cboImprovemetType.SelectedValue + "\"]"); objWriter.WriteStartDocument(); // <bonus> objWriter.WriteStartElement("bonus"); // <whatever element> objWriter.WriteStartElement(objFetchNode["internal"].InnerText); string strRating = ""; if (chkApplyToRating.Checked) strRating = "<applytorating>yes</applytorating>"; // Retrieve the XML data from the document and replace the values as necessary. string strXml = objFetchNode["xml"].InnerText; strXml = strXml.Replace("{val}", nudVal.Value.ToString()); strXml = strXml.Replace("{min}", nudMin.Value.ToString()); strXml = strXml.Replace("{max}", nudMax.Value.ToString()); strXml = strXml.Replace("{aug}", nudAug.Value.ToString()); strXml = strXml.Replace("{select}", txtSelect.Text); strXml = strXml.Replace("{applytorating}", strRating); objWriter.WriteRaw(strXml); // Write the rest of the document. // </whatever element> objWriter.WriteEndElement(); // </bonus> objWriter.WriteEndElement(); objWriter.WriteEndDocument(); objWriter.Flush(); objStream.Flush(); objStream.Position = 0; // Read it back in as an XmlDocument. StreamReader objReader = new StreamReader(objStream); XmlDocument objBonusXML = new XmlDocument(); string strXML = objReader.ReadToEnd(); objBonusXML.LoadXml(strXML); objWriter.Close(); objStream.Close(); // Pluck out the bonus information. XmlNode objNode = objBonusXML.SelectSingleNode("/bonus"); // Pass it to the Improvement Manager so that it can be added to the character. ImprovementManager objImprovementManager = new ImprovementManager(_objCharacter); string strGuid = Guid.NewGuid().ToString(); objImprovementManager.CreateImprovements(Improvement.ImprovementSource.Custom, strGuid, objNode, false, 1, txtName.Text); // If an Improvement was passed in, remove it from the character. string strNotes = ""; int intOrder = 0; if (_objEditImprovement != null) { // Copy the notes over to the new item. strNotes = _objEditImprovement.Notes; intOrder = _objEditImprovement.SortOrder; objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Custom, _objEditImprovement.SourceName); } // Find the newly-created Improvement and attach its custom name. foreach (Improvement objImprovement in _objCharacter.Improvements) { if (objImprovement.SourceName == strGuid) { objImprovement.CustomName = txtName.Text; objImprovement.CustomId = cboImprovemetType.SelectedValue.ToString(); objImprovement.Custom = true; objImprovement.Notes = strNotes; objImprovement.SortOrder = intOrder; } } this.DialogResult = DialogResult.OK; }
/// <summary> /// Recursive method to delete a piece of Gear and its Improvements from the character. /// </summary> /// <param name="objGear">Gear to delete.</param> /// <param name="treWeapons">TreeView that holds the list of Weapons.</param> /// <param name="objImprovementManager">Improvement Manager the character is using.</param> public void DeleteGear(Gear objGear, TreeView treWeapons, ImprovementManager objImprovementManager) { // Remove any children the Gear may have. foreach (Gear objChild in objGear.Children) DeleteGear(objChild, treWeapons, objImprovementManager); // Remove the Gear Weapon created by the Gear if applicable. if (objGear.WeaponID != Guid.Empty.ToString()) { // Remove the Weapon from the TreeView. TreeNode objRemoveNode = new TreeNode(); foreach (TreeNode objWeaponNode in treWeapons.Nodes[0].Nodes) { if (objWeaponNode.Tag.ToString() == objGear.WeaponID) objRemoveNode = objWeaponNode; } treWeapons.Nodes.Remove(objRemoveNode); // Remove the Weapon from the Character. Weapon objRemoveWeapon = new Weapon(_objCharacter); foreach (Weapon objWeapon in _objCharacter.Weapons) { if (objWeapon.InternalId == objGear.WeaponID) objRemoveWeapon = objWeapon; } _objCharacter.Weapons.Remove(objRemoveWeapon); } objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Gear, objGear.InternalId); // If a Focus is being removed, make sure the actual Focus is being removed from the character as well. if (objGear.Category == "Foci" || objGear.Category == "Metamagic Foci") { List<Focus> lstRemoveFoci = new List<Focus>(); foreach (Focus objFocus in _objCharacter.Foci) { if (objFocus.GearId == objGear.InternalId) lstRemoveFoci.Add(objFocus); } foreach (Focus objFocus in lstRemoveFoci) _objCharacter.Foci.Remove(objFocus); } // If a Stacked Focus is being removed, make sure the Stacked Foci and its bonuses are being removed. if (objGear.Category == "Stacked Focus") { foreach (StackedFocus objStack in _objCharacter.StackedFoci) { if (objStack.GearId == objGear.InternalId) { objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.StackedFocus, objStack.InternalId); _objCharacter.StackedFoci.Remove(objStack); break; } } } }
/// <summary> /// Update the label and tooltip for the character's Armor Rating. /// </summary> /// <param name="lblArmor"></param> /// <param name="tipTooltip"></param> protected void UpdateArmorRating(Label lblArmor, ToolTip tipTooltip, ImprovementManager _objImprovementManager) { // Armor Ratings. lblArmor.Text = _objCharacter.TotalArmorRating.ToString(); string strArmorToolTip = ""; strArmorToolTip = LanguageManager.Instance.GetString("Tip_Armor") + " (" + _objCharacter.ArmorRating.ToString() + ")"; if (_objCharacter.ArmorRating != _objCharacter.TotalArmorRating) strArmorToolTip += " + " + LanguageManager.Instance.GetString("Tip_Modifiers") + " (" + (_objCharacter.TotalArmorRating - _objCharacter.ArmorRating).ToString() + ")"; tipTooltip.SetToolTip(lblArmor, strArmorToolTip); // Remove any Improvements from Armor Encumbrance. _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.ArmorEncumbrance, "Armor Encumbrance"); // Create the Armor Encumbrance Improvements. if (_objCharacter.ArmorEncumbrance < 0) { _objImprovementManager.CreateImprovement("AGI", Improvement.ImprovementSource.ArmorEncumbrance, "Armor Encumbrance", Improvement.ImprovementType.Attribute, "", 0, 1, 0, 0, _objCharacter.ArmorEncumbrance); _objImprovementManager.CreateImprovement("REA", Improvement.ImprovementSource.ArmorEncumbrance, "Armor Encumbrance", Improvement.ImprovementType.Attribute, "", 0, 1, 0, 0, _objCharacter.ArmorEncumbrance); } }