コード例 #1
0
        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();
            }
        }
コード例 #2
0
        /// <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);
            }
        }
コード例 #3
0
        /// <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;
                }
            }
        }
コード例 #4
0
        /// <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();
        }
コード例 #5
0
ファイル: Tradition.cs プロジェクト: maryshelley101/chummer5a
 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;
 }
コード例 #6
0
ファイル: Power.cs プロジェクト: Rempha/chummer5a
 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);
         }
     }
 }
コード例 #7
0
        /// <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;
                    }
                }
            }
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        /// <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);
            }
        }
コード例 #10
0
        /// <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;
        }
コード例 #11
0
        /// <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;
        }
コード例 #12
0
 public void DeletePower()
 {
     ImprovementManager.RemoveImprovements(CharacterObject, Improvement.ImprovementSource.Power, InternalId);
     CharacterObject.Powers.Remove(this);
     UnbindPower();
 }
コード例 #13
0
        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);
        }