/// Create a Armor Modification from an XmlNode. /// <param name="objXmlArmorNode">XmlNode to create the object from.</param> /// <param name="intRating">Rating of the selected ArmorMod.</param> /// <param name="lstWeapons">List of Weapons that are created by the Armor.</param> /// <param name="blnSkipCost">Whether or not creating the ArmorMod should skip the Variable price dialogue (should only be used by frmSelectArmor).</param> /// <param name="blnSkipSelectForms">Whether or not to skip selection forms (related to improvements) when creating this ArmorMod.</param> public void Create(XmlNode objXmlArmorNode, int intRating, List <Weapon> lstWeapons, bool blnSkipCost = false, bool blnSkipSelectForms = false) { if (objXmlArmorNode.TryGetStringFieldQuickly("name", ref _strName)) { _objCachedMyXmlNode = null; } objXmlArmorNode.TryGetStringFieldQuickly("category", ref _strCategory); objXmlArmorNode.TryGetStringFieldQuickly("armorcapacity", ref _strArmorCapacity); objXmlArmorNode.TryGetStringFieldQuickly("gearcapacity", ref _strGearCapacity); _intRating = intRating; objXmlArmorNode.TryGetInt32FieldQuickly("armor", ref _intArmorValue); objXmlArmorNode.TryGetInt32FieldQuickly("maxrating", ref _intMaxRating); objXmlArmorNode.TryGetStringFieldQuickly("avail", ref _strAvail); objXmlArmorNode.TryGetStringFieldQuickly("source", ref _strSource); objXmlArmorNode.TryGetStringFieldQuickly("page", ref _strPage); if (!objXmlArmorNode.TryGetStringFieldQuickly("altnotes", ref _strNotes)) { objXmlArmorNode.TryGetStringFieldQuickly("notes", ref _strNotes); } _nodBonus = objXmlArmorNode["bonus"]; _nodWirelessBonus = objXmlArmorNode["wirelessbonus"]; _blnWirelessOn = _nodWirelessBonus != null; objXmlArmorNode.TryGetStringFieldQuickly("cost", ref _strCost); // Check for a Variable Cost. if (!blnSkipCost && _strCost.StartsWith("Variable(")) { string strFirstHalf = _strCost.TrimStartOnce("Variable(", true).TrimEndOnce(')'); string strSecondHalf = string.Empty; int intHyphenIndex = strFirstHalf.IndexOf('-'); if (intHyphenIndex != -1) { if (intHyphenIndex + 1 < strFirstHalf.Length) { strSecondHalf = strFirstHalf.Substring(intHyphenIndex + 1); } strFirstHalf = strFirstHalf.Substring(0, intHyphenIndex); } if (!blnSkipSelectForms) { decimal decMin; decimal decMax = decimal.MaxValue; if (intHyphenIndex != -1) { decMin = Convert.ToDecimal(strFirstHalf, GlobalOptions.InvariantCultureInfo); decMax = Convert.ToDecimal(strSecondHalf, GlobalOptions.InvariantCultureInfo); } else { decMin = Convert.ToDecimal(strFirstHalf.FastEscape('+'), GlobalOptions.InvariantCultureInfo); } if (decMin != decimal.MinValue || decMax != decimal.MaxValue) { frmSelectNumber frmPickNumber = new frmSelectNumber(_objCharacter.Options.NuyenDecimals); if (decMax > 1000000) { decMax = 1000000; } frmPickNumber.Minimum = decMin; frmPickNumber.Maximum = decMax; frmPickNumber.Description = LanguageManager.GetString("String_SelectVariableCost", GlobalOptions.Language).Replace("{0}", DisplayNameShort(GlobalOptions.Language)); frmPickNumber.AllowCancel = false; frmPickNumber.ShowDialog(); _strCost = frmPickNumber.SelectedValue.ToString(GlobalOptions.InvariantCultureInfo); } else { _strCost = strFirstHalf; } } else { _strCost = strFirstHalf; } } if (objXmlArmorNode["bonus"] != null && !blnSkipSelectForms) { if (!ImprovementManager.CreateImprovements(_objCharacter, Improvement.ImprovementSource.ArmorMod, _guiID.ToString("D"), objXmlArmorNode["bonus"], false, intRating, DisplayNameShort(GlobalOptions.Language))) { _guiID = Guid.Empty; return; } if (!string.IsNullOrEmpty(ImprovementManager.SelectedValue)) { _strExtra = ImprovementManager.SelectedValue; } } // Add any Gear that comes with the Armor. XmlNode xmlChildrenNode = objXmlArmorNode["gears"]; if (xmlChildrenNode != null) { XmlDocument objXmlGearDocument = XmlManager.Load("gear.xml"); using (XmlNodeList xmlUseGearList = xmlChildrenNode.SelectNodes("usegear")) if (xmlUseGearList != null) { foreach (XmlNode objXmlArmorGear in xmlUseGearList) { intRating = 0; string strForceValue = string.Empty; objXmlArmorGear.TryGetInt32FieldQuickly("rating", ref intRating); objXmlArmorGear.TryGetStringFieldQuickly("select", ref strForceValue); XmlNode objXmlGear = objXmlGearDocument.SelectSingleNode("/chummer/gears/gear[name = " + objXmlArmorGear.InnerText.CleanXPath() + "]"); Gear objGear = new Gear(_objCharacter); objGear.Create(objXmlGear, intRating, lstWeapons, strForceValue, !blnSkipSelectForms); objGear.Capacity = "[0]"; objGear.ArmorCapacity = "[0]"; objGear.Cost = "0"; objGear.ParentID = InternalId; _lstGear.Add(objGear); } } } // Add Weapons if applicable. if (objXmlArmorNode.InnerXml.Contains("<addweapon>")) { XmlDocument objXmlWeaponDocument = XmlManager.Load("weapons.xml"); // More than one Weapon can be added, so loop through all occurrences. using (XmlNodeList xmlAddWeaponList = objXmlArmorNode.SelectNodes("addweapon")) if (xmlAddWeaponList != null) { foreach (XmlNode objXmlAddWeapon in xmlAddWeaponList) { string strLoopID = objXmlAddWeapon.InnerText; XmlNode objXmlWeapon = strLoopID.IsGuid() ? objXmlWeaponDocument.SelectSingleNode("/chummer/weapons/weapon[id = \"" + strLoopID + "\"]") : objXmlWeaponDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + strLoopID + "\"]"); Weapon objGearWeapon = new Weapon(_objCharacter); objGearWeapon.Create(objXmlWeapon, lstWeapons, true, !blnSkipSelectForms, blnSkipCost); objGearWeapon.ParentID = InternalId; objGearWeapon.Cost = "0"; lstWeapons.Add(objGearWeapon); Guid.TryParse(objGearWeapon.InternalId, out _guiWeaponID); } } } SourceDetail = new SourceString(_strSource, _strPage); }
/// <summary> /// Parse the <see cref="DotNetAsm.SourceLine"/>'s SourceString property /// into its component line, instruction and operand. /// </summary> /// <param name="isInstruction">A callback to determine which part of the source /// is the instruction.</param> public void Parse(Func <string, bool> isInstruction) { var tokenBuilder = new StringBuilder(); var trimmedSource = SourceString.TrimStart(); var len = trimmedSource.Length; Label = Instruction = Operand = string.Empty; for (var i = 0; i < len; i++) { var c = trimmedSource[i]; if (char.IsWhiteSpace(c) || c == ';' || i == len - 1) { // stop at a white space or the last character in the string if (!char.IsWhiteSpace(c) && c != ';') { tokenBuilder.Append(c); } var token = tokenBuilder.ToString(); if (string.IsNullOrEmpty(Instruction)) { if (string.IsNullOrEmpty(Label)) { if (isInstruction(token)) { Instruction = token; } else { Label = token; } } else { Instruction = token; } tokenBuilder.Clear(); } else if (char.IsWhiteSpace(c) && tokenBuilder.Length > 0) { // operand can include white spaces, so capture... tokenBuilder.Append(c); } if (c == ';') // semicolon means hard break! { break; } } else if (c == '"' || c == '\'') { // process quotes separately var quoted = trimmedSource.GetNextQuotedString(atIndex: i); tokenBuilder.Append(quoted); i += quoted.Length - 1; } else if (c == '=' && string.IsNullOrEmpty(Instruction)) { // constructions such as label=value must be picked up // so the instruction is the assignment operator if (string.IsNullOrEmpty(Label)) { Label = tokenBuilder.ToString(); } Instruction = "="; tokenBuilder.Clear(); } else { tokenBuilder.Append(c); } } Operand = tokenBuilder.ToString().TrimEnd(); }
/// <summary> /// Load the CharacterAttribute from the XmlNode. /// </summary> /// <param name="objNode">XmlNode to load.</param> /// <param name="blnCopy">Whether or not we are copying an existing node.</param> public void Load(XmlNode objNode, bool blnCopy = false) { if (blnCopy || !objNode.TryGetField("guid", Guid.TryParse, out _guiID)) { _guiID = Guid.NewGuid(); } if (objNode.TryGetStringFieldQuickly("name", ref _strName)) { _objCachedMyXmlNode = null; } objNode.TryGetStringFieldQuickly("category", ref _strCategory); objNode.TryGetInt32FieldQuickly("armor", ref _intArmorValue); objNode.TryGetStringFieldQuickly("armorcapacity", ref _strArmorCapacity); objNode.TryGetStringFieldQuickly("gearcapacity", ref _strGearCapacity); objNode.TryGetInt32FieldQuickly("maxrating", ref _intMaxRating); objNode.TryGetInt32FieldQuickly("rating", ref _intRating); objNode.TryGetStringFieldQuickly("avail", ref _strAvail); objNode.TryGetStringFieldQuickly("cost", ref _strCost); _nodBonus = objNode["bonus"]; _nodWirelessBonus = objNode["wirelessbonus"]; objNode.TryGetStringFieldQuickly("source", ref _strSource); objNode.TryGetStringFieldQuickly("page", ref _strPage); objNode.TryGetBoolFieldQuickly("included", ref _blnIncludedInArmor); objNode.TryGetBoolFieldQuickly("equipped", ref _blnEquipped); if (!objNode.TryGetBoolFieldQuickly("wirelesson", ref _blnWirelessOn)) { _blnWirelessOn = _nodWirelessBonus != null; } objNode.TryGetStringFieldQuickly("extra", ref _strExtra); objNode.TryGetField("weaponguid", Guid.TryParse, out _guiWeaponID); objNode.TryGetStringFieldQuickly("notes", ref _strNotes); objNode.TryGetBoolFieldQuickly("discountedcost", ref _blnDiscountCost); XmlNode xmlChildrenNode = objNode["gears"]; if (xmlChildrenNode != null) { using (XmlNodeList nodGears = xmlChildrenNode.SelectNodes("gear")) if (nodGears != null) { foreach (XmlNode nodGear in nodGears) { Gear objGear = new Gear(_objCharacter); objGear.Load(nodGear, blnCopy); _lstGear.Add(objGear); } } } SourceDetail = new SourceString(_strSource, _strPage); if (!blnCopy) { return; } if (!string.IsNullOrEmpty(Extra)) { ImprovementManager.ForcedValue = Extra; } ImprovementManager.CreateImprovements(_objCharacter, Improvement.ImprovementSource.ArmorMod, _guiID.ToString("D"), Bonus, false, 1, DisplayNameShort(GlobalOptions.Language)); if (!string.IsNullOrEmpty(ImprovementManager.SelectedValue)) { Extra = ImprovementManager.SelectedValue; } if (_blnEquipped) { return; } _blnEquipped = true; Equipped = false; }
protected override ImmutableList <string> Tokenize() { return(SourceString.SplitRespectingEscapes(Delimiter, Escape)); }
public override int GetHashCode() => LineNumber.GetHashCode() + Filename.GetHashCode() + SourceString.GetHashCode();
public bool Equals(DestinyCollectibleDefinition input) { if (input == null) { return(false); } return (( DisplayProperties == input.DisplayProperties || (DisplayProperties != null && DisplayProperties.Equals(input.DisplayProperties)) ) && ( Scope == input.Scope || (Scope != null && Scope.Equals(input.Scope)) ) && ( SourceString == input.SourceString || (SourceString != null && SourceString.Equals(input.SourceString)) ) && ( SourceHash == input.SourceHash || (SourceHash.Equals(input.SourceHash)) ) && ( ItemHash == input.ItemHash || (ItemHash.Equals(input.ItemHash)) ) && ( AcquisitionInfo == input.AcquisitionInfo || (AcquisitionInfo != null && AcquisitionInfo.Equals(input.AcquisitionInfo)) ) && ( StateInfo == input.StateInfo || (StateInfo != null && StateInfo.Equals(input.StateInfo)) ) && ( PresentationInfo == input.PresentationInfo || (PresentationInfo != null && PresentationInfo.Equals(input.PresentationInfo)) ) && ( PresentationNodeType == input.PresentationNodeType || (PresentationNodeType != null && PresentationNodeType.Equals(input.PresentationNodeType)) ) && ( TraitIds == input.TraitIds || (TraitIds != null && TraitIds.SequenceEqual(input.TraitIds)) ) && ( TraitHashes == input.TraitHashes || (TraitHashes != null && TraitHashes.SequenceEqual(input.TraitHashes)) ) && ( ParentNodeHashes == input.ParentNodeHashes || (ParentNodeHashes != null && ParentNodeHashes.SequenceEqual(input.ParentNodeHashes)) ) && ( Hash == input.Hash || (Hash.Equals(input.Hash)) ) && ( Index == input.Index || (Index.Equals(input.Index)) ) && ( Redacted == input.Redacted || (Redacted != null && Redacted.Equals(input.Redacted)) )); }
/// <summary> /// Load the VehicleMod from the XmlNode. /// </summary> /// <param name="objNode">XmlNode to load.</param> /// <param name="objVehicle">Vehicle that the mod is attached to.</param> /// <param name="blnCopy">Indicates whether a new item will be created as a copy of this one.</param> public void Load(XmlNode objNode, Vehicle objVehicle, bool blnCopy = false) { if (blnCopy) { _guiID = Guid.NewGuid(); } else { objNode.TryGetField("guid", Guid.TryParse, out _guiID); } objNode.TryGetStringFieldQuickly("name", ref _strName); if (!objNode.TryGetStringFieldQuickly("sourceid", ref _strSourceId)) { _strSourceId = XmlManager.Load("vehicles.xml").SelectSingleNode("/chummer/weaponmounts/weaponmount[name = \"" + _strName + "\"]/id")?.InnerText ?? Guid.NewGuid().ToString("D"); } objNode.TryGetStringFieldQuickly("category", ref _strCategory); objNode.TryGetStringFieldQuickly("limit", ref _strLimit); objNode.TryGetInt32FieldQuickly("slots", ref _intSlots); objNode.TryGetStringFieldQuickly("weaponmountcategories", ref _strAllowedWeaponCategories); objNode.TryGetStringFieldQuickly("allowedweapons", ref _strAllowedWeapons); objNode.TryGetStringFieldQuickly("page", ref _strPage); objNode.TryGetStringFieldQuickly("avail", ref _strAvail); objNode.TryGetStringFieldQuickly("cost", ref _strCost); objNode.TryGetDecFieldQuickly("markup", ref _decMarkup); objNode.TryGetStringFieldQuickly("source", ref _strSource); objNode.TryGetStringFieldQuickly("location", ref _strLocation); objNode.TryGetBoolFieldQuickly("included", ref _blnIncludeInVehicle); objNode.TryGetBoolFieldQuickly("equipped", ref _blnEquipped); if (!_blnEquipped) { objNode.TryGetBoolFieldQuickly("installed", ref _blnEquipped); } XmlNode xmlChildrenNode = objNode["weapons"]; if (xmlChildrenNode != null) { using (XmlNodeList xmlWeaponList = xmlChildrenNode.SelectNodes("weapon")) if (xmlWeaponList != null) { foreach (XmlNode xmlWeaponNode in xmlWeaponList) { Weapon objWeapon = new Weapon(_objCharacter) { ParentVehicle = Parent, ParentMount = this }; objWeapon.Load(xmlWeaponNode, blnCopy); _lstWeapons.Add(objWeapon); } } } xmlChildrenNode = objNode["weaponmountoptions"]; if (xmlChildrenNode != null) { using (XmlNodeList xmlWeaponMountOptionList = xmlChildrenNode.SelectNodes("weaponmountoption")) if (xmlWeaponMountOptionList != null) { foreach (XmlNode xmlWeaponMountOptionNode in xmlWeaponMountOptionList) { WeaponMountOption objWeaponMountOption = new WeaponMountOption(_objCharacter); objWeaponMountOption.Load(xmlWeaponMountOptionNode); WeaponMountOptions.Add(objWeaponMountOption); } } } xmlChildrenNode = objNode["mods"]; if (xmlChildrenNode != null) { using (XmlNodeList xmlModList = xmlChildrenNode.SelectNodes("mod")) if (xmlModList != null) { foreach (XmlNode xmlModNode in xmlModList) { VehicleMod objMod = new VehicleMod(_objCharacter) { Parent = Parent, WeaponMountParent = this }; objMod.Load(xmlModNode); _lstMods.Add(objMod); } } } objNode.TryGetStringFieldQuickly("notes", ref _strNotes); objNode.TryGetBoolFieldQuickly("discountedcost", ref _blnDiscountCost); objNode.TryGetStringFieldQuickly("extra", ref _strExtra); SourceDetail = new SourceString(_strSource, _strPage); }
protected override ImmutableList <string> Tokenize() { return(SourceString.SplitPlain(Delimiter)); }
/// <summary> /// Create a LifestyleQuality from an XmlNode. /// </summary> /// <param name="objXmlLifestyleQuality">XmlNode to create the object from.</param> /// <param name="objCharacter">Character object the LifestyleQuality will be added to.</param> /// <param name="objParentLifestyle">Lifestyle object to which the LifestyleQuality will be added.</param> /// <param name="objLifestyleQualitySource">Source of the LifestyleQuality.</param> /// <param name="strExtra">Forced value for the LifestyleQuality's Extra string (also used by its bonus node).</param> public void Create(XmlNode objXmlLifestyleQuality, Lifestyle objParentLifestyle, Character objCharacter, QualitySource objLifestyleQualitySource, string strExtra = "") { _objParentLifestyle = objParentLifestyle; objXmlLifestyleQuality.TryGetField("id", Guid.TryParse, out _SourceGuid); if (objXmlLifestyleQuality.TryGetStringFieldQuickly("name", ref _strName)) { _objCachedMyXmlNode = null; } objXmlLifestyleQuality.TryGetInt32FieldQuickly("lp", ref _intLP); objXmlLifestyleQuality.TryGetStringFieldQuickly("cost", ref _strCost); objXmlLifestyleQuality.TryGetInt32FieldQuickly("multiplier", ref _intMultiplier); objXmlLifestyleQuality.TryGetInt32FieldQuickly("multiplierbaseonly", ref _intBaseMultiplier); if (objXmlLifestyleQuality.TryGetStringFieldQuickly("category", ref _strCategory)) { _objLifestyleQualityType = ConvertToLifestyleQualityType(_strCategory); } _objLifestyleQualitySource = objLifestyleQualitySource; objXmlLifestyleQuality.TryGetBoolFieldQuickly("print", ref _blnPrint); objXmlLifestyleQuality.TryGetBoolFieldQuickly("contributetolimit", ref _blnContributeToLP); if (!objXmlLifestyleQuality.TryGetStringFieldQuickly("altnotes", ref _strNotes)) { objXmlLifestyleQuality.TryGetStringFieldQuickly("notes", ref _strNotes); } objXmlLifestyleQuality.TryGetStringFieldQuickly("source", ref _strSource); objXmlLifestyleQuality.TryGetStringFieldQuickly("page", ref _strPage); string strAllowedFreeLifestyles = string.Empty; if (objXmlLifestyleQuality.TryGetStringFieldQuickly("allowed", ref strAllowedFreeLifestyles)) { _lstAllowedFreeLifestyles = strAllowedFreeLifestyles.Split(',').ToList(); } _strExtra = strExtra; int intParenthesesIndex = _strExtra.IndexOf('('); if (intParenthesesIndex != -1) { _strExtra = intParenthesesIndex + 1 < strExtra.Length ? strExtra.Substring(intParenthesesIndex + 1).TrimEndOnce(')') : string.Empty; } // If the item grants a bonus, pass the information to the Improvement Manager. XmlNode xmlBonus = objXmlLifestyleQuality["bonus"]; if (xmlBonus != null) { string strOldFoced = ImprovementManager.ForcedValue; if (!string.IsNullOrEmpty(_strExtra)) { ImprovementManager.ForcedValue = _strExtra; } if (!ImprovementManager.CreateImprovements(objCharacter, Improvement.ImprovementSource.Quality, InternalId, xmlBonus, false, 1, DisplayNameShort(GlobalOptions.Language))) { _guiID = Guid.Empty; ImprovementManager.ForcedValue = strOldFoced; return; } if (!string.IsNullOrEmpty(ImprovementManager.SelectedValue)) { _strExtra = ImprovementManager.SelectedValue; } ImprovementManager.ForcedValue = strOldFoced; } // Built-In Qualities appear as grey text to show that they cannot be removed. if (objLifestyleQualitySource == QualitySource.BuiltIn) { Free = true; } SourceDetail = new SourceString(_strSource, _strPage); }
protected override ImmutableList <string> Tokenize() { return(SourceString.SplitRespectingQuotation(Delimiter, Quotes)); }
/// <summary> /// Load the CharacterAttribute from the XmlNode. /// </summary> /// <param name="objNode">XmlNode to load.</param> /// <param name="blnCopy">Whether another node is being copied.</param> public void Load(XmlNode objNode, bool blnCopy = false) { if (blnCopy || !objNode.TryGetField("guid", Guid.TryParse, out _guiID)) { _guiID = Guid.NewGuid(); } if (objNode.TryGetStringFieldQuickly("name", ref _strName)) { _objCachedMyXmlNode = null; } objNode.TryGetStringFieldQuickly("mount", ref _strMount); objNode.TryGetStringFieldQuickly("extramount", ref _strExtraMount); objNode.TryGetStringFieldQuickly("rc", ref _strRC); objNode.TryGetInt32FieldQuickly("rating", ref _intRating); objNode.TryGetInt32FieldQuickly("rcgroup", ref _intRCGroup); objNode.TryGetInt32FieldQuickly("accuracy", ref _intAccuracy); objNode.TryGetInt32FieldQuickly("rating", ref _intRating); objNode.TryGetStringFieldQuickly("conceal", ref _strConceal); objNode.TryGetBoolFieldQuickly("rcdeployable", ref _blnDeployable); objNode.TryGetStringFieldQuickly("avail", ref _strAvail); objNode.TryGetStringFieldQuickly("cost", ref _strCost); objNode.TryGetBoolFieldQuickly("included", ref _blnIncludedInWeapon); objNode.TryGetBoolFieldQuickly("equipped", ref _blnEquipped); if (!_blnEquipped) { objNode.TryGetBoolFieldQuickly("installed", ref _blnEquipped); } _nodAllowGear = objNode["allowgear"]; objNode.TryGetStringFieldQuickly("source", ref _strSource); objNode.TryGetStringFieldQuickly("page", ref _strPage); objNode.TryGetStringFieldQuickly("dicepool", ref _strDicePool); objNode.TryGetInt32FieldQuickly("ammoslots", ref _intAmmoSlots); XmlNode xmlGearsNode = objNode["gears"]; if (xmlGearsNode != null) { using (XmlNodeList nodChildren = xmlGearsNode.SelectNodes("gear")) if (nodChildren != null) { foreach (XmlNode nodChild in nodChildren) { Gear objGear = new Gear(_objCharacter); objGear.Load(nodChild, blnCopy); _lstGear.Add(objGear); } } } objNode.TryGetStringFieldQuickly("notes", ref _strNotes); objNode.TryGetBoolFieldQuickly("discountedcost", ref _blnDiscountCost); objNode.TryGetStringFieldQuickly("damage", ref _strDamage); objNode.TryGetStringFieldQuickly("damagetype", ref _strDamageType); objNode.TryGetStringFieldQuickly("damagereplace", ref _strDamageReplace); objNode.TryGetStringFieldQuickly("firemode", ref _strFireMode); objNode.TryGetStringFieldQuickly("firemodereplace", ref _strFireModeReplace); objNode.TryGetStringFieldQuickly("ap", ref _strAP); objNode.TryGetStringFieldQuickly("apreplace", ref _strAPReplace); objNode.TryGetInt32FieldQuickly("accessorycostmultiplier", ref _intAccessoryCostMultiplier); objNode.TryGetStringFieldQuickly("addmode", ref _strAddMode); objNode.TryGetInt32FieldQuickly("fullburst", ref _intFullBurst); objNode.TryGetInt32FieldQuickly("suppressive", ref _intSuppressive); objNode.TryGetInt32FieldQuickly("rangebonus", ref _intRangeBonus); objNode.TryGetStringFieldQuickly("extra", ref _strExtra); objNode.TryGetInt32FieldQuickly("ammobonus", ref _intAmmoBonus); if (blnCopy && !Equipped) { _blnEquipped = true; Equipped = false; } SourceDetail = new SourceString(_strSource, _strPage); }
/// Create a Weapon Accessory from an XmlNode and return the TreeNodes for it. /// <param name="objXmlAccessory">XmlNode to create the object from.</param> /// <param name="strMount">Mount slot that the Weapon Accessory will consume.</param> /// <param name="intRating">Rating of the Weapon Accessory.</param> /// <param name="blnCreateChildren">Whether or not child items should be created.</param> /// <param name="blnCreateImprovements">Whether or not bonuses should be created.</param> /// <param name="blnSkipCost">Whether or not forms asking to determine variable costs should be displayed.</param> public void Create(XmlNode objXmlAccessory, Tuple <string, string> strMount, int intRating, bool blnSkipCost = false, bool blnCreateChildren = true, bool blnCreateImprovements = true) { if (objXmlAccessory.TryGetStringFieldQuickly("name", ref _strName)) { _objCachedMyXmlNode = null; } _strMount = strMount.Item1; _strExtraMount = strMount.Item2; _intRating = intRating; objXmlAccessory.TryGetStringFieldQuickly("avail", ref _strAvail); // Check for a Variable Cost. if (blnSkipCost) { _strCost = "0"; } else { _strCost = objXmlAccessory["cost"]?.InnerText ?? "0"; if (_strCost.StartsWith("Variable(")) { decimal decMin; decimal decMax = decimal.MaxValue; string strCost = _strCost.TrimStartOnce("Variable(", true).TrimEndOnce(')'); if (strCost.Contains('-')) { string[] strValues = strCost.Split('-'); decMin = Convert.ToDecimal(strValues[0], GlobalOptions.InvariantCultureInfo); decMax = Convert.ToDecimal(strValues[1], GlobalOptions.InvariantCultureInfo); } else { decMin = Convert.ToDecimal(strCost.FastEscape('+'), GlobalOptions.InvariantCultureInfo); } if (decMin != 0 || decMax != decimal.MaxValue) { frmSelectNumber frmPickNumber = new frmSelectNumber(_objCharacter.Options.NuyenDecimals); if (decMax > 1000000) { decMax = 1000000; } frmPickNumber.Minimum = decMin; frmPickNumber.Maximum = decMax; frmPickNumber.Description = LanguageManager.GetString("String_SelectVariableCost", GlobalOptions.Language).Replace("{0}", DisplayNameShort(GlobalOptions.Language)); frmPickNumber.AllowCancel = false; frmPickNumber.ShowDialog(); _strCost = frmPickNumber.SelectedValue.ToString(GlobalOptions.InvariantCultureInfo); } } } objXmlAccessory.TryGetStringFieldQuickly("source", ref _strSource); objXmlAccessory.TryGetStringFieldQuickly("page", ref _strPage); _nodAllowGear = objXmlAccessory["allowgear"]; if (!objXmlAccessory.TryGetStringFieldQuickly("altnotes", ref _strNotes)) { objXmlAccessory.TryGetStringFieldQuickly("notes", ref _strNotes); } objXmlAccessory.TryGetStringFieldQuickly("rc", ref _strRC); objXmlAccessory.TryGetBoolFieldQuickly("rcdeployable", ref _blnDeployable); objXmlAccessory.TryGetInt32FieldQuickly("rcgroup", ref _intRCGroup); objXmlAccessory.TryGetStringFieldQuickly("conceal", ref _strConceal); objXmlAccessory.TryGetInt32FieldQuickly("ammoslots", ref _intAmmoSlots); objXmlAccessory.TryGetStringFieldQuickly("ammoreplace", ref _strAmmoReplace); objXmlAccessory.TryGetInt32FieldQuickly("accuracy", ref _intAccuracy); objXmlAccessory.TryGetStringFieldQuickly("dicepool", ref _strDicePool); objXmlAccessory.TryGetStringFieldQuickly("damagetype", ref _strDamageType); objXmlAccessory.TryGetStringFieldQuickly("damage", ref _strDamage); objXmlAccessory.TryGetStringFieldQuickly("damagereplace", ref _strDamageReplace); objXmlAccessory.TryGetStringFieldQuickly("firemode", ref _strFireMode); objXmlAccessory.TryGetStringFieldQuickly("firemodereplace", ref _strFireModeReplace); objXmlAccessory.TryGetStringFieldQuickly("ap", ref _strAP); objXmlAccessory.TryGetStringFieldQuickly("apreplace", ref _strAPReplace); objXmlAccessory.TryGetStringFieldQuickly("addmode", ref _strAddMode); objXmlAccessory.TryGetInt32FieldQuickly("fullburst", ref _intFullBurst); objXmlAccessory.TryGetInt32FieldQuickly("suppressive", ref _intSuppressive); objXmlAccessory.TryGetInt32FieldQuickly("rangebonus", ref _intRangeBonus); objXmlAccessory.TryGetStringFieldQuickly("extra", ref _strExtra); objXmlAccessory.TryGetInt32FieldQuickly("ammobonus", ref _intAmmoBonus); objXmlAccessory.TryGetInt32FieldQuickly("accessorycostmultiplier", ref _intAccessoryCostMultiplier); // Add any Gear that comes with the Weapon Accessory. XmlNode xmlGearsNode = objXmlAccessory["gears"]; if (xmlGearsNode != null && blnCreateChildren) { XmlDocument objXmlGearDocument = XmlManager.Load("gear.xml"); using (XmlNodeList xmlGearsList = xmlGearsNode.SelectNodes("usegear")) if (xmlGearsList != null) { foreach (XmlNode objXmlAccessoryGear in xmlGearsList) { XmlNode objXmlAccessoryGearName = objXmlAccessoryGear["name"]; XmlAttributeCollection objXmlAccessoryGearNameAttributes = objXmlAccessoryGearName?.Attributes; int intGearRating = 0; decimal decGearQty = 1; string strChildForceSource = objXmlAccessoryGear["source"]?.InnerText ?? string.Empty; string strChildForcePage = objXmlAccessoryGear["page"]?.InnerText ?? string.Empty; string strChildForceValue = objXmlAccessoryGearNameAttributes?["select"]?.InnerText ?? string.Empty; bool blnChildCreateChildren = objXmlAccessoryGearNameAttributes?["createchildren"]?.InnerText != bool.FalseString; bool blnAddChildImprovements = objXmlAccessoryGearNameAttributes?["addimprovements"]?.InnerText != bool.FalseString && blnCreateImprovements; if (objXmlAccessoryGear["rating"] != null) { intGearRating = Convert.ToInt32(objXmlAccessoryGear["rating"].InnerText); } if (objXmlAccessoryGearNameAttributes?["qty"] != null) { decGearQty = Convert.ToDecimal(objXmlAccessoryGearNameAttributes["qty"].InnerText, GlobalOptions.InvariantCultureInfo); } XmlNode objXmlGear = objXmlGearDocument.SelectSingleNode("/chummer/gears/gear[name = \"" + objXmlAccessoryGearName?.InnerText + "\" and category = \"" + objXmlAccessoryGear["category"].InnerText + "\"]"); Gear objGear = new Gear(_objCharacter); List <Weapon> lstWeapons = new List <Weapon>(); objGear.Create(objXmlGear, intGearRating, lstWeapons, strChildForceValue, blnAddChildImprovements, blnChildCreateChildren); objGear.Quantity = decGearQty; objGear.Cost = "0"; objGear.ParentID = InternalId; if (!string.IsNullOrEmpty(strChildForceSource)) { objGear.Source = strChildForceSource; } if (!string.IsNullOrEmpty(strChildForcePage)) { objGear.Page = strChildForcePage; } _lstGear.Add(objGear); // Change the Capacity of the child if necessary. if (objXmlAccessoryGear["capacity"] != null) { objGear.Capacity = '[' + objXmlAccessoryGear["capacity"].InnerText + ']'; } } } } SourceDetail = new SourceString(_strSource, _strPage); }