コード例 #1
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);
            }
        }
コード例 #2
0
 /// Create an Initiation Grade from an XmlNode.
 /// <param name="intGrade">Grade number.</param>
 /// <param name="blnTechnomancer">Whether or not the character is a Technomancer.</param>
 /// <param name="blnGroup">Whether or not a Group was used.</param>
 /// <param name="blnOrdeal">Whether or not an Ordeal was used.</param>
 /// <param name="blnSchooling">Whether or not Schooling was used.</param>
 public void Create(int intGrade, bool blnTechnomancer, bool blnGroup, bool blnOrdeal, bool blnSchooling)
 {
     _intGrade        = intGrade;
     _blnTechnomancer = blnTechnomancer;
     _blnGroup        = blnGroup;
     _blnOrdeal       = blnOrdeal;
     _blnSchooling    = blnSchooling;
     //TODO: I'm not happy with this.
     //KC 90: a Cyberadept who has Submerged may restore Resonance that has been lost to cyberware (and only cyberware) by an amount equal to half their Submersion Grade(rounded up).
     //To handle this, we ceiling the CyberwareEssence value up, as a non-zero loss of Essence removes a point of Resonance, and cut the submersion grade in half.
     //Whichever value is lower becomes the value of the improvement.
     if (intGrade > 0 && blnTechnomancer && _objCharacter.RESEnabled && !_objCharacter.Settings.SpecialKarmaCostBasedOnShownValue &&
         ImprovementManager.GetCachedImprovementListForValueOf(_objCharacter, Improvement.ImprovementType.CyberadeptDaemon).Count > 0)
     {
         decimal decNonCyberwareEssence = _objCharacter.BiowareEssence + _objCharacter.EssenceHole;
         int     intResonanceRecovered  = Math.Min(intGrade.DivAwayFromZero(2), (int)(
                                                       Math.Ceiling(decNonCyberwareEssence) == Math.Floor(decNonCyberwareEssence)
                 ? Math.Ceiling(_objCharacter.CyberwareEssence)
                 : Math.Floor(_objCharacter.CyberwareEssence)));
         // Cannot increase RES to be more than what it would be without any Essence loss.
         intResonanceRecovered = _objCharacter.Settings.ESSLossReducesMaximumOnly
             ? Math.Min(intResonanceRecovered, _objCharacter.RES.MaximumNoEssenceLoss() - intGrade - _objCharacter.RES.TotalMaximum)
                                 // +1 compared to normal because this Grade's effect has not been processed yet.
             : Math.Min(intResonanceRecovered, _objCharacter.RES.MaximumNoEssenceLoss() - intGrade + 1 - _objCharacter.RES.Value);
         ImprovementManager.CreateImprovement(_objCharacter, "RESBase", Improvement.ImprovementSource.CyberadeptDaemon,
                                              InternalId, Improvement.ImprovementType.Attribute, string.Empty, 0, intResonanceRecovered, 0, 1, 1);
         ImprovementManager.Commit(_objCharacter);
     }
 }
コード例 #3
0
 /// Create an Initiation Grade from an XmlNode.
 /// <param name="intGrade">Grade number.</param>
 /// <param name="blnTechnomancer">Whether or not the character is a Technomancer.</param>
 /// <param name="blnGroup">Whether or not a Group was used.</param>
 /// <param name="blnOrdeal">Whether or not an Ordeal was used.</param>
 /// <param name="blnSchooling">Whether or not Schooling was used.</param>
 public void Create(int intGrade, bool blnTechnomancer, bool blnGroup, bool blnOrdeal, bool blnSchooling)
 {
     _intGrade        = intGrade;
     _blnTechnomancer = blnTechnomancer;
     _blnGroup        = blnGroup;
     _blnOrdeal       = blnOrdeal;
     _blnSchooling    = blnSchooling;
     //TODO: I'm not happy with this.
     //KC 90: a Cyberadept who has Submerged may restore Resonance that has been lost to cyberware (and only cyberware) by an amount equal to half their Submersion Grade(rounded up).
     //To handle this, we ceiling the CyberwareEssence value up, as a non-zero loss of Essence removes a point of Resonance, and cut the submersion grade in half.
     //Whichever value is lower becomes the value of the improvement.
     if (intGrade > 0 && blnTechnomancer && _objCharacter.TechnomancerEnabled && !_objCharacter.Options.SpecialKarmaCostBasedOnShownValue &&
         _objCharacter.Improvements.Any(x => x.ImproveType == Improvement.ImprovementType.CyberadeptDaemon && x.Enabled))
     {
         decimal decNonCyberwareEssence = _objCharacter.BiowareEssence + _objCharacter.EssenceHole;
         int     intResonanceRecovered  = (int)Math.Min(Math.Ceiling(0.5m * intGrade),
                                                        Math.Ceiling(decNonCyberwareEssence) == Math.Floor(decNonCyberwareEssence)
                 ? Math.Ceiling(_objCharacter.CyberwareEssence)
                 : Math.Floor(_objCharacter.CyberwareEssence));
         // Cannot increase RES to be more than what it would be without any Essence loss.
         intResonanceRecovered = _objCharacter.Options.ESSLossReducesMaximumOnly
             ? Math.Min(intResonanceRecovered, _objCharacter.RES.MaximumNoEssenceLoss() - _objCharacter.RES.TotalMaximum)
                                 // +1 compared to normal because this Grade's effect has not been processed yet.
             : Math.Min(intResonanceRecovered, _objCharacter.RES.MaximumNoEssenceLoss() + 1 - _objCharacter.RES.Value);
         ImprovementManager.CreateImprovement(_objCharacter, "RESBase", Improvement.ImprovementSource.CyberadeptDaemon,
                                              _guiID.ToString("D", GlobalOptions.InvariantCultureInfo),
                                              Improvement.ImprovementType.Attribute, string.Empty, intResonanceRecovered, 1, 0, 0, intResonanceRecovered);
     }
 }
コード例 #4
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);
        }
コード例 #5
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);
            }
        }
コード例 #6
0
        /// <summary>
        /// Create a Mentor Spirit from an XmlNode.
        /// </summary>
        /// <param name="xmlMentor">XmlNode to create the object from.</param>
        /// <param name="eMentorType">Whether this is a Mentor or a Paragon.</param>
        /// <param name="strForceValueChoice1">Name/Text for Choice 1.</param>
        /// <param name="strForceValueChoice2">Name/Text for Choice 2.</param>
        /// <param name="strForceValue">Force a value to be selected for the Mentor Spirit.</param>
        /// <param name="blnMentorMask">Whether the Mentor's Mask is enabled.</param>
        public void Create(XmlNode xmlMentor, Improvement.ImprovementType eMentorType, string strForceValue = "", string strForceValueChoice1 = "", string strForceValueChoice2 = "", bool blnMentorMask = false)
        {
            _blnMentorMask      = blnMentorMask;
            _eMentorType        = eMentorType;
            _objCachedMyXmlNode = null;
            xmlMentor.TryGetStringFieldQuickly("name", ref _strName);
            xmlMentor.TryGetStringFieldQuickly("source", ref _strSource);
            xmlMentor.TryGetStringFieldQuickly("page", ref _strPage);
            if (!xmlMentor.TryGetStringFieldQuickly("altnotes", ref _strNotes))
            {
                xmlMentor.TryGetStringFieldQuickly("notes", ref _strNotes);
            }
            if (xmlMentor.TryGetField("id", Guid.TryParse, out Guid guiTemp))
            {
                _sourceID = guiTemp;
            }

            // Build the list of advantages gained through the Mentor Spirit.
            if (!xmlMentor.TryGetStringFieldQuickly("altadvantage", ref _strAdvantage))
            {
                xmlMentor.TryGetStringFieldQuickly("advantage", ref _strAdvantage);
            }
            if (!xmlMentor.TryGetStringFieldQuickly("altdisadvantage", ref _strDisadvantage))
            {
                xmlMentor.TryGetStringFieldQuickly("disadvantage", ref _strDisadvantage);
            }

            _nodBonus = xmlMentor["bonus"];
            if (_nodBonus != null)
            {
                string strOldForce    = ImprovementManager.ForcedValue;
                string strOldSelected = ImprovementManager.SelectedValue;
                ImprovementManager.ForcedValue = strForceValue;
                if (!ImprovementManager.CreateImprovements(_objCharacter, Improvement.ImprovementSource.MentorSpirit, _guiID.ToString("D"), _nodBonus, false, 1, DisplayNameShort(GlobalOptions.Language)))
                {
                    _guiID = Guid.Empty;
                    return;
                }
                _strExtra = ImprovementManager.SelectedValue;
                ImprovementManager.ForcedValue   = strOldForce;
                ImprovementManager.SelectedValue = strOldSelected;
            }
            else if (!string.IsNullOrEmpty(strForceValue))
            {
                _strExtra = strForceValue;
            }
            _nodChoice1 = xmlMentor.SelectSingleNode("choices/choice[name = \"" + strForceValueChoice1 + "\"]/bonus");
            if (_nodChoice1 != null)
            {
                string strOldForce    = ImprovementManager.ForcedValue;
                string strOldSelected = ImprovementManager.SelectedValue;
                ImprovementManager.ForcedValue = strForceValueChoice1;
                if (!ImprovementManager.CreateImprovements(_objCharacter, Improvement.ImprovementSource.MentorSpirit, _guiID.ToString("D"), _nodChoice1, false, 1, DisplayNameShort(GlobalOptions.Language)))
                {
                    _guiID = Guid.Empty;
                    return;
                }
                if (string.IsNullOrEmpty(_strExtra))
                {
                    _strExtra = ImprovementManager.SelectedValue;
                }
                ImprovementManager.ForcedValue   = strOldForce;
                ImprovementManager.SelectedValue = strOldSelected;
            }
            else if (string.IsNullOrEmpty(_strExtra) && !string.IsNullOrEmpty(strForceValueChoice1))
            {
                _strExtra = strForceValueChoice1;
            }
            _nodChoice2 = xmlMentor.SelectSingleNode("choices/choice[name = \"" + strForceValueChoice2 + "\"]/bonus");
            if (_nodChoice2 != null)
            {
                string strOldForce    = ImprovementManager.ForcedValue;
                string strOldSelected = ImprovementManager.SelectedValue;
                ImprovementManager.ForcedValue = strForceValueChoice2;
                if (!ImprovementManager.CreateImprovements(_objCharacter, Improvement.ImprovementSource.MentorSpirit, _guiID.ToString("D"), _nodChoice2, false, 1, DisplayNameShort(GlobalOptions.Language)))
                {
                    _guiID = Guid.Empty;
                    return;
                }
                if (string.IsNullOrEmpty(_strExtra))
                {
                    _strExtra = ImprovementManager.SelectedValue;
                }
                ImprovementManager.ForcedValue   = strOldForce;
                ImprovementManager.SelectedValue = strOldSelected;
            }
            else if (string.IsNullOrEmpty(_strExtra) && !string.IsNullOrEmpty(strForceValueChoice2))
            {
                _strExtra = strForceValueChoice2;
            }
            if (_blnMentorMask)
            {
                ImprovementManager.CreateImprovement(_objCharacter, string.Empty, Improvement.ImprovementSource.MentorSpirit, _guiID.ToString("D"), Improvement.ImprovementType.AdeptPowerPoints, string.Empty, 1);
                ImprovementManager.CreateImprovement(_objCharacter, string.Empty, Improvement.ImprovementSource.MentorSpirit, _guiID.ToString("D"), Improvement.ImprovementType.DrainValue, string.Empty, -1);
                ImprovementManager.Commit(_objCharacter);
            }

            /*
             * if (string.IsNullOrEmpty(_strNotes))
             * {
             *  _strNotes = CommonFunctions.GetTextFromPDF($"{_strSource} {_strPage}", _strName);
             *  if (string.IsNullOrEmpty(_strNotes))
             *  {
             *      _strNotes = CommonFunctions.GetTextFromPDF($"{Source} {Page(GlobalOptions.Language)}", DisplayName(GlobalOptions.Language));
             *  }
             * }*/
        }
コード例 #7
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);
        }