private void cmdDelete_Click(object sender, EventArgs e) { //Cache the parentform prior to deletion, otherwise the relationship is broken. Form frmParent = ParentForm; if (PowerObject.FreeLevels > 0) { string strImprovementSourceName = PowerObject.CharacterObject.Improvements.FirstOrDefault(x => x.ImproveType == Improvement.ImprovementType.AdeptPowerFreePoints && x.ImprovedName == PowerObject.Name && x.UniqueName == PowerObject.Extra)?.SourceName; Gear objGear = PowerObject.CharacterObject.Gear.FirstOrDefault(x => x.Bonded && x.InternalId == strImprovementSourceName); if (objGear != null) { objGear.Equipped = false; objGear.Extra = string.Empty; } } PowerObject.Deleting = true; ImprovementManager.RemoveImprovements(PowerObject.CharacterObject, Improvement.ImprovementSource.Power, PowerObject.InternalId); PowerObject.CharacterObject.Powers.Remove(PowerObject); if (_objPower.CharacterObject.Created) { frmCareer parent = frmParent as frmCareer; parent.ScheduleCharacterUpdate(); } else { frmCreate parent = frmParent as frmCreate; parent.ScheduleCharacterUpdate(); } }
/// <summary> /// Update the label and tooltip for the character's Armor Rating. /// </summary> /// <param name="lblArmor"></param> /// <param name="tipTooltip"></param> /// <param name="objImprovementManager"></param> /// <param name="lblCMArmor"></param> protected void UpdateArmorRating(Label lblArmor, HtmlToolTip tipTooltip, ImprovementManager objImprovementManager, Label lblCMArmor = null) { // Armor Ratings. lblArmor.Text = _objCharacter.TotalArmorRating.ToString(); string strArmorToolTip = LanguageManager.Instance.GetString("Tip_Armor") + " (" + _objCharacter.ArmorRating + ")"; if (_objCharacter.ArmorRating != _objCharacter.TotalArmorRating) { strArmorToolTip += " + " + LanguageManager.Instance.GetString("Tip_Modifiers") + " (" + (_objCharacter.TotalArmorRating - _objCharacter.ArmorRating) + ")"; } tipTooltip.SetToolTip(lblArmor, strArmorToolTip); if (lblCMArmor != null) { lblCMArmor.Text = _objCharacter.TotalArmorRating.ToString(); tipTooltip.SetToolTip(lblCMArmor, 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, "precedence-1", 0, 1, 0, 0, _objCharacter.ArmorEncumbrance); objImprovementManager.CreateImprovement("REA", Improvement.ImprovementSource.ArmorEncumbrance, "Armor Encumbrance", Improvement.ImprovementType.Attribute, "precedence-1", 0, 1, 0, 0, _objCharacter.ArmorEncumbrance); } }
/// <summary> /// Method for removing old <addqualities /> nodes from existing characters. /// </summary> /// <param name="objNodeList">XmlNode to load. Expected to be addqualities/addquality</param> /// <param name="treQualities"></param> /// <param name="_objImprovementManager"></param> protected void RemoveAddedQualities(XmlNodeList objNodeList, TreeView treQualities, ImprovementManager _objImprovementManager) { foreach (XmlNode objNode in objNodeList) { foreach (Quality objQuality in _objCharacter.Qualities.Where(objQuality => objQuality.Name == objNode.InnerText)) { switch (objQuality.Type) { case QualityType.Positive: foreach ( TreeNode nodQuality in treQualities.Nodes[0].Nodes.Cast <TreeNode>().Where(nodQuality => nodQuality.Text == objQuality.Name)) { nodQuality.Remove(); } break; case QualityType.Negative: foreach ( TreeNode nodQuality in treQualities.Nodes[1].Nodes.Cast <TreeNode>().Where(nodQuality => nodQuality.Text == objQuality.Name)) { nodQuality.Remove(); } break; } _objCharacter.Qualities.Remove(objQuality); _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.CritterPower, objQuality.InternalId); break; } } }
/// <summary> /// Clear all Spell tab elements from the character. /// </summary> /// <param name="treSpells"></param> public void ClearSpellTab(TreeView treSpells) { // Run through all of the Spells and remove their Improvements. foreach (Spell objSpell in _objCharacter.Spells) { _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Spell, objSpell.InternalId); } // Clear the list of Spells. foreach (TreeNode objNode in treSpells.Nodes) { objNode.Nodes.Clear(); } _objCharacter.Spells.Clear(); _objCharacter.Spirits.Clear(); }
public void ResetTradition() { Bonus = null; ImprovementManager.RemoveImprovements(_objCharacter, Improvement.ImprovementSource.Tradition, InternalId); Name = string.Empty; Extra = string.Empty; Source = string.Empty; _strPage = string.Empty; DrainExpression = string.Empty; SpiritForm = "Materialization"; AvailableSpirits.Clear(); Type = TraditionType.None; }
public void OnPropertyChanged([CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); // If the Bonus contains "Rating", remove the existing Improvements and create new ones. if (Bonus?.InnerXml.Contains("Rating") == true && propertyName == nameof(TotalRating)) { ImprovementManager.RemoveImprovements(CharacterObject, Improvement.ImprovementSource.Power, InternalId); if (!Deleting) { ImprovementManager.ForcedValue = Extra; ImprovementManager.CreateImprovements(CharacterObject, Improvement.ImprovementSource.Power, InternalId, Bonus, false, TotalRating, DisplayNameShort); } } }
/// <summary> /// Method for removing old <addqualities /> nodes from existing characters. /// </summary> /// <param name="objNodeList">XmlNode to load. Expected to be addqualities/addquality</param> /// <param name="treQualities"></param> /// <param name="_objImprovementManager"></param> protected void RemoveAddedQualities(XmlNodeList objNodeList, TreeView treQualities) { foreach (XmlNode objNode in objNodeList) { foreach (Quality objQuality in _objCharacter.Qualities) { if (objQuality.Name == objNode.InnerText) { _objCharacter.Qualities.Remove(objQuality); ImprovementManager.RemoveImprovements(_objCharacter, Improvement.ImprovementSource.CritterPower, objQuality.InternalId); if (!_objCharacter.Qualities.Any(objExistingQuality => objExistingQuality.Name == objQuality.Name && objExistingQuality.Extra == objQuality.Extra)) { switch (objQuality.Type) { case QualityType.Positive: foreach (TreeNode nodQuality in treQualities.Nodes[0].Nodes) { if (nodQuality.Text == objQuality.Name) { nodQuality.Remove(); } } break; case QualityType.Negative: foreach (TreeNode nodQuality in treQualities.Nodes[1].Nodes) { if (nodQuality.Text == objQuality.Name) { nodQuality.Remove(); } } break; } } else { RefreshQualityNames(treQualities); } break; } } } }
private void chkFettered_CheckedChanged(object sender, EventArgs e) { if (chkFettered.Checked) { //Only one Fettered spirit is permitted. if (_objSpirit.CharacterObject.Spirits.Any(objSpirit => objSpirit.Fettered)) { chkFettered.Checked = false; return; } ImprovementManager.CreateImprovement(_objSpirit.CharacterObject, "MAG", Improvement.ImprovementSource.SpiritFettering, "Spirit Fettering", Improvement.ImprovementType.Attribute, string.Empty, 0, 1, 0, 0, -1); } else { ImprovementManager.RemoveImprovements(_objSpirit.CharacterObject, Improvement.ImprovementSource.SpiritFettering, "Spirit Fettering"); } _objSpirit.Fettered = chkFettered.Checked; // Raise the FetteredChanged Event when the Checkbox's Checked status changes. // The entire SpiritControl is passed as an argument so the handling event can evaluate its contents. FetteredChanged(this); }
/// <summary> /// Update the label and tooltip for the character's Armor Rating. /// </summary> /// <param name="lblArmor"></param> /// <param name="tipTooltip"></param> /// <param name="objImprovementManager"></param> /// <param name="lblCMArmor"></param> protected void UpdateArmorRating(Label lblArmor, ToolTip tipTooltip, Label lblCMArmor = null) { // Armor Ratings. int intTotalArmorRating = _objCharacter.TotalArmorRating; int intArmorRating = _objCharacter.ArmorRating; lblArmor.Text = intTotalArmorRating.ToString(); if (tipTooltip != null) { string strArmorToolTip = LanguageManager.GetString("Tip_Armor") + " (" + intArmorRating.ToString() + ")"; if (intArmorRating != intTotalArmorRating) { strArmorToolTip += " + " + LanguageManager.GetString("Tip_Modifiers") + " (" + (intTotalArmorRating - intArmorRating).ToString() + ")"; } tipTooltip.SetToolTip(lblArmor, strArmorToolTip); if (lblCMArmor != null) { lblCMArmor.Text = intTotalArmorRating.ToString(); tipTooltip.SetToolTip(lblCMArmor, strArmorToolTip); } } // Remove any Improvements from Armor Encumbrance. ImprovementManager.RemoveImprovements(_objCharacter, Improvement.ImprovementSource.ArmorEncumbrance, "Armor Encumbrance"); // Create the Armor Encumbrance Improvements. int intEncumbrance = _objCharacter.ArmorEncumbrance; if (intEncumbrance < 0) { ImprovementManager.CreateImprovement(_objCharacter, "AGI", Improvement.ImprovementSource.ArmorEncumbrance, "Armor Encumbrance", Improvement.ImprovementType.Attribute, "precedence-1", 0, 1, 0, 0, intEncumbrance); ImprovementManager.CreateImprovement(_objCharacter, "REA", Improvement.ImprovementSource.ArmorEncumbrance, "Armor Encumbrance", Improvement.ImprovementType.Attribute, "precedence-1", 0, 1, 0, 0, intEncumbrance); } }
/// <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 && string.IsNullOrEmpty(txtSelect.Text)) { 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 (string.IsNullOrEmpty(txtName.Text)) { 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 + "\"]"); if (objFetchNode == null) { return; } objWriter.WriteStartDocument(); // <bonus> objWriter.WriteStartElement("bonus"); // <whatever element> objWriter.WriteStartElement(objFetchNode["internal"]?.InnerText); string strRating = string.Empty; if (chkApplyToRating.Checked) { strRating = "<applytorating>yes</applytorating>"; } // Retrieve the XML data from the document and replace the values as necessary. // ReSharper disable once PossibleNullReferenceException string strXml = objFetchNode["xml"].InnerText; strXml = strXml.Replace("{val}", nudVal.Value.ToString(GlobalOptions.InvariantCultureInfo)); strXml = strXml.Replace("{min}", nudMin.Value.ToString(GlobalOptions.InvariantCultureInfo)); strXml = strXml.Replace("{max}", nudMax.Value.ToString(GlobalOptions.InvariantCultureInfo)); strXml = strXml.Replace("{aug}", nudAug.Value.ToString(GlobalOptions.InvariantCultureInfo)); strXml = strXml.Replace("{free}", chkFree.Checked.ToString().ToLower()); 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(); 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 = string.Empty; 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; } } DialogResult = DialogResult.OK; }
/// <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 (txtTranslateSelection.Visible && string.IsNullOrEmpty(txtSelect.Text)) { Program.MainForm.ShowMessageBox(LanguageManager.GetString("Message_SelectItem"), LanguageManager.GetString("MessageTitle_SelectItem"), MessageBoxButtons.OK, MessageBoxIcon.Error); return; } // Make sure a value has been provided for the name. if (string.IsNullOrEmpty(txtName.Text)) { Program.MainForm.ShowMessageBox(LanguageManager.GetString("Message_ImprovementName"), LanguageManager.GetString("MessageTitle_ImprovementName"), MessageBoxButtons.OK, MessageBoxIcon.Error); txtName.Focus(); return; } MemoryStream objStream = new MemoryStream(); XmlDocument objBonusXml = new XmlDocument { XmlResolver = null }; using (XmlWriter objWriter = XmlWriter.Create(objStream)) { // Build the XML for the Improvement. XmlNode objFetchNode = _objDocument.SelectSingleNode("/chummer/improvements/improvement[id = \"" + cboImprovemetType.SelectedValue + "\"]"); string strInternal = objFetchNode?["internal"]?.InnerText; if (string.IsNullOrEmpty(strInternal)) { return; } objWriter.WriteStartDocument(); // <bonus> objWriter.WriteStartElement("bonus"); // <whatever element> objWriter.WriteStartElement(strInternal); string strRating = string.Empty; if (chkApplyToRating.Checked) { strRating = "<applytorating>True</applytorating>"; } // Retrieve the XML data from the document and replace the values as necessary. // ReSharper disable once PossibleNullReferenceException string strXml = objFetchNode["xml"].InnerText .Replace("{val}", nudVal.Value.ToString(GlobalOptions.InvariantCultureInfo)) .Replace("{min}", nudMin.Value.ToString(GlobalOptions.InvariantCultureInfo)) .Replace("{max}", nudMax.Value.ToString(GlobalOptions.InvariantCultureInfo)) .Replace("{aug}", nudAug.Value.ToString(GlobalOptions.InvariantCultureInfo)) .Replace("{free}", chkFree.Checked.ToString(GlobalOptions.InvariantCultureInfo).ToLowerInvariant()) .Replace("{select}", txtSelect.Text) .Replace("{applytorating}", strRating); objWriter.WriteRaw(strXml); // Write the rest of the document. // </whatever element> objWriter.WriteEndElement(); // </bonus> objWriter.WriteEndElement(); objWriter.WriteEndDocument(); objWriter.Flush(); objStream.Position = 0; // Read it back in as an XmlDocument. using (StreamReader objReader = new StreamReader(objStream, Encoding.UTF8, true)) using (XmlReader objXmlReader = XmlReader.Create(objReader, new XmlReaderSettings { XmlResolver = null })) objBonusXml.Load(objXmlReader); } // 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. string strGuid = Guid.NewGuid().ToString("D", GlobalOptions.InvariantCultureInfo); ImprovementManager.CreateImprovements(_objCharacter, Improvement.ImprovementSource.Custom, strGuid, objNode, 1, txtName.Text); // If an Improvement was passed in, remove it from the character. string strNotes = string.Empty; int intOrder = 0; if (EditImprovementObject != null) { // Copy the notes over to the new item. strNotes = EditImprovementObject.Notes; intOrder = EditImprovementObject.SortOrder; ImprovementManager.RemoveImprovements(_objCharacter, Improvement.ImprovementSource.Custom, EditImprovementObject.SourceName); } // Find the newly-created Improvement and attach its custom name. Improvement objImprovement = _objCharacter.Improvements.FirstOrDefault(imp => imp.SourceName == strGuid); if (objImprovement != null) { objImprovement.CustomName = txtName.Text; objImprovement.CustomId = cboImprovemetType.SelectedValue.ToString(); objImprovement.Custom = true; objImprovement.Notes = strNotes; objImprovement.SortOrder = intOrder; objImprovement.CustomGroup = _strCustomGroup; NewImprovement = objImprovement; } else { Utils.BreakIfDebug(); } DialogResult = DialogResult.OK; }
public void DeletePower() { ImprovementManager.RemoveImprovements(CharacterObject, Improvement.ImprovementSource.Power, InternalId); CharacterObject.Powers.Remove(this); UnbindPower(); }
protected void RedlinerCheck() { string strSeekerImprovPrefix = "SEEKER"; var lstSeekerAttributes = new List <string>(); var lstSeekerImprovements = new List <Improvement>(); //Get attributes affected by redliner/cyber singularity seeker foreach (Improvement objLoopImprovement in _objCharacter.Improvements) { if (objLoopImprovement.ImproveType == Improvement.ImprovementType.Seeker) { lstSeekerAttributes.Add(objLoopImprovement.ImprovedName); } else if ((objLoopImprovement.ImproveType == Improvement.ImprovementType.Attribute || objLoopImprovement.ImproveType == Improvement.ImprovementType.PhysicalCM) && objLoopImprovement.SourceName.Contains(strSeekerImprovPrefix)) { lstSeekerImprovements.Add(objLoopImprovement); } } //if neither contains anything, it is safe to exit if (lstSeekerImprovements.Count == 0 && lstSeekerAttributes.Count == 0) { _objCharacter.RedlinerBonus = 0; return; } //Calculate bonus from cyberlimbs int count = 0; foreach (Cyberware objCyberware in _objCharacter.Cyberware) { count += objCyberware.CyberlimbCount; } count = Math.Min(count / 2, 2); if (lstSeekerImprovements.Any(x => x.ImprovedName == "STR" || x.ImprovedName == "AGI")) { _objCharacter.RedlinerBonus = count; } else { _objCharacter.RedlinerBonus = 0; } for (int i = 0; i < lstSeekerAttributes.Count; i++) { Improvement objImprove = lstSeekerImprovements.FirstOrDefault( x => x.SourceName == strSeekerImprovPrefix + "_" + lstSeekerAttributes[i] && x.Value == (lstSeekerAttributes[i] == "BOX" ? count * -3 : count)); if (objImprove != null) { lstSeekerAttributes.RemoveAt(i); lstSeekerImprovements.Remove(objImprove); i--; } } //Improvement manager defines the functions we need to manipulate improvements //When the locals (someday) gets moved to this class, this can be removed and use //the local // Remove which qualites have been removed or which values have changed foreach (Improvement improvement in lstSeekerImprovements) { ImprovementManager.RemoveImprovements(_objCharacter, improvement.ImproveSource, improvement.SourceName); } // Add new improvements or old improvements with new values foreach (string attribute in lstSeekerAttributes) { if (attribute == "BOX") { ImprovementManager.CreateImprovement(_objCharacter, attribute, Improvement.ImprovementSource.Quality, strSeekerImprovPrefix + "_" + attribute, Improvement.ImprovementType.PhysicalCM, Guid.NewGuid().ToString(), count * -3); } else { ImprovementManager.CreateImprovement(_objCharacter, attribute, Improvement.ImprovementSource.Quality, strSeekerImprovPrefix + "_" + attribute, Improvement.ImprovementType.Attribute, Guid.NewGuid().ToString(), count, 1, 0, 0, count); } } ImprovementManager.Commit(_objCharacter); }