/// <summary> /// Enable/Disable the Paste Menu and ToolStrip items as appropriate. /// </summary> private void RefreshPasteStatus() { bool blnPasteEnabled = false; bool blnCopyEnabled = false; if (tabCharacterTabs.SelectedTab == tabStreetGear) { // Lifestyle Tab. if (tabStreetGearTabs.SelectedTab == tabLifestyle) { if (GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Lifestyle) blnPasteEnabled = true; try { foreach (Lifestyle objLifestyle in _objCharacter.Lifestyles) { if (objLifestyle.InternalId == treLifestyles.SelectedNode.Tag.ToString()) { blnCopyEnabled = true; break; } } } catch { } } // Armor Tab. if (tabStreetGearTabs.SelectedTab == tabArmor) { if (GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Armor) blnPasteEnabled = true; if (GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Gear || GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Commlink || GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.OperatingSystem) { // Gear can only be pasted into Armor, not Armor Mods. try { foreach (Armor objArmor in _objCharacter.Armor) { if (objArmor.InternalId == treArmor.SelectedNode.Tag.ToString()) { blnPasteEnabled = true; break; } } } catch { } } try { foreach (Armor objArmor in _objCharacter.Armor) { if (objArmor.InternalId == treArmor.SelectedNode.Tag.ToString()) { blnCopyEnabled = true; break; } } } catch { } try { Armor objArmor = new Armor(_objCharacter); Gear objGear = _objFunctions.FindArmorGear(treArmor.SelectedNode.Tag.ToString(), _objCharacter.Armor, out objArmor); if (objGear != null) blnCopyEnabled = true; } catch { } } // Weapons Tab. if (tabStreetGearTabs.SelectedTab == tabWeapons) { if (GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Weapon) blnPasteEnabled = true; if (GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Gear || GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Commlink || GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.OperatingSystem) { // Check if the copied Gear can be pasted into the selected Weapon Accessory. Gear objGear = new Gear(_objCharacter); XmlNode objXmlNode = GlobalOptions.Instance.Clipboard.SelectSingleNode("/character/gear"); if (objXmlNode != null) { switch (objXmlNode["category"].InnerText) { case "Commlinks": case "Cyberdecks": case "Rigger Command Consoles": Commlink objCommlink = new Commlink(_objCharacter); objCommlink.Load(objXmlNode, true); objGear = objCommlink; break; default: Gear objNewGear = new Gear(_objCharacter); objNewGear.Load(objXmlNode, true); objGear = objNewGear; break; } objGear.Parent = null; // Make sure that a Weapon Accessory is selected and that it allows Gear of the item's Category. WeaponAccessory objAccessory = new WeaponAccessory(_objCharacter); try { foreach (Weapon objCharacterWeapon in _objCharacter.Weapons) { foreach (WeaponAccessory objWeaponAccessory in objCharacterWeapon.WeaponAccessories) { if (objWeaponAccessory.InternalId == treWeapons.SelectedNode.Tag.ToString()) { objAccessory = objWeaponAccessory; break; } } } if (objAccessory.AllowGear != null) { foreach (XmlNode objAllowed in objAccessory.AllowGear.SelectNodes("gearcategory")) { if (objAllowed.InnerText == objGear.Category) { blnPasteEnabled = true; break; } } } } catch { } } } try { foreach (Weapon objWeapon in _objCharacter.Weapons) { if (objWeapon.InternalId == treWeapons.SelectedNode.Tag.ToString()) { blnCopyEnabled = true; break; } } } catch { } try { WeaponAccessory objAccessory = new WeaponAccessory(_objCharacter); Gear objGear = _objFunctions.FindWeaponGear(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons, out objAccessory); if (objGear != null) blnCopyEnabled = true; } catch { } } // Gear Tab. if (tabStreetGearTabs.SelectedTab == tabGear) { if (GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Gear || GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Commlink || GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.OperatingSystem) blnPasteEnabled = true; try { Gear objGear = _objFunctions.FindGear(treGear.SelectedNode.Tag.ToString(), _objCharacter.Gear); if (objGear != null) blnCopyEnabled = true; } catch { } } } // Vehicles Tab. if (tabCharacterTabs.SelectedTab == tabVehicles) { if (GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Vehicle) blnPasteEnabled = true; if (GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Gear || GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Commlink || GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.OperatingSystem) { // Gear can only be pasted into Vehicles and Vehicle Gear. try { foreach (Vehicle objVehicle in _objCharacter.Vehicles) { if (objVehicle.InternalId == treVehicles.SelectedNode.Tag.ToString()) { blnPasteEnabled = true; break; } } } catch { } try { Vehicle objVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objVehicle); if (objGear != null) blnPasteEnabled = true; } catch { } } if (GlobalOptions.Instance.ClipboardContentType == ClipboardContentType.Weapon) { // Weapons can only be pasted into Vehicle Mods that allow them (Weapon Mounts and Mechanical Arms). try { VehicleMod objMod = new VehicleMod(_objCharacter); foreach (Vehicle objVehicle in _objCharacter.Vehicles) { foreach (VehicleMod objVehicleMod in objVehicle.Mods) { if (objVehicleMod.InternalId == treVehicles.SelectedNode.Tag.ToString()) { if (objVehicleMod.Name.Contains("Weapon Mount") || objVehicleMod.Name.StartsWith("Mechanical Arm") || objMod.WeaponMountCategories != "") { blnPasteEnabled = true; break; } } } } } catch { } } try { foreach (Vehicle objVehicle in _objCharacter.Vehicles) { if (objVehicle.InternalId == treVehicles.SelectedNode.Tag.ToString()) { blnCopyEnabled = true; break; } } } catch { } try { Vehicle objVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objVehicle); if (objGear != null) blnCopyEnabled = true; } catch { } try { foreach (Vehicle objVehicle in _objCharacter.Vehicles) { foreach (VehicleMod objMod in objVehicle.Mods) { foreach (Weapon objWeapon in objMod.Weapons) { if (objWeapon.InternalId == treVehicles.SelectedNode.Tag.ToString()) { blnCopyEnabled = true; break; } } } } } catch { } } mnuEditPaste.Enabled = blnPasteEnabled; tsbPaste.Enabled = blnPasteEnabled; mnuEditCopy.Enabled = blnCopyEnabled; tsbCopy.Enabled = blnCopyEnabled; }
private void tsVehicleAddWeaponAccessory_Click(object sender, EventArgs e) { // Attempt to locate the selected VehicleWeapon. bool blnWeaponFound = false; Vehicle objFoundVehicle = new Vehicle(_objCharacter); Weapon objWeapon = _objFunctions.FindVehicleWeapon(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (objWeapon != null) blnWeaponFound = true; if (!blnWeaponFound) { MessageBox.Show(LanguageManager.Instance.GetString("Message_VehicleWeaponAccessories"), LanguageManager.Instance.GetString("MessageTitle_VehicleWeaponAccessories"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Open the Weapons XML file and locate the selected Weapon. XmlDocument objXmlDocument = XmlManager.Instance.Load("weapons.xml"); XmlNode objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + treVehicles.SelectedNode.Text + "\"]"); frmSelectWeaponAccessory frmPickWeaponAccessory = new frmSelectWeaponAccessory(_objCharacter); if (objXmlWeapon == null) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotModifyWeapon"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Make sure the Weapon allows Accessories to be added to it. if (!Convert.ToBoolean(objXmlWeapon["allowaccessory"].InnerText)) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotModifyWeapon"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { XmlNodeList objXmlMountList = objXmlWeapon.SelectNodes("accessorymounts/mount"); string strMounts = ""; foreach (XmlNode objXmlMount in objXmlMountList) { // Run through the Weapon's currenct Accessories and filter out any used up Mount points. bool blnFound = false; foreach (WeaponAccessory objCurrentAccessory in objWeapon.WeaponAccessories) { if (objCurrentAccessory.Mount == objXmlMount.InnerText) blnFound = true; } if (!blnFound) strMounts += objXmlMount.InnerText + "/"; } frmPickWeaponAccessory.AllowedMounts = strMounts; } frmPickWeaponAccessory.WeaponCost = objWeapon.Cost; frmPickWeaponAccessory.AccessoryMultiplier = objWeapon.AccessoryMultiplier; frmPickWeaponAccessory.ShowDialog(); if (frmPickWeaponAccessory.DialogResult == DialogResult.Cancel) return; // Locate the selected piece. objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/accessories/accessory[name = \"" + frmPickWeaponAccessory.SelectedAccessory + "\"]"); TreeNode objNode = new TreeNode(); WeaponAccessory objAccessory = new WeaponAccessory(_objCharacter); objAccessory.Create(objXmlWeapon, objNode, frmPickWeaponAccessory.SelectedMount, Convert.ToInt32(frmPickWeaponAccessory.SelectedRating)); objAccessory.Parent = objWeapon; objWeapon.WeaponAccessories.Add(objAccessory); objNode.ContextMenuStrip = cmsVehicleWeaponAccessory; treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); if (frmPickWeaponAccessory.AddAgain) tsVehicleAddWeaponAccessory_Click(sender, e); UpdateCharacterInfo(); }
private void mnuEditCopy_Click(object sender, EventArgs e) { if (tabCharacterTabs.SelectedTab == tabStreetGear) { // Lifestyle Tab. if (tabStreetGearTabs.SelectedTab == tabLifestyle) { try { // Copy the selected Lifestyle. Lifestyle objCopyLifestyle = _objFunctions.FindLifestyle(treLifestyles.SelectedNode.Tag.ToString(), _objCharacter.Lifestyles); if (objCopyLifestyle == null) return; MemoryStream objStream = new MemoryStream(); XmlTextWriter objWriter = new XmlTextWriter(objStream, System.Text.Encoding.Unicode); objWriter.Formatting = Formatting.Indented; objWriter.Indentation = 1; objWriter.IndentChar = '\t'; objWriter.WriteStartDocument(); // </characters> objWriter.WriteStartElement("character"); objCopyLifestyle.Save(objWriter); // </characters> objWriter.WriteEndElement(); // Finish the document and flush the Writer and Stream. objWriter.WriteEndDocument(); objWriter.Flush(); objStream.Flush(); // Read the stream. StreamReader objReader = new StreamReader(objStream); objStream.Position = 0; XmlDocument objCharacterXML = new XmlDocument(); // Put the stream into an XmlDocument. string strXML = objReader.ReadToEnd(); objCharacterXML.LoadXml(strXML); objWriter.Close(); objStream.Close(); GlobalOptions.Instance.Clipboard = objCharacterXML; GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Lifestyle; //Clipboard.SetText(objCharacterXML.OuterXml); } catch { } } // Armor Tab. if (tabStreetGearTabs.SelectedTab == tabArmor) { try { // Copy the selected Armor. Armor objCopyArmor = _objFunctions.FindArmor(treArmor.SelectedNode.Tag.ToString(), _objCharacter.Armor); if (objCopyArmor != null) { MemoryStream objStream = new MemoryStream(); XmlTextWriter objWriter = new XmlTextWriter(objStream, System.Text.Encoding.Unicode); objWriter.Formatting = Formatting.Indented; objWriter.Indentation = 1; objWriter.IndentChar = '\t'; objWriter.WriteStartDocument(); // </characters> objWriter.WriteStartElement("character"); objCopyArmor.Save(objWriter); // </characters> objWriter.WriteEndElement(); // Finish the document and flush the Writer and Stream. objWriter.WriteEndDocument(); objWriter.Flush(); objStream.Flush(); // Read the stream. StreamReader objReader = new StreamReader(objStream); objStream.Position = 0; XmlDocument objCharacterXML = new XmlDocument(); // Put the stream into an XmlDocument. string strXML = objReader.ReadToEnd(); objCharacterXML.LoadXml(strXML); objWriter.Close(); objStream.Close(); GlobalOptions.Instance.Clipboard = objCharacterXML; GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Armor; RefreshPasteStatus(); return; } // Attempt to copy Gear. Gear objCopyGear = _objFunctions.FindArmorGear(treArmor.SelectedNode.Tag.ToString(), _objCharacter.Armor, out objCopyArmor); if (objCopyGear != null) { MemoryStream objStream = new MemoryStream(); XmlTextWriter objWriter = new XmlTextWriter(objStream, System.Text.Encoding.Unicode); objWriter.Formatting = Formatting.Indented; objWriter.Indentation = 1; objWriter.IndentChar = '\t'; objWriter.WriteStartDocument(); // </characters> objWriter.WriteStartElement("character"); if (objCopyGear.GetType() == typeof(Commlink)) { Commlink objCommlink = (Commlink)objCopyGear; objCommlink.Save(objWriter); GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Commlink; } else { objCopyGear.Save(objWriter); GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Gear; } if (objCopyGear.WeaponID != Guid.Empty.ToString()) { // Copy any Weapon that comes with the Gear. Weapon objCopyWeapon = _objFunctions.FindWeapon(objCopyGear.WeaponID, _objCharacter.Weapons); objCopyWeapon.Save(objWriter); } // </characters> objWriter.WriteEndElement(); // Finish the document and flush the Writer and Stream. objWriter.WriteEndDocument(); objWriter.Flush(); objStream.Flush(); // Read the stream. StreamReader objReader = new StreamReader(objStream); objStream.Position = 0; XmlDocument objCharacterXML = new XmlDocument(); // Put the stream into an XmlDocument. string strXML = objReader.ReadToEnd(); objCharacterXML.LoadXml(strXML); objWriter.Close(); objStream.Close(); GlobalOptions.Instance.Clipboard = objCharacterXML; RefreshPasteStatus(); return; } } catch { } } // Weapons Tab. if (tabStreetGearTabs.SelectedTab == tabWeapons) { try { // Copy the selected Weapon. Weapon objCopyWeapon = _objFunctions.FindWeapon(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons); if (objCopyWeapon != null) { // Do not let the user copy Gear or Cyberware Weapons. if (objCopyWeapon.Category == "Gear" || objCopyWeapon.Cyberware) return; MemoryStream objStream = new MemoryStream(); XmlTextWriter objWriter = new XmlTextWriter(objStream, System.Text.Encoding.Unicode); objWriter.Formatting = Formatting.Indented; objWriter.Indentation = 1; objWriter.IndentChar = '\t'; objWriter.WriteStartDocument(); // </characters> objWriter.WriteStartElement("character"); objCopyWeapon.Save(objWriter); // </characters> objWriter.WriteEndElement(); // Finish the document and flush the Writer and Stream. objWriter.WriteEndDocument(); objWriter.Flush(); objStream.Flush(); // Read the stream. StreamReader objReader = new StreamReader(objStream); objStream.Position = 0; XmlDocument objCharacterXML = new XmlDocument(); // Put the stream into an XmlDocument. string strXML = objReader.ReadToEnd(); objCharacterXML.LoadXml(strXML); objWriter.Close(); objStream.Close(); GlobalOptions.Instance.Clipboard = objCharacterXML; GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Weapon; RefreshPasteStatus(); return; } WeaponAccessory objAccessory = new WeaponAccessory(_objCharacter); Gear objCopyGear = _objFunctions.FindWeaponGear(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons, out objAccessory); if (objCopyGear != null) { MemoryStream objStream = new MemoryStream(); XmlTextWriter objWriter = new XmlTextWriter(objStream, System.Text.Encoding.Unicode); objWriter.Formatting = Formatting.Indented; objWriter.Indentation = 1; objWriter.IndentChar = '\t'; objWriter.WriteStartDocument(); // </characters> objWriter.WriteStartElement("character"); if (objCopyGear.GetType() == typeof(Commlink)) { Commlink objCommlink = (Commlink)objCopyGear; objCommlink.Save(objWriter); GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Commlink; } else { objCopyGear.Save(objWriter); GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Gear; } if (objCopyGear.WeaponID != Guid.Empty.ToString()) { // Copy any Weapon that comes with the Gear. Weapon objCopyGearWeapon = _objFunctions.FindWeapon(objCopyGear.WeaponID, _objCharacter.Weapons); objCopyGearWeapon.Save(objWriter); } // </characters> objWriter.WriteEndElement(); // Finish the document and flush the Writer and Stream. objWriter.WriteEndDocument(); objWriter.Flush(); objStream.Flush(); // Read the stream. StreamReader objReader = new StreamReader(objStream); objStream.Position = 0; XmlDocument objCharacterXML = new XmlDocument(); // Put the stream into an XmlDocument. string strXML = objReader.ReadToEnd(); objCharacterXML.LoadXml(strXML); objWriter.Close(); objStream.Close(); GlobalOptions.Instance.Clipboard = objCharacterXML; RefreshPasteStatus(); return; } } catch { } } // Gear Tab. if (tabStreetGearTabs.SelectedTab == tabGear) { try { // Copy the selected Gear. Gear objCopyGear = _objFunctions.FindGear(treGear.SelectedNode.Tag.ToString(), _objCharacter.Gear); if (objCopyGear == null) return; MemoryStream objStream = new MemoryStream(); XmlTextWriter objWriter = new XmlTextWriter(objStream, System.Text.Encoding.Unicode); objWriter.Formatting = Formatting.Indented; objWriter.Indentation = 1; objWriter.IndentChar = '\t'; objWriter.WriteStartDocument(); // </characters> objWriter.WriteStartElement("character"); if (objCopyGear.GetType() == typeof(Commlink)) { Commlink objCommlink = (Commlink)objCopyGear; objCommlink.Save(objWriter); GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Commlink; } else { objCopyGear.Save(objWriter); GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Gear; } if (objCopyGear.WeaponID != Guid.Empty.ToString()) { // Copy any Weapon that comes with the Gear. Weapon objCopyWeapon = _objFunctions.FindWeapon(objCopyGear.WeaponID, _objCharacter.Weapons); objCopyWeapon.Save(objWriter); } // </characters> objWriter.WriteEndElement(); // Finish the document and flush the Writer and Stream. objWriter.WriteEndDocument(); objWriter.Flush(); objStream.Flush(); // Read the stream. StreamReader objReader = new StreamReader(objStream); objStream.Position = 0; XmlDocument objCharacterXML = new XmlDocument(); // Put the stream into an XmlDocument. string strXML = objReader.ReadToEnd(); objCharacterXML.LoadXml(strXML); objWriter.Close(); objStream.Close(); GlobalOptions.Instance.Clipboard = objCharacterXML; //Clipboard.SetText(objCharacterXML.OuterXml); } catch { } } } // Vehicles Tab. if (tabCharacterTabs.SelectedTab == tabVehicles) { try { if (treVehicles.SelectedNode.Level == 1) { // Copy the selected Vehicle. Vehicle objCopyVehicle = _objFunctions.FindVehicle(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles); MemoryStream objStream = new MemoryStream(); XmlTextWriter objWriter = new XmlTextWriter(objStream, System.Text.Encoding.Unicode); objWriter.Formatting = Formatting.Indented; objWriter.Indentation = 1; objWriter.IndentChar = '\t'; objWriter.WriteStartDocument(); // </characters> objWriter.WriteStartElement("character"); objCopyVehicle.Save(objWriter); // </characters> objWriter.WriteEndElement(); // Finish the document and flush the Writer and Stream. objWriter.WriteEndDocument(); objWriter.Flush(); objStream.Flush(); // Read the stream. StreamReader objReader = new StreamReader(objStream); objStream.Position = 0; XmlDocument objCharacterXML = new XmlDocument(); // Put the stream into an XmlDocument. string strXML = objReader.ReadToEnd(); objCharacterXML.LoadXml(strXML); objWriter.Close(); objStream.Close(); GlobalOptions.Instance.Clipboard = objCharacterXML; GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Vehicle; //Clipboard.SetText(objCharacterXML.OuterXml); } else { Vehicle objVehicle = new Vehicle(_objCharacter); Gear objCopyGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objVehicle); if (objCopyGear != null) { MemoryStream objStream = new MemoryStream(); XmlTextWriter objWriter = new XmlTextWriter(objStream, System.Text.Encoding.Unicode); objWriter.Formatting = Formatting.Indented; objWriter.Indentation = 1; objWriter.IndentChar = '\t'; objWriter.WriteStartDocument(); // </characters> objWriter.WriteStartElement("character"); if (objCopyGear.GetType() == typeof(Commlink)) { Commlink objCommlink = (Commlink)objCopyGear; objCommlink.Save(objWriter); GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Commlink; } else { objCopyGear.Save(objWriter); GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Gear; } if (objCopyGear.WeaponID != Guid.Empty.ToString()) { // Copy any Weapon that comes with the Gear. Weapon objCopyWeapon = _objFunctions.FindWeapon(objCopyGear.WeaponID, _objCharacter.Weapons); objCopyWeapon.Save(objWriter); } // </characters> objWriter.WriteEndElement(); // Finish the document and flush the Writer and Stream. objWriter.WriteEndDocument(); objWriter.Flush(); objStream.Flush(); // Read the stream. StreamReader objReader = new StreamReader(objStream); objStream.Position = 0; XmlDocument objCharacterXML = new XmlDocument(); // Put the stream into an XmlDocument. string strXML = objReader.ReadToEnd(); objCharacterXML.LoadXml(strXML); objWriter.Close(); objStream.Close(); GlobalOptions.Instance.Clipboard = objCharacterXML; RefreshPasteStatus(); return; } foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { foreach (VehicleMod objMod in objCharacterVehicle.Mods) { Weapon objCopyWeapon = _objFunctions.FindWeapon(treVehicles.SelectedNode.Tag.ToString(), objMod.Weapons); if (objCopyWeapon != null) { // Do not let the user copy Gear or Cyberware Weapons. if (objCopyWeapon.Category == "Gear" || objCopyWeapon.Cyberware) return; MemoryStream objStream = new MemoryStream(); XmlTextWriter objWriter = new XmlTextWriter(objStream, System.Text.Encoding.Unicode); objWriter.Formatting = Formatting.Indented; objWriter.Indentation = 1; objWriter.IndentChar = '\t'; objWriter.WriteStartDocument(); // </characters> objWriter.WriteStartElement("character"); objCopyWeapon.Save(objWriter); // </characters> objWriter.WriteEndElement(); // Finish the document and flush the Writer and Stream. objWriter.WriteEndDocument(); objWriter.Flush(); objStream.Flush(); // Read the stream. StreamReader objReader = new StreamReader(objStream); objStream.Position = 0; XmlDocument objCharacterXML = new XmlDocument(); // Put the stream into an XmlDocument. string strXML = objReader.ReadToEnd(); objCharacterXML.LoadXml(strXML); objWriter.Close(); objStream.Close(); GlobalOptions.Instance.Clipboard = objCharacterXML; GlobalOptions.Instance.ClipboardContentType = ClipboardContentType.Weapon; RefreshPasteStatus(); return; } } } } } catch { } } RefreshPasteStatus(); }
/// <summary> /// Add a PACKS Kit to the character. /// </summary> public void AddPACKSKit() { frmSelectPACKSKit frmPickPACKSKit = new frmSelectPACKSKit(_objCharacter); frmPickPACKSKit.ShowDialog(this); bool blnCreateChildren = true; // If the form was canceled, don't do anything. if (frmPickPACKSKit.DialogResult == DialogResult.Cancel) return; XmlDocument objXmlDocument = XmlManager.Instance.Load("packs.xml"); // Do not create child items for Gear if the chosen Kit is in the Custom category since these items will contain the exact plugins desired. //if (frmPickPACKSKit.SelectedCategory == "Custom") //blnCreateChildren = false; XmlNode objXmlKit = objXmlDocument.SelectSingleNode("/chummer/packs/pack[name = \"" + frmPickPACKSKit.SelectedKit + "\" and category = \"" + frmPickPACKSKit.SelectedCategory + "\"]"); // Update Qualities. if (objXmlKit["qualities"] != null) { XmlDocument objXmlQualityDocument = XmlManager.Instance.Load("qualities.xml"); // Positive Qualities. foreach (XmlNode objXmlQuality in objXmlKit.SelectNodes("qualities/positive/quality")) { XmlNode objXmlQualityNode = objXmlQualityDocument.SelectSingleNode("/chummer/qualities/quality[name = \"" + objXmlQuality.InnerText + "\"]"); TreeNode objNode = new TreeNode(); List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); Quality objQuality = new Quality(_objCharacter); string strForceValue = ""; if (objXmlQuality.Attributes["select"] != null) strForceValue = objXmlQuality.Attributes["select"].InnerText; objQuality.Create(objXmlQualityNode, _objCharacter, QualitySource.Selected, objNode, objWeapons, objWeaponNodes, strForceValue); _objCharacter.Qualities.Add(objQuality); treQualities.Nodes[0].Nodes.Add(objNode); treQualities.Nodes[0].Expand(); // Add any created Weapons to the character. foreach (Weapon objWeapon in objWeapons) _objCharacter.Weapons.Add(objWeapon); // Create the Weapon Node if one exists. foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } } // Negative Qualities. foreach (XmlNode objXmlQuality in objXmlKit.SelectNodes("qualities/negative/quality")) { XmlNode objXmlQualityNode = objXmlQualityDocument.SelectSingleNode("/chummer/qualities/quality[name = \"" + objXmlQuality.InnerText + "\"]"); TreeNode objNode = new TreeNode(); List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); Quality objQuality = new Quality(_objCharacter); string strForceValue = ""; if (objXmlQuality.Attributes["select"] != null) strForceValue = objXmlQuality.Attributes["select"].InnerText; objQuality.Create(objXmlQualityNode, _objCharacter, QualitySource.Selected, objNode, objWeapons, objWeaponNodes, strForceValue); _objCharacter.Qualities.Add(objQuality); treQualities.Nodes[1].Nodes.Add(objNode); treQualities.Nodes[1].Expand(); // Add any created Weapons to the character. foreach (Weapon objWeapon in objWeapons) _objCharacter.Weapons.Add(objWeapon); // Create the Weapon Node if one exists. foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } } } // Update Attributes. if (objXmlKit["attributes"] != null) { // Reset all Attributes back to 1 so we don't go over any BP limits. nudBOD.Value = nudBOD.Minimum; nudAGI.Value = nudAGI.Minimum; nudREA.Value = nudREA.Minimum; nudSTR.Value = nudSTR.Minimum; nudCHA.Value = nudCHA.Minimum; nudINT.Value = nudINT.Minimum; nudLOG.Value = nudLOG.Minimum; nudWIL.Value = nudWIL.Minimum; nudEDG.Value = nudEDG.Minimum; nudMAG.Value = nudMAG.Minimum; nudRES.Value = nudRES.Minimum; foreach (XmlNode objXmlAttribute in objXmlKit["attributes"]) { // The CharacterAttribute is calculated as given value - (6 - Metatype Maximum) so that each Metatype has the values from the file adjusted correctly. switch (objXmlAttribute.Name) { case "bod": nudBOD.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.BOD.MetatypeMaximum); break; case "agi": nudAGI.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.AGI.MetatypeMaximum); break; case "rea": nudREA.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.REA.MetatypeMaximum); break; case "str": nudSTR.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.STR.MetatypeMaximum); break; case "cha": nudCHA.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.CHA.MetatypeMaximum); break; case "int": nudINT.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.INT.MetatypeMaximum); break; case "log": nudLOG.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.LOG.MetatypeMaximum); break; case "wil": nudWIL.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.WIL.MetatypeMaximum); break; case "mag": nudMAG.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.MAG.MetatypeMaximum); break; case "res": nudRES.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.RES.MetatypeMaximum); break; default: nudEDG.Value = Convert.ToInt32(objXmlAttribute.InnerText) - (6 - _objCharacter.EDG.MetatypeMaximum); break; } } } //TODO: PACKS SKILLS? // Select a Martial Art. if (objXmlKit["selectmartialart"] != null) { string strForcedValue = ""; int intRating = 1; if (objXmlKit["selectmartialart"].Attributes["select"] != null) strForcedValue = objXmlKit["selectmartialart"].Attributes["select"].InnerText; if (objXmlKit["selectmartialart"].Attributes["rating"] != null) intRating = Convert.ToInt32(objXmlKit["selectmartialart"].Attributes["rating"].InnerText); frmSelectMartialArt frmPickMartialArt = new frmSelectMartialArt(_objCharacter); frmPickMartialArt.ForcedValue = strForcedValue; frmPickMartialArt.ShowDialog(this); if (frmPickMartialArt.DialogResult != DialogResult.Cancel) { // Open the Martial Arts XML file and locate the selected piece. XmlDocument objXmlMartialArtDocument = XmlManager.Instance.Load("martialarts.xml"); XmlNode objXmlArt = objXmlMartialArtDocument.SelectSingleNode("/chummer/martialarts/martialart[name = \"" + frmPickMartialArt.SelectedMartialArt + "\"]"); TreeNode objNode = new TreeNode(); MartialArt objMartialArt = new MartialArt(_objCharacter); objMartialArt.Create(objXmlArt, objNode, _objCharacter); objMartialArt.Rating = intRating; _objCharacter.MartialArts.Add(objMartialArt); objNode.ContextMenuStrip = cmsMartialArts; treMartialArts.Nodes[0].Nodes.Add(objNode); treMartialArts.Nodes[0].Expand(); treMartialArts.SelectedNode = objNode; } } // Update Martial Arts. if (objXmlKit["martialarts"] != null) { // Open the Martial Arts XML file and locate the selected art. XmlDocument objXmlMartialArtDocument = XmlManager.Instance.Load("martialarts.xml"); foreach (XmlNode objXmlArt in objXmlKit.SelectNodes("martialarts/martialart")) { TreeNode objNode = new TreeNode(); MartialArt objArt = new MartialArt(_objCharacter); XmlNode objXmlArtNode = objXmlMartialArtDocument.SelectSingleNode("/chummer/martialarts/martialart[name = \"" + objXmlArt["name"].InnerText + "\"]"); objArt.Create(objXmlArtNode, objNode, _objCharacter); objArt.Rating = Convert.ToInt32(objXmlArt["rating"].InnerText); _objCharacter.MartialArts.Add(objArt); // Check for Advantages. foreach (XmlNode objXmlAdvantage in objXmlArt.SelectNodes("techniques/technique")) { TreeNode objChildNode = new TreeNode(); MartialArtAdvantage objAdvantage = new MartialArtAdvantage(_objCharacter); XmlNode objXmlAdvantageNode = objXmlMartialArtDocument.SelectSingleNode("/chummer/techniques/technique[name = \"" + objXmlAdvantage["name"].InnerText + "\"]"); objAdvantage.Create(objXmlAdvantageNode, _objCharacter, objChildNode); objArt.Advantages.Add(objAdvantage); objNode.Nodes.Add(objChildNode); objNode.Expand(); } treMartialArts.Nodes[0].Nodes.Add(objNode); treMartialArts.Nodes[0].Expand(); } } // Update Adept Powers. if (objXmlKit["powers"] != null) { // Open the Powers XML file and locate the selected power. XmlDocument objXmlPowerDocument = XmlManager.Instance.Load("powers.xml"); foreach (XmlNode objXmlPower in objXmlKit.SelectNodes("powers/power")) { XmlNode objXmlPowerNode = objXmlPowerDocument.SelectSingleNode("/chummer/powers/power[name = \"" + objXmlPower["name"].InnerText + "\"]"); int i = panPowers.Controls.Count; Power objPower = new Power(_objCharacter); _objCharacter.Powers.Add(objPower); PowerControl objPowerControl = new PowerControl(); objPowerControl.PowerObject = objPower; // Attach an EventHandler for the PowerRatingChanged Event. objPowerControl.PowerRatingChanged += objPower_PowerRatingChanged; objPowerControl.DeletePower += objPower_DeletePower; objPowerControl.PowerName = objXmlPowerNode["name"].InnerText; objPowerControl.PointsPerLevel = Convert.ToDecimal(objXmlPowerNode["points"].InnerText, GlobalOptions.Instance.CultureInfo); objPowerControl.AdeptWayDiscount = Convert.ToDecimal(objXmlPowerNode["adeptway"].InnerText, GlobalOptions.Instance.CultureInfo); if (objXmlPowerNode["levels"].InnerText == "no") { objPowerControl.LevelEnabled = false; } else { objPowerControl.LevelEnabled = true; if (objXmlPowerNode["levels"].InnerText != "yes") objPower.MaxLevels = Convert.ToInt32(objXmlPowerNode["levels"].InnerText); } objPower.Source = objXmlPowerNode["source"].InnerText; objPower.Page = objXmlPowerNode["page"].InnerText; if (objXmlPowerNode["doublecost"] != null) objPower.DoubleCost = false; if (objXmlPowerNode.InnerXml.Contains("bonus")) { objPower.Bonus = objXmlPowerNode["bonus"]; if (objXmlPower["name"].Attributes["select"] != null) _objImprovementManager.ForcedValue = objXmlPower["name"].Attributes["select"].InnerText; _objImprovementManager.CreateImprovements(Improvement.ImprovementSource.Power, objPower.InternalId, objPower.Bonus, false, Convert.ToInt32(objPower.Rating), objPower.DisplayNameShort); objPowerControl.Extra = _objImprovementManager.SelectedValue; } objPowerControl.Top = i * objPowerControl.Height; panPowers.Controls.Add(objPowerControl); // Set the Rating of the Power if applicable. if (objXmlPower["rating"] != null) objPowerControl.PowerLevel = Convert.ToInt32(objXmlPower["rating"].InnerText); } } // Update Complex Forms. if (objXmlKit["programs"] != null) { // Open the Programs XML file and locate the selected program. XmlDocument objXmlProgramDocument = XmlManager.Instance.Load("complexforms.xml"); foreach (XmlNode objXmlProgram in objXmlKit.SelectNodes("complexforms/complexform")) { XmlNode objXmlProgramNode = objXmlProgramDocument.SelectSingleNode("/chummer/complexforms/complexform[name = \"" + objXmlProgram["name"].InnerText + "\"]"); string strForceValue = ""; if (objXmlProgram.Attributes["select"] != null) strForceValue = objXmlProgram.Attributes["select"].InnerText; TreeNode objNode = new TreeNode(); ComplexForm objProgram = new ComplexForm(_objCharacter); objProgram.Create(objXmlProgramNode, _objCharacter, objNode, strForceValue); treComplexForms.Nodes[0].Nodes.Add(objNode); treComplexForms.Nodes[0].Expand(); _objCharacter.ComplexForms.Add(objProgram); treComplexForms.SortCustom(); } } // Update Spells. if (objXmlKit["spells"] != null) { XmlDocument objXmlSpellDocument = XmlManager.Instance.Load("spells.xml"); foreach (XmlNode objXmlSpell in objXmlKit.SelectNodes("spells/spell")) { // Make sure the Spell has not already been added to the character. bool blnFound = false; foreach (TreeNode nodSpell in treSpells.Nodes[0].Nodes) { if (nodSpell.Text == objXmlSpell.InnerText) { blnFound = true; break; } } // The Spell is not in the list, so add it. if (!blnFound) { string strForceValue = ""; if (objXmlSpell.Attributes["select"] != null) strForceValue = objXmlSpell.Attributes["select"].InnerText; XmlNode objXmlSpellNode = objXmlSpellDocument.SelectSingleNode("/chummer/spells/spell[name = \"" + objXmlSpell.InnerText + "\"]"); Spell objSpell = new Spell(_objCharacter); TreeNode objNode = new TreeNode(); objSpell.Create(objXmlSpellNode, _objCharacter, objNode, strForceValue); objNode.ContextMenuStrip = cmsSpell; _objCharacter.Spells.Add(objSpell); switch (objSpell.Category) { case "Combat": treSpells.Nodes[0].Nodes.Add(objNode); treSpells.Nodes[0].Expand(); break; case "Detection": treSpells.Nodes[1].Nodes.Add(objNode); treSpells.Nodes[1].Expand(); break; case "Health": treSpells.Nodes[2].Nodes.Add(objNode); treSpells.Nodes[2].Expand(); break; case "Illusion": treSpells.Nodes[3].Nodes.Add(objNode); treSpells.Nodes[3].Expand(); break; case "Manipulation": treSpells.Nodes[4].Nodes.Add(objNode); treSpells.Nodes[4].Expand(); break; case "Rituals": int intNode = 5; if (_objCharacter.AdeptEnabled && !_objCharacter.MagicianEnabled) intNode = 0; treSpells.Nodes[intNode].Nodes.Add(objNode); treSpells.Nodes[intNode].Expand(); break; } treSpells.SortCustom(); } } } // Update Spirits. if (objXmlKit["spirits"] != null) { foreach (XmlNode objXmlSpirit in objXmlKit.SelectNodes("spirits/spirit")) { int i = panSpirits.Controls.Count; Spirit objSpirit = new Spirit(_objCharacter); _objCharacter.Spirits.Add(objSpirit); SpiritControl objSpiritControl = new SpiritControl(); objSpiritControl.SpiritObject = objSpirit; objSpiritControl.EntityType = SpiritType.Spirit; // Attach an EventHandler for the ServicesOwedChanged Event. objSpiritControl.ServicesOwedChanged += objSpirit_ServicesOwedChanged; objSpiritControl.ForceChanged += objSpirit_ForceChanged; objSpiritControl.BoundChanged += objSpirit_BoundChanged; objSpiritControl.DeleteSpirit += objSpirit_DeleteSpirit; objSpiritControl.Name = objXmlSpirit["name"].InnerText; objSpiritControl.Force = Convert.ToInt32(objXmlSpirit["force"].InnerText); objSpiritControl.ServicesOwed = Convert.ToInt32(objXmlSpirit["services"].InnerText); objSpiritControl.Top = i * objSpiritControl.Height; panSpirits.Controls.Add(objSpiritControl); } } // Update Lifestyles. if (objXmlKit["lifestyles"] != null) { XmlDocument objXmlLifestyleDocument = XmlManager.Instance.Load("lifestyles.xml"); foreach (XmlNode objXmlLifestyle in objXmlKit.SelectNodes("lifestyles/lifestyle")) { string strName = objXmlLifestyle["name"].InnerText; int intMonths = Convert.ToInt32(objXmlLifestyle["months"].InnerText); // Create the Lifestyle. TreeNode objNode = new TreeNode(); Lifestyle objLifestyle = new Lifestyle(_objCharacter); XmlNode objXmlLifestyleNode = objXmlLifestyleDocument.SelectSingleNode("/chummer/lifestyles/lifestyle[name = \"" + strName + "\"]"); if (objXmlLifestyleNode != null) { // This is a standard Lifestyle, so just use the Create method. objLifestyle.Create(objXmlLifestyleNode, objNode); objLifestyle.Months = intMonths; } else { // This is an Advanced Lifestyle, so build it manually. objLifestyle.Name = strName; objLifestyle.Months = intMonths; objLifestyle.Cost = Convert.ToInt32(objXmlLifestyle["cost"].InnerText); objLifestyle.Dice = Convert.ToInt32(objXmlLifestyle["dice"].InnerText); objLifestyle.Multiplier = Convert.ToInt32(objXmlLifestyle["multiplier"].InnerText); objLifestyle.BaseLifestyle = objXmlLifestyle["baselifestyle"].InnerText; objLifestyle.Source = "SR5"; objLifestyle.Page = "373"; objLifestyle.Comforts = Convert.ToInt32(objXmlLifestyle["comforts"].InnerText); objLifestyle.ComfortsEntertainment = Convert.ToInt32(objXmlLifestyle["comfortsentertainment"].InnerText); objLifestyle.Security = Convert.ToInt32(objXmlLifestyle["security"].InnerText); objLifestyle.SecurityEntertainment = Convert.ToInt32(objXmlLifestyle["securityentertainment"].InnerText); objLifestyle.Area = Convert.ToInt32(objXmlLifestyle["area"].InnerText); objLifestyle.AreaEntertainment = Convert.ToInt32(objXmlLifestyle["areaentertainment"].InnerText); foreach (LifestyleQuality objXmlQuality in objXmlLifestyle.SelectNodes("lifestylequalities/lifestylequality")) objLifestyle.LifestyleQualities.Add(objXmlQuality); objNode.Text = strName; } // Add the Lifestyle to the character and Lifestyle Tree. if (objLifestyle.BaseLifestyle != "") objNode.ContextMenuStrip = cmsAdvancedLifestyle; else objNode.ContextMenuStrip = cmsLifestyleNotes; _objCharacter.Lifestyles.Add(objLifestyle); treLifestyles.Nodes[0].Nodes.Add(objNode); treLifestyles.Nodes[0].Expand(); } } // Update NuyenBP. if (objXmlKit["nuyenbp"] != null) { int intAmount = Convert.ToInt32(objXmlKit["nuyenbp"].InnerText); //if (_objCharacter.BuildMethod == CharacterBuildMethod.Karma) //intAmount *= 2; // Make sure we don't go over the field's maximum which would throw an Exception. if (nudNuyen.Value + intAmount > nudNuyen.Maximum) nudNuyen.Value = nudNuyen.Maximum; else nudNuyen.Value += intAmount; } // Update Armor. if (objXmlKit["armors"] != null) { XmlDocument objXmlArmorDocument = XmlManager.Instance.Load("armor.xml"); foreach (XmlNode objXmlArmor in objXmlKit.SelectNodes("armors/armor")) { XmlNode objXmlArmorNode = objXmlArmorDocument.SelectSingleNode("/chummer/armors/armor[name = \"" + objXmlArmor["name"].InnerText + "\"]"); Armor objArmor = new Armor(_objCharacter); TreeNode objNode = new TreeNode(); int intArmorRating = 0; if (objXmlArmor["rating"] != null) { intArmorRating = Convert.ToInt32(objXmlArmor["rating"].InnerText); } objArmor.Create(objXmlArmorNode, objNode, cmsArmorMod, intArmorRating, false, blnCreateChildren); _objCharacter.Armor.Add(objArmor); // Look for Armor Mods. if (objXmlArmor["mods"] != null) { foreach (XmlNode objXmlMod in objXmlArmor.SelectNodes("mods/mod")) { List<Weapon> lstWeapons = new List<Weapon>(); List<TreeNode> lstWeaponNodes = new List<TreeNode>(); XmlNode objXmlModNode = objXmlArmorDocument.SelectSingleNode("/chummer/mods/mod[name = \"" + objXmlMod["name"].InnerText + "\"]"); ArmorMod objMod = new ArmorMod(_objCharacter); TreeNode objModNode = new TreeNode(); int intRating = 0; if (objXmlMod["rating"] != null) intRating = Convert.ToInt32(objXmlMod["rating"].InnerText); objMod.Create(objXmlModNode, objModNode, intRating, lstWeapons, lstWeaponNodes); objModNode.ContextMenuStrip = cmsArmorMod; objMod.Parent = objArmor; objArmor.ArmorMods.Add(objMod); objNode.Nodes.Add(objModNode); objNode.Expand(); // Add any Weapons created by the Mod. foreach (Weapon objWeapon in lstWeapons) _objCharacter.Weapons.Add(objWeapon); foreach (TreeNode objWeaponNode in lstWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } } } XmlDocument objXmlGearDocument = XmlManager.Instance.Load("gear.xml"); foreach (XmlNode objXmlGear in objXmlArmor.SelectNodes("gears/gear")) AddPACKSGear(objXmlGearDocument, objXmlGear, objNode, objArmor, cmsArmorGear, blnCreateChildren); objNode.ContextMenuStrip = cmsArmor; treArmor.Nodes[0].Nodes.Add(objNode); treArmor.Nodes[0].Expand(); } } // Update Weapons. if (objXmlKit["weapons"] != null) { XmlDocument objXmlWeaponDocument = XmlManager.Instance.Load("weapons.xml"); pgbProgress.Visible = true; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlKit.SelectNodes("weapons/weapon").Count; int i = 0; foreach (XmlNode objXmlWeapon in objXmlKit.SelectNodes("weapons/weapon")) { i++; pgbProgress.Value = i; Application.DoEvents(); XmlNode objXmlWeaponNode = objXmlWeaponDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + objXmlWeapon["name"].InnerText + "\"]"); Weapon objWeapon = new Weapon(_objCharacter); TreeNode objNode = new TreeNode(); objWeapon.Create(objXmlWeaponNode, _objCharacter, objNode, cmsWeapon, cmsWeaponAccessory, blnCreateChildren); _objCharacter.Weapons.Add(objWeapon); // Look for Weapon Accessories. if (objXmlWeapon["accessories"] != null) { foreach (XmlNode objXmlAccessory in objXmlWeapon.SelectNodes("accessories/accessory")) { XmlNode objXmlAccessoryNode = objXmlWeaponDocument.SelectSingleNode("/chummer/accessories/accessory[name = \"" + objXmlAccessory["name"].InnerText + "\"]"); WeaponAccessory objMod = new WeaponAccessory(_objCharacter); TreeNode objModNode = new TreeNode(); string strMount = ""; int intRating = 0; if (objXmlAccessory["mount"] != null) strMount = objXmlAccessory["mount"].InnerText; objMod.Create(objXmlAccessoryNode, objModNode, strMount, intRating); objModNode.ContextMenuStrip = cmsWeaponAccessory; objMod.Parent = objWeapon; objWeapon.WeaponAccessories.Add(objMod); XmlDocument objXmlGearDocument = XmlManager.Instance.Load("gear.xml"); foreach (XmlNode objXmlGear in objXmlAccessory.SelectNodes("gears/gear")) AddPACKSGear(objXmlGearDocument, objXmlGear, objModNode, objMod, cmsWeaponAccessoryGear, blnCreateChildren); objNode.Nodes.Add(objModNode); objNode.Expand(); } } // Look for an Underbarrel Weapon. if (objXmlWeapon["underbarrel"] != null) { XmlNode objXmlUnderbarrelNode = objXmlWeaponDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + objXmlWeapon["underbarrel"].InnerText + "\"]"); Weapon objUnderbarrelWeapon = new Weapon(_objCharacter); TreeNode objUnderbarrelNode = new TreeNode(); objUnderbarrelWeapon.Create(objXmlUnderbarrelNode, _objCharacter, objUnderbarrelNode, cmsWeapon, cmsWeaponAccessory, blnCreateChildren); objWeapon.UnderbarrelWeapons.Add(objUnderbarrelWeapon); objNode.Nodes.Add(objUnderbarrelNode); objNode.Expand(); } objNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objNode); treWeapons.Nodes[0].Expand(); Application.DoEvents(); } } // Update Cyberware. if (objXmlKit["cyberwares"] != null) { XmlDocument objXmlCyberwareDocument = XmlManager.Instance.Load("cyberware.xml"); XmlDocument objXmlGearDocument = XmlManager.Instance.Load("gear.xml"); pgbProgress.Visible = true; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlKit.SelectNodes("cyberwares/cyberware").Count; int i = 0; foreach (XmlNode objXmlCyberware in objXmlKit.SelectNodes("cyberwares/cyberware")) { i++; pgbProgress.Value = i; Application.DoEvents(); List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); TreeNode objNode = new TreeNode(); Cyberware objCyberware = new Cyberware(_objCharacter); Grade objGrade = objCyberware.ConvertToCyberwareGrade(objXmlCyberware["grade"].InnerText, Improvement.ImprovementSource.Cyberware); int intRating = 0; if (objXmlCyberware["rating"] != null) intRating = Convert.ToInt32(objXmlCyberware["rating"].InnerText); XmlNode objXmlCyberwareNode = objXmlCyberwareDocument.SelectSingleNode("/chummer/cyberwares/cyberware[name = \"" + objXmlCyberware["name"].InnerText + "\"]"); objCyberware.Create(objXmlCyberwareNode, _objCharacter, objGrade, Improvement.ImprovementSource.Cyberware, intRating, objNode, objWeapons, objWeaponNodes, true, blnCreateChildren); _objCharacter.Cyberware.Add(objCyberware); // Add any children. if (objXmlCyberware["cyberwares"] != null) { foreach (XmlNode objXmlChild in objXmlCyberware.SelectNodes("cyberwares/cyberware")) { TreeNode objChildNode = new TreeNode(); Cyberware objChildCyberware = new Cyberware(_objCharacter); int intChildRating = 0; if (objXmlChild["rating"] != null) intChildRating = Convert.ToInt32(objXmlChild["rating"].InnerText); XmlNode objXmlChildNode = objXmlCyberwareDocument.SelectSingleNode("/chummer/cyberwares/cyberware[name = \"" + objXmlChild["name"].InnerText + "\"]"); objChildCyberware.Create(objXmlChildNode, _objCharacter, objGrade, Improvement.ImprovementSource.Cyberware, intChildRating, objChildNode, objWeapons, objWeaponNodes, true, blnCreateChildren); objCyberware.Children.Add(objChildCyberware); objChildNode.ContextMenuStrip = cmsCyberware; foreach (XmlNode objXmlGear in objXmlChild.SelectNodes("gears/gear")) AddPACKSGear(objXmlGearDocument, objXmlGear, objChildNode, objChildCyberware, cmsCyberwareGear, blnCreateChildren); objNode.Nodes.Add(objChildNode); objNode.Expand(); } } foreach (XmlNode objXmlGear in objXmlCyberware.SelectNodes("gears/gear")) AddPACKSGear(objXmlGearDocument, objXmlGear, objNode, objCyberware, cmsCyberwareGear, blnCreateChildren); objNode.ContextMenuStrip = cmsCyberware; treCyberware.Nodes[0].Nodes.Add(objNode); treCyberware.Nodes[0].Expand(); // Add any Weapons created by the Gear. foreach (Weapon objWeapon in objWeapons) _objCharacter.Weapons.Add(objWeapon); foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } Application.DoEvents(); } treCyberware.SortCustom(); } // Update Bioware. if (objXmlKit["biowares"] != null) { XmlDocument objXmlBiowareDocument = XmlManager.Instance.Load("bioware.xml"); pgbProgress.Visible = true; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlKit.SelectNodes("biowares/bioware").Count; int i = 0; foreach (XmlNode objXmlBioware in objXmlKit.SelectNodes("biowares/bioware")) { i++; pgbProgress.Value = i; Application.DoEvents(); List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); TreeNode objNode = new TreeNode(); Cyberware objCyberware = new Cyberware(_objCharacter); Grade objGrade = objCyberware.ConvertToCyberwareGrade(objXmlBioware["grade"].InnerText, Improvement.ImprovementSource.Bioware); int intRating = 0; if (objXmlBioware["rating"] != null) intRating = Convert.ToInt32(objXmlBioware["rating"].InnerText); XmlNode objXmlBiowareNode = objXmlBiowareDocument.SelectSingleNode("/chummer/biowares/bioware[name = \"" + objXmlBioware["name"].InnerText + "\"]"); objCyberware.Create(objXmlBiowareNode, _objCharacter, objGrade, Improvement.ImprovementSource.Bioware, intRating, objNode, objWeapons, objWeaponNodes, true, blnCreateChildren); _objCharacter.Cyberware.Add(objCyberware); objNode.ContextMenuStrip = cmsBioware; treCyberware.Nodes[1].Nodes.Add(objNode); treCyberware.Nodes[1].Expand(); // Add any Weapons created by the Gear. foreach (Weapon objWeapon in objWeapons) _objCharacter.Weapons.Add(objWeapon); foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsWeapon; treWeapons.Nodes[0].Nodes.Add(objWeaponNode); treWeapons.Nodes[0].Expand(); } Application.DoEvents(); } treCyberware.SortCustom(); } // Update Gear. if (objXmlKit["gears"] != null) { XmlDocument objXmlGearDocument = XmlManager.Instance.Load("gear.xml"); pgbProgress.Visible = true; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlKit.SelectNodes("gears/gear").Count; int i = 0; foreach (XmlNode objXmlGear in objXmlKit.SelectNodes("gears/gear")) { i++; pgbProgress.Value = i; Application.DoEvents(); AddPACKSGear(objXmlGearDocument, objXmlGear, treGear.Nodes[0], _objCharacter, cmsGear, blnCreateChildren); Application.DoEvents(); } } // Update Vehicles. if (objXmlKit["vehicles"] != null) { XmlDocument objXmlVehicleDocument = XmlManager.Instance.Load("vehicles.xml"); pgbProgress.Visible = true; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlKit.SelectNodes("vehicles/vehicle").Count; int i = 0; foreach (XmlNode objXmlVehicle in objXmlKit.SelectNodes("vehicles/vehicle")) { i++; pgbProgress.Value = i; Application.DoEvents(); Gear objDefaultSensor = new Gear(_objCharacter); TreeNode objNode = new TreeNode(); Vehicle objVehicle = new Vehicle(_objCharacter); XmlNode objXmlVehicleNode = objXmlVehicleDocument.SelectSingleNode("/chummer/vehicles/vehicle[name = \"" + objXmlVehicle["name"].InnerText + "\"]"); objVehicle.Create(objXmlVehicleNode, objNode, cmsVehicle, cmsVehicleGear, cmsVehicleWeapon, cmsVehicleWeaponAccessory, blnCreateChildren); _objCharacter.Vehicles.Add(objVehicle); // Grab the default Sensor that comes with the Vehicle. foreach (Gear objSensorGear in objVehicle.Gear) { if (objSensorGear.Category == "Sensors" && objSensorGear.Cost == "0" && objSensorGear.Rating == 0) { objDefaultSensor = objSensorGear; break; } } // Add any Vehicle Mods. if (objXmlVehicle["mods"] != null) { foreach (XmlNode objXmlMod in objXmlVehicle.SelectNodes("mods/mod")) { TreeNode objModNode = new TreeNode(); VehicleMod objMod = new VehicleMod(_objCharacter); int intRating = 0; if (objXmlMod["rating"] != null) intRating = Convert.ToInt32(objXmlMod["rating"].InnerText); XmlNode objXmlModNode = objXmlVehicleDocument.SelectSingleNode("/chummer/mods/mod[name = \"" + objXmlMod["name"].InnerText + "\"]"); objMod.Create(objXmlModNode, objModNode, intRating); objVehicle.Mods.Add(objMod); objNode.Nodes.Add(objModNode); objNode.Expand(); } } // Add any Vehicle Gear. if (objXmlVehicle["gears"] != null) { XmlDocument objXmlGearDocument = XmlManager.Instance.Load("gear.xml"); foreach (XmlNode objXmlGear in objXmlVehicle.SelectNodes("gears/gear")) { List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); TreeNode objGearNode = new TreeNode(); Gear objGear = new Gear(_objCharacter); int intQty = 1; int intRating = 0; if (objXmlGear["rating"] != null) intRating = Convert.ToInt32(objXmlGear["rating"].InnerText); string strForceValue = ""; if (objXmlGear["name"].Attributes["select"] != null) strForceValue = objXmlGear["name"].Attributes["select"].InnerText; if (objXmlGear["qty"] != null) intQty = Convert.ToInt32(objXmlGear["qty"].InnerText); XmlNode objXmlGearNode = objXmlGearDocument.SelectSingleNode("/chummer/gears/gear[name = \"" + objXmlGear["name"].InnerText + "\"]"); objGear.Create(objXmlGearNode, _objCharacter, objGearNode, intRating, objWeapons, objWeaponNodes, strForceValue, false, false, false, blnCreateChildren, false); objGear.Quantity = intQty; objGearNode.Text = objGear.DisplayName; objVehicle.Gear.Add(objGear); // Look for child components. if (objXmlGear["gears"] != null) { foreach (XmlNode objXmlChild in objXmlGear.SelectNodes("gears/gear")) { AddPACKSGear(objXmlGearDocument, objXmlChild, objGearNode, objGear, cmsVehicleGear, blnCreateChildren); } } objGearNode.Expand(); objGearNode.ContextMenuStrip = cmsVehicleGear; objNode.Nodes.Add(objGearNode); objNode.Expand(); // If this is a Sensor, it will replace the Vehicle's base sensor, so remove it. if (objGear.Category == "Sensors" && objGear.Cost == "0" && objGear.Rating == 0) { objVehicle.Gear.Remove(objDefaultSensor); foreach (TreeNode objSensorNode in objNode.Nodes) { if (objSensorNode.Tag.ToString() == objDefaultSensor.InternalId) { objSensorNode.Remove(); break; } } } } } // Add any Vehicle Weapons. if (objXmlVehicle["weapons"] != null) { XmlDocument objXmlWeaponDocument = XmlManager.Instance.Load("weapons.xml"); foreach (XmlNode objXmlWeapon in objXmlVehicle.SelectNodes("weapons/weapon")) { TreeNode objWeaponNode = new TreeNode(); Weapon objWeapon = new Weapon(_objCharacter); XmlNode objXmlWeaponNode = objXmlWeaponDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + objXmlWeapon["name"].InnerText + "\"]"); objWeapon.Create(objXmlWeaponNode, _objCharacter, objWeaponNode, cmsVehicleWeapon, cmsVehicleWeaponAccessory, blnCreateChildren); objWeapon.VehicleMounted = true; // Find the first Weapon Mount in the Vehicle. foreach (VehicleMod objMod in objVehicle.Mods) { if (objMod.Name.Contains("Weapon Mount") || (objMod.WeaponMountCategories != "" && objMod.WeaponMountCategories.Contains(objWeapon.Category))) { objMod.Weapons.Add(objWeapon); foreach (TreeNode objModNode in objNode.Nodes) { if (objModNode.Tag.ToString() == objMod.InternalId) { objWeaponNode.ContextMenuStrip = cmsVehicleWeapon; objModNode.Nodes.Add(objWeaponNode); objModNode.Expand(); break; } } break; } } // Look for Weapon Accessories. if (objXmlWeapon["accessories"] != null) { foreach (XmlNode objXmlAccessory in objXmlWeapon.SelectNodes("accessories/accessory")) { XmlNode objXmlAccessoryNode = objXmlWeaponDocument.SelectSingleNode("/chummer/accessories/accessory[name = \"" + objXmlAccessory["name"].InnerText + "\"]"); WeaponAccessory objMod = new WeaponAccessory(_objCharacter); TreeNode objModNode = new TreeNode(); string strMount = ""; int intRating = 0; if (objXmlAccessory["mount"] != null) strMount = objXmlAccessory["mount"].InnerText; objMod.Create(objXmlAccessoryNode, objModNode, strMount,intRating); objModNode.ContextMenuStrip = cmsWeaponAccessory; objMod.Parent = objWeapon; objWeapon.WeaponAccessories.Add(objMod); objWeaponNode.Nodes.Add(objModNode); objWeaponNode.Expand(); } } } } objNode.ContextMenuStrip = cmsVehicle; treVehicles.Nodes[0].Nodes.Add(objNode); treVehicles.Nodes[0].Expand(); Application.DoEvents(); } } pgbProgress.Visible = false; if (frmPickPACKSKit.AddAgain) AddPACKSKit(); PopulateGearList(); UpdateCharacterInfo(); }
/// <summary> /// Locate a Weapon Accessory within the character's Vehicles. /// </summary> /// <param name="strGuid">InternalId of the Weapon Accessory to find.</param> /// <param name="lstVehicles">List of Vehicles to search.</param> public WeaponAccessory FindVehicleWeaponAccessory(string strGuid, List<Vehicle> lstVehicles) { WeaponAccessory objReturn = new WeaponAccessory(_objCharacter); foreach (Vehicle objVehicle in lstVehicles) { objReturn = FindWeaponAccessory(strGuid, objVehicle.Weapons); if (objReturn != null) return objReturn; foreach (VehicleMod objMod in objVehicle.Mods) { objReturn = FindWeaponAccessory(strGuid, objMod.Weapons); if (objReturn != null) return objReturn; } } return null; }
private void TestWeapons() { Character objCharacter = new Character(); XmlDocument objXmlDocument = XmlManager.Instance.Load("weapons.xml"); pgbProgress.Minimum = 0; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlDocument.SelectNodes("/chummer/weapons/weapon").Count; pgbProgress.Maximum += objXmlDocument.SelectNodes("/chummer/accessories/accessory").Count; pgbProgress.Maximum += objXmlDocument.SelectNodes("/chummer/mods/mod").Count; // Weapons. foreach (XmlNode objXmlGear in objXmlDocument.SelectNodes("/chummer/weapons/weapon")) { pgbProgress.Value++; Application.DoEvents(); try { TreeNode objTempNode = new TreeNode(); Weapon objTemp = new Weapon(objCharacter); objTemp.Create(objXmlGear, objCharacter, objTempNode, null, null); try { int objValue = objTemp.TotalCost; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalCost\n"; } try { string objValue = objTemp.TotalAP; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalAP\n"; } try { string objValue = objTemp.TotalAvail; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalAvail\n"; } try { string objValue = objTemp.TotalRC; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalRC\n"; } try { int objValue = objTemp.TotalReach; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalReach\n"; } try { string objValue = objTemp.CalculatedAmmo(); } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed CalculatedAmmo\n"; } try { string objValue = objTemp.CalculatedConcealability(); } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed CalculatedConcealability\n"; } try { string objValue = objTemp.CalculatedDamage(); } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed CalculatedDamage\n"; } } catch { txtOutput.Text += objXmlGear["name"].InnerText + " general failure\n"; } } // Weapon Accessories. foreach (XmlNode objXmlGear in objXmlDocument.SelectNodes("/chummer/accessories/accessory")) { pgbProgress.Value++; Application.DoEvents(); try { TreeNode objTempNode = new TreeNode(); WeaponAccessory objTemp = new WeaponAccessory(objCharacter); objTemp.Create(objXmlGear, objTempNode, "", 0); try { int objValue = objTemp.TotalCost; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed CalculatedCost\n"; } try { string objValue = objTemp.TotalAvail; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalAvail\n"; } } catch { txtOutput.Text += objXmlGear["name"].InnerText + " general failure\n"; } } }
private void tsWeaponAddAccessory_Click(object sender, EventArgs e) { // Make sure a parent item is selected, then open the Select Accessory window. try { if (treWeapons.SelectedNode.Level == 0) { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectWeaponAccessory"), LanguageManager.Instance.GetString("MessageTitle_SelectWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } catch { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectWeaponAccessory"), LanguageManager.Instance.GetString("MessageTitle_SelectWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Locate the Weapon that is selected in the Tree. Weapon objWeapon = _objFunctions.FindWeapon(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons); // Accessories cannot be added to Cyberweapons. if (objWeapon.Cyberware) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CyberweaponNoAccessory"), LanguageManager.Instance.GetString("MessageTitle_CyberweaponNoAccessory"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Open the Weapons XML file and locate the selected Weapon. XmlDocument objXmlDocument = XmlManager.Instance.Load("weapons.xml"); XmlNode objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + objWeapon.Name + "\"]"); frmSelectWeaponAccessory frmPickWeaponAccessory = new frmSelectWeaponAccessory(_objCharacter, true); if (objXmlWeapon == null) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotFindWeapon"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Make sure the Weapon allows Accessories to be added to it. if (!Convert.ToBoolean(objXmlWeapon["allowaccessory"].InnerText)) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotModifyWeapon"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { XmlNodeList objXmlMountList = objXmlWeapon.SelectNodes("accessorymounts/mount"); string strMounts = ""; foreach (XmlNode objXmlMount in objXmlMountList) { bool blnFound = false; foreach (WeaponAccessory objMod in objWeapon.WeaponAccessories) { if (objMod.Mount == objXmlMount.InnerText) { blnFound = true; } } if (!blnFound) { strMounts += objXmlMount.InnerText + "/"; } } // Remove the trailing / if (strMounts != "" && strMounts.Contains('/')) strMounts = strMounts.Substring(0, strMounts.Length - 1); frmPickWeaponAccessory.AllowedMounts = strMounts; } frmPickWeaponAccessory.WeaponCost = objWeapon.Cost; frmPickWeaponAccessory.AccessoryMultiplier = objWeapon.AccessoryMultiplier; frmPickWeaponAccessory.ShowDialog(); if (frmPickWeaponAccessory.DialogResult == DialogResult.Cancel) return; // Locate the selected piece. objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/accessories/accessory[name = \"" + frmPickWeaponAccessory.SelectedAccessory + "\"]"); TreeNode objNode = new TreeNode(); WeaponAccessory objAccessory = new WeaponAccessory(_objCharacter); objAccessory.Create(objXmlWeapon, objNode, frmPickWeaponAccessory.SelectedMount, Convert.ToInt32(frmPickWeaponAccessory.SelectedRating)); objAccessory.Parent = objWeapon; if (objAccessory.Cost.StartsWith("Variable")) { int intMin = 0; int intMax = 0; string strCost = objAccessory.Cost.Replace("Variable(", string.Empty).Replace(")", string.Empty); if (strCost.Contains("-")) { string[] strValues = strCost.Split('-'); intMin = Convert.ToInt32(strValues[0]); intMax = Convert.ToInt32(strValues[1]); } else intMin = Convert.ToInt32(strCost.Replace("+", string.Empty)); if (intMin != 0 || intMax != 0) { frmSelectNumber frmPickNumber = new frmSelectNumber(); if (intMax == 0) intMax = 1000000; frmPickNumber.Minimum = intMin; frmPickNumber.Maximum = intMax; frmPickNumber.Description = LanguageManager.Instance.GetString("String_SelectVariableCost").Replace("{0}", objAccessory.DisplayNameShort); frmPickNumber.AllowCancel = false; frmPickNumber.ShowDialog(); objAccessory.Cost = frmPickNumber.SelectedValue.ToString(); } } // Check the item's Cost and make sure the character can afford it. int intOriginalCost = objWeapon.TotalCost; objWeapon.WeaponAccessories.Add(objAccessory); int intCost = objWeapon.TotalCost - intOriginalCost; // Apply a markup if applicable. if (frmPickWeaponAccessory.Markup != 0) { double dblCost = Convert.ToDouble(intCost, GlobalOptions.Instance.CultureInfo); dblCost *= 1 + (Convert.ToDouble(frmPickWeaponAccessory.Markup, GlobalOptions.Instance.CultureInfo) / 100.0); intCost = Convert.ToInt32(dblCost); } // Multiply the cost if applicable. if (objAccessory.TotalAvail.EndsWith(LanguageManager.Instance.GetString("String_AvailRestricted")) && _objOptions.MultiplyRestrictedCost) intCost *= _objOptions.RestrictedCostMultiplier; if (objAccessory.TotalAvail.EndsWith(LanguageManager.Instance.GetString("String_AvailForbidden")) && _objOptions.MultiplyForbiddenCost) intCost *= _objOptions.ForbiddenCostMultiplier; if (!frmPickWeaponAccessory.FreeCost) { if (intCost > _objCharacter.Nuyen) { objWeapon.WeaponAccessories.Remove(objAccessory); MessageBox.Show(LanguageManager.Instance.GetString("Message_NotEnoughNuyen"), LanguageManager.Instance.GetString("MessageTitle_NotEnoughNuyen"), MessageBoxButtons.OK, MessageBoxIcon.Information); if (frmPickWeaponAccessory.AddAgain) tsWeaponAddAccessory_Click(sender, e); return; } else { // Create the Expense Log Entry. ExpenseLogEntry objExpense = new ExpenseLogEntry(); objExpense.Create(intCost * -1, LanguageManager.Instance.GetString("String_ExpensePurchaseWeaponAccessory") + " " + objAccessory.DisplayNameShort, ExpenseType.Nuyen, DateTime.Now); _objCharacter.ExpenseEntries.Add(objExpense); _objCharacter.Nuyen -= intCost; ExpenseUndo objUndo = new ExpenseUndo(); objUndo.CreateNuyen(NuyenExpenseType.AddWeaponAccessory, objAccessory.InternalId); objExpense.Undo = objUndo; } } objNode.ContextMenuStrip = cmsWeaponAccessory; treWeapons.SelectedNode.Nodes.Add(objNode); treWeapons.SelectedNode.Expand(); UpdateCharacterInfo(); RefreshSelectedWeapon(); _blnIsDirty = true; UpdateWindowTitle(); if (frmPickWeaponAccessory.AddAgain) tsWeaponAddAccessory_Click(sender, e); }
/// <summary> /// Refresh the information for the currently displayed Weapon. /// </summary> public void RefreshSelectedWeapon() { lblWeaponDeviceRating.Text = ""; lblWeaponAttack.Text = ""; lblWeaponSleaze.Text = ""; lblWeaponDataProcessing.Text = ""; lblWeaponFirewall.Text = ""; bool blnClear = false; try { if (treWeapons.SelectedNode.Level == 0) blnClear = true; } catch { blnClear = true; } if (blnClear) { lblWeaponName.Text = ""; lblWeaponCategory.Text = ""; lblWeaponAvail.Text = ""; lblWeaponCost.Text = ""; lblWeaponAccuracy.Text = ""; lblWeaponConceal.Text = ""; lblWeaponDamage.Text = ""; lblWeaponRC.Text = ""; lblWeaponAP.Text = ""; lblWeaponReach.Text = ""; lblWeaponMode.Text = ""; lblWeaponAmmo.Text = ""; lblWeaponRating.Text = ""; lblWeaponSource.Text = ""; tipTooltip.SetToolTip(lblWeaponSource, null); chkWeaponAccessoryInstalled.Enabled = false; chkIncludedInWeapon.Enabled = false; chkIncludedInWeapon.Checked = false; // Hide Weapon Ranges. lblWeaponRangeShort.Text = ""; lblWeaponRangeMedium.Text = ""; lblWeaponRangeLong.Text = ""; lblWeaponRangeExtreme.Text = ""; return; } lblWeaponDicePool.Text = ""; tipTooltip.SetToolTip(lblWeaponDicePool, ""); // Locate the selected Weapon. if (treWeapons.SelectedNode.Level == 1) { Weapon objWeapon = _objFunctions.FindWeapon(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons); if (objWeapon == null) return; // If this is a Cyberweapon, grab the STR of the limb. int intUseSTR = 0; if (objWeapon.Cyberware) { foreach (Cyberware objCyberware in _objCharacter.Cyberware) { foreach (Cyberware objPlugin in objCyberware.Children) { if (objPlugin.WeaponID == objWeapon.InternalId) { intUseSTR = objCyberware.TotalStrength; break; } } } } _blnSkipRefresh = true; lblWeaponName.Text = objWeapon.DisplayNameShort; lblWeaponCategory.Text = objWeapon.DisplayCategory; string strBook = _objOptions.LanguageBookShort(objWeapon.Source); string strPage = objWeapon.Page; lblWeaponSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblWeaponSource, _objOptions.LanguageBookLong(objWeapon.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objWeapon.Page); chkWeaponAccessoryInstalled.Enabled = false; chkIncludedInWeapon.Enabled = false; chkIncludedInWeapon.Checked = false; // Show the Weapon Ranges. lblWeaponRangeShort.Text = objWeapon.RangeShort; lblWeaponRangeMedium.Text = objWeapon.RangeMedium; lblWeaponRangeLong.Text = objWeapon.RangeLong; lblWeaponRangeExtreme.Text = objWeapon.RangeExtreme; _blnSkipRefresh = false; lblWeaponAvail.Text = objWeapon.TotalAvail; lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", objWeapon.TotalCost); lblWeaponConceal.Text = objWeapon.CalculatedConcealability(); lblWeaponDamage.Text = objWeapon.CalculatedDamage(intUseSTR); lblWeaponAccuracy.Text = objWeapon.TotalAccuracy.ToString(); lblWeaponRC.Text = objWeapon.TotalRC; lblWeaponAP.Text = objWeapon.TotalAP; lblWeaponReach.Text = objWeapon.TotalReach.ToString(); lblWeaponMode.Text = objWeapon.CalculatedMode; lblWeaponAmmo.Text = objWeapon.CalculatedAmmo(); lblWeaponRating.Text = ""; lblWeaponSlots.Text = objWeapon.AccessoryMounts; lblWeaponDicePool.Text = objWeapon.DicePool; tipTooltip.SetToolTip(lblWeaponDicePool, objWeapon.DicePoolTooltip); tipTooltip.SetToolTip(lblWeaponRC, objWeapon.RCToolTip); UpdateCharacterInfo(); } else { // See if this is an Underbarrel Weapon. bool blnUnderbarrel = false; Weapon objWeapon = _objFunctions.FindWeapon(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons); if (objWeapon != null) { if (objWeapon.IsUnderbarrelWeapon) blnUnderbarrel = true; } if (blnUnderbarrel) { _blnSkipRefresh = true; lblWeaponName.Text = objWeapon.DisplayNameShort; lblWeaponCategory.Text = objWeapon.DisplayCategory; string strBook = _objOptions.LanguageBookShort(objWeapon.Source); string strPage = objWeapon.Page; lblWeaponSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblWeaponSource, _objOptions.LanguageBookLong(objWeapon.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objWeapon.Page); chkWeaponAccessoryInstalled.Enabled = true; chkWeaponAccessoryInstalled.Checked = objWeapon.Installed; chkIncludedInWeapon.Enabled = false; chkIncludedInWeapon.Checked = objWeapon.IncludedInWeapon; // Show the Weapon Ranges. lblWeaponRangeShort.Text = objWeapon.RangeShort; lblWeaponRangeMedium.Text = objWeapon.RangeMedium; lblWeaponRangeLong.Text = objWeapon.RangeLong; lblWeaponRangeExtreme.Text = objWeapon.RangeExtreme; _blnSkipRefresh = false; lblWeaponAvail.Text = objWeapon.TotalAvail; lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", objWeapon.TotalCost); lblWeaponConceal.Text = "+4"; lblWeaponDamage.Text = objWeapon.CalculatedDamage(); lblWeaponAccuracy.Text = objWeapon.TotalAccuracy.ToString(); lblWeaponRC.Text = objWeapon.TotalRC; lblWeaponAP.Text = objWeapon.TotalAP; lblWeaponReach.Text = objWeapon.TotalReach.ToString(); lblWeaponMode.Text = objWeapon.CalculatedMode; lblWeaponAmmo.Text = objWeapon.CalculatedAmmo(); lblWeaponRating.Text = ""; lblWeaponSlots.Text = objWeapon.AccessoryMounts; lblWeaponDicePool.Text = objWeapon.DicePool; tipTooltip.SetToolTip(lblWeaponDicePool, objWeapon.DicePoolTooltip); UpdateCharacterInfo(); } else { bool blnAccessory = false; Weapon objSelectedWeapon = new Weapon(_objCharacter); WeaponAccessory objSelectedAccessory = _objFunctions.FindWeaponAccessory(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons); if (objSelectedAccessory != null) { blnAccessory = true; objSelectedWeapon = objSelectedAccessory.Parent; } if (blnAccessory) { lblWeaponName.Text = objSelectedAccessory.DisplayNameShort; lblWeaponCategory.Text = LanguageManager.Instance.GetString("String_WeaponAccessory"); lblWeaponAvail.Text = objSelectedAccessory.TotalAvail; lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", Convert.ToInt32(objSelectedAccessory.TotalCost)); lblWeaponConceal.Text = objSelectedAccessory.Concealability.ToString(); lblWeaponDamage.Text = ""; lblWeaponAccuracy.Text = objSelectedAccessory.Accuracy.ToString(); lblWeaponRC.Text = objSelectedAccessory.RC; lblWeaponAP.Text = ""; lblWeaponReach.Text = ""; lblWeaponMode.Text = ""; lblWeaponAmmo.Text = ""; lblWeaponRating.Text = objSelectedAccessory.Rating.ToString(); string[] strMounts = objSelectedAccessory.Mount.Split('/'); string strMount = ""; foreach (string strCurrentMount in strMounts) { if (strCurrentMount != "") strMount += LanguageManager.Instance.GetString("String_Mount" + strCurrentMount) + "/"; } // Remove the trailing / if (strMount != "" && strMount.Contains('/')) strMount = strMount.Substring(0, strMount.Length - 1); lblWeaponSlots.Text = strMount; string strBook = _objOptions.LanguageBookShort(objSelectedAccessory.Source); string strPage = objSelectedAccessory.Page; lblWeaponSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblWeaponSource, _objOptions.BookFromCode(objSelectedAccessory.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objSelectedAccessory.Page); chkWeaponAccessoryInstalled.Enabled = true; chkWeaponAccessoryInstalled.Checked = objSelectedAccessory.Installed; chkIncludedInWeapon.Enabled = _objOptions.AllowEditPartOfBaseWeapon; chkIncludedInWeapon.Checked = objSelectedAccessory.IncludedInWeapon; UpdateCharacterInfo(); } else { // Find the selected Gear. _blnSkipRefresh = true; WeaponAccessory objAccessory = new WeaponAccessory(_objCharacter); Gear objGear = _objFunctions.FindWeaponGear(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons, out objAccessory); lblWeaponName.Text = objGear.DisplayNameShort; lblWeaponCategory.Text = objGear.DisplayCategory; lblWeaponAvail.Text = objGear.TotalAvail(true); lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", objGear.TotalCost); lblWeaponConceal.Text = ""; lblWeaponDamage.Text = ""; lblWeaponRC.Text = ""; lblWeaponAP.Text = ""; lblWeaponAccuracy.Text = ""; lblWeaponReach.Text = ""; lblWeaponMode.Text = ""; lblWeaponAmmo.Text = ""; lblWeaponSlots.Text = ""; lblWeaponRating.Text = ""; string strBook = _objOptions.LanguageBookShort(objGear.Source); string strPage = objGear.Page; lblWeaponSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblWeaponSource, _objOptions.BookFromCode(objGear.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objGear.Page); chkWeaponAccessoryInstalled.Enabled = true; chkWeaponAccessoryInstalled.Checked = objGear.Equipped; chkIncludedInWeapon.Enabled = false; chkIncludedInWeapon.Checked = false; _blnSkipRefresh = false; if (objGear.GetType() == typeof(Commlink)) { Commlink objCommlink = (Commlink)objGear; lblWeaponDeviceRating.Text = objCommlink.DeviceRating.ToString(); lblWeaponAttack.Text = objCommlink.Attack.ToString(); lblWeaponSleaze.Text = objCommlink.Sleaze.ToString(); lblWeaponDataProcessing.Text = objCommlink.DataProcessing.ToString(); lblWeaponFirewall.Text = objCommlink.Firewall.ToString(); } } // Show the Weapon Ranges. lblWeaponRangeShort.Text = objSelectedWeapon.RangeShort; lblWeaponRangeMedium.Text = objSelectedWeapon.RangeMedium; lblWeaponRangeLong.Text = objSelectedWeapon.RangeLong; lblWeaponRangeExtreme.Text = objSelectedWeapon.RangeExtreme; } } }
private void tsUndoNuyenExpense_Click(object sender, EventArgs e) { ListViewItem objItem = new ListViewItem(); try { objItem = lstNuyen.SelectedItems[0]; } catch { return; } CommonFunctions objCommon = new CommonFunctions(_objCharacter); ExpenseLogEntry objEntry = new ExpenseLogEntry(); objItem = lstNuyen.SelectedItems[0]; // Find the selected Nuyen Expense. foreach (ExpenseLogEntry objCharacterEntry in _objCharacter.ExpenseEntries) { if (objCharacterEntry.InternalId == objItem.SubItems[3].Text) { objEntry = objCharacterEntry; break; } } if (objEntry.Undo == null) { MessageBox.Show(LanguageManager.Instance.GetString("Message_UndoNoHistory"), LanguageManager.Instance.GetString("MessageTitle_NoUndoHistory"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else if (objEntry.Undo.KarmaType == KarmaExpenseType.ImproveInitiateGrade) { // Get the grade of the item we're undoing and make sure it's the highest grade int intMaxGrade = 0; foreach (InitiationGrade objGrade in _objCharacter.InitiationGrades) { intMaxGrade = Math.Max(intMaxGrade, objGrade.Grade); } foreach (InitiationGrade objGrade in _objCharacter.InitiationGrades) { if (objGrade.InternalId == objEntry.Undo.ObjectId) { if (objGrade.Grade < intMaxGrade) { MessageBox.Show(LanguageManager.Instance.GetString("Message_UndoNotHighestGrade"), LanguageManager.Instance.GetString("MessageTitle_NotHighestGrade"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } break; } } if (MessageBox.Show(LanguageManager.Instance.GetString("Message_UndoExpense"), LanguageManager.Instance.GetString("MessageTitle_UndoExpense"), MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return; } else { if (MessageBox.Show(LanguageManager.Instance.GetString("Message_UndoExpense"), LanguageManager.Instance.GetString("MessageTitle_UndoExpense"), MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No) return; } switch (objEntry.Undo.NuyenType) { case NuyenExpenseType.AddCyberware: // Locate the Cyberware that was added. int intOldPenalty = 0; int intNewPenalty = 0; foreach (Cyberware objCyberware in _objCharacter.Cyberware) { if (objCyberware.InternalId == objEntry.Undo.ObjectId) { foreach (Cyberware objChild in objCyberware.Children) { // Remove the Improvements created by child items. _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Cyberware, objChild.InternalId); _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Bioware, objChild.InternalId); } // Remove the Improvements created by the item. _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Cyberware, objCyberware.InternalId); _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Bioware, objCyberware.InternalId); // Determine the character's Essence penalty before removing the Cyberware. intOldPenalty = _objCharacter.EssencePenalty; // Remove the Cyberware. _objCharacter.Cyberware.Remove(objCyberware); // Determine the character's Essence penalty after removing the Cyberware. intNewPenalty = _objCharacter.EssencePenalty; // Restore the character's MAG/RES if they have it. //if (!_objCharacter.OverrideSpecialAttributeEssenceLoss && !_objCharacter.OverrideSpecialAttributeEssenceLoss) //{ // if (intOldPenalty != intNewPenalty) // { // if (_objCharacter.MAGEnabled) // _objCharacter.MAG.Value += (intOldPenalty - intNewPenalty); // if (_objCharacter.RESEnabled) // _objCharacter.RES.Value += (intOldPenalty - intNewPenalty); // } //} // Remove the item from the Tree. foreach (TreeNode objNode in treCyberware.Nodes[0].Nodes) { if (objNode.Tag.ToString() == objEntry.Undo.ObjectId) { objNode.Remove(); break; } } foreach (TreeNode objNode in treCyberware.Nodes[1].Nodes) { if (objNode.Tag.ToString() == objEntry.Undo.ObjectId) { objNode.Remove(); break; } } // Remove any Weapon that the Cyberware created. if (objCyberware.WeaponID != Guid.Empty.ToString()) { foreach (Weapon objWeapon in _objCharacter.Weapons) { if (objWeapon.InternalId == objCyberware.WeaponID) { _objCharacter.Weapons.Remove(objWeapon); break; } } // Remove the TreeNode for the Weapon. foreach (TreeNode objWeaponNode in treWeapons.Nodes[0].Nodes) { if (objWeaponNode.Tag.ToString() == objCyberware.WeaponID) { treWeapons.Nodes[0].Nodes.Remove(objWeaponNode); break; } } } break; } else { foreach (Cyberware objChild in objCyberware.Children) { if (objChild.InternalId == objEntry.Undo.ObjectId) { // Remove the Improvements created by the item. _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Cyberware, objChild.InternalId); objCyberware.Children.Remove(objChild); // Remove the item from the Tree. foreach (TreeNode objNode in treCyberware.Nodes[0].Nodes) { foreach (TreeNode objChildNode in objNode.Nodes) { if (objChildNode.Tag.ToString() == objEntry.Undo.ObjectId) { objChildNode.Remove(); break; } } } foreach (TreeNode objNode in treCyberware.Nodes[1].Nodes) { foreach (TreeNode objChildNode in objNode.Nodes) { if (objChildNode.Tag.ToString() == objEntry.Undo.ObjectId) { objNode.Remove(); break; } } } break; } // Remove any Weapon that the Cyberware created. if (objChild.WeaponID != Guid.Empty.ToString()) { foreach (Weapon objWeapon in _objCharacter.Weapons) { if (objWeapon.InternalId == objChild.WeaponID) { _objCharacter.Weapons.Remove(objWeapon); break; } } // Remove the TreeNode for the Weapon. foreach (TreeNode objWeaponNode in treWeapons.Nodes[0].Nodes) { if (objWeaponNode.Tag.ToString() == objChild.WeaponID) { treWeapons.Nodes[0].Nodes.Remove(objWeaponNode); break; } } } } } } break; case NuyenExpenseType.AddGear: // Locate the Gear that was added. //If the gear was already deleted manually we will not be able to locate it here Gear objGear = objCommon.FindGear(objEntry.Undo.ObjectId, _objCharacter.Gear); if (objGear == null) break; objGear.Quantity -= objEntry.Undo.Qty; if (objGear.Quantity <= 0) { if (objGear.Parent != null) objGear.Parent.Children.Remove(objGear); else _objCharacter.Gear.Remove(objGear); objCommon.DeleteGear(objGear, treWeapons, _objImprovementManager); TreeNode objNode = objCommon.FindNode(objGear.InternalId, treGear); objNode.Remove(); } else { TreeNode objNode = objCommon.FindNode(objGear.InternalId, treGear); objNode.Text = objGear.DisplayName; } _objController.PopulateFocusList(treFoci); break; case NuyenExpenseType.AddVehicle: // Locate the Vehicle that was added. foreach (Vehicle objVehicle in _objCharacter.Vehicles) { if (objVehicle.InternalId == objEntry.Undo.ObjectId) { // Remove the Vehicle. _objCharacter.Vehicles.Remove(objVehicle); foreach (TreeNode objNode in treVehicles.Nodes[0].Nodes) { if (objNode.Tag.ToString() == objEntry.Undo.ObjectId) { objNode.Remove(); break; } } break; } } break; case NuyenExpenseType.AddVehicleMod: // Locate the Vehicle Mod that was added. foreach (Vehicle objVehicle in _objCharacter.Vehicles) { foreach (VehicleMod objMod in objVehicle.Mods) { if (objMod.InternalId == objEntry.Undo.ObjectId) { // Check for Improved Sensor bonus. if (objMod.Bonus != null) { if (objMod.Bonus["improvesensor"] != null) { ChangeVehicleSensor(objVehicle, false); } } // Remove the Vehicle Mod. objVehicle.Mods.Remove(objMod); // Remove the Vehicle Mod from the tree. foreach (TreeNode objNode in treVehicles.Nodes[0].Nodes) { foreach (TreeNode objChild in objNode.Nodes) { if (objChild.Tag.ToString() == objEntry.Undo.ObjectId) { objChild.Remove(); break; } } } break; } } } break; case NuyenExpenseType.AddVehicleGear: // Locate the Gear that was added. foreach (Vehicle objVehicle in _objCharacter.Vehicles) { foreach (Gear objVehicleGear in objVehicle.Gear) { if (objVehicleGear.InternalId == objEntry.Undo.ObjectId) { // Deduct the Qty from the Gear. objVehicleGear.Quantity -= objEntry.Undo.Qty; foreach (TreeNode objVNode in treVehicles.Nodes[0].Nodes) { foreach (TreeNode objNode in objVNode.Nodes) { if (objNode.Tag.ToString() == objEntry.Undo.ObjectId) { objNode.Text = objVehicleGear.DisplayName; // Remove the Node if its Qty has been reduced to 0. if (objVehicleGear.Quantity <= 0) objNode.Remove(); break; } } } // Remove the Gear if its Qty has been reduced to 0. if (objVehicleGear.Quantity <= 0) { objVehicle.Gear.Remove(objVehicleGear); } break; } else { // Look in child items. foreach (Gear objChild in objVehicleGear.Children) { if (objChild.InternalId == objEntry.Undo.ObjectId) { // Deduct the Qty from the Gear. objChild.Quantity -= objEntry.Undo.Qty; foreach (TreeNode objVNode in treVehicles.Nodes[0].Nodes) { foreach (TreeNode objNode in objVNode.Nodes) { foreach (TreeNode objChildNode in objNode.Nodes) { if (objChildNode.Tag.ToString() == objEntry.Undo.ObjectId) { objChildNode.Text = objChild.DisplayName; // Remove the Node if its Qty has been reduced to 0. if (objChild.Quantity <= 0) { objChildNode.Remove(); } break; } } } } // Remove the Gear if its Qty has been reduce to 0. if (objChild.Quantity <= 0) { objVehicleGear.Children.Remove(objChild); } break; } else { foreach (Gear objSubChild in objChild.Children) { if (objSubChild.InternalId == objEntry.Undo.ObjectId) { // Deduct the Qty from the Gear. objSubChild.Quantity -= objEntry.Undo.Qty; foreach (TreeNode objVNode in treVehicles.Nodes[0].Nodes) { foreach (TreeNode objNode in objVNode.Nodes) { foreach (TreeNode objChildNode in objNode.Nodes) { foreach (TreeNode objSubChildNode in objChildNode.Nodes) { if (objSubChildNode.Tag.ToString() == objEntry.Undo.ObjectId) { objSubChildNode.Text = objSubChild.DisplayName; // Remove the Node if its Qty has been reduced to 0. if (objSubChild.Quantity <= 0) { objSubChildNode.Remove(); } break; } } } } } // Remove the Gear if its Qty has been reduce to 0. if (objSubChild.Quantity <= 0) { objChild.Children.Remove(objSubChild); } break; } } } } } } } break; case NuyenExpenseType.AddVehicleWeapon: // Locate the Weapon that was added. foreach (Vehicle objVehicle in _objCharacter.Vehicles) { foreach (VehicleMod objMod in objVehicle.Mods) { foreach (Weapon objWeapon in objMod.Weapons) { if (objWeapon.InternalId == objEntry.Undo.ObjectId) { // Remove the Weapon. objMod.Weapons.Remove(objWeapon); // Remove the Weapon from the Tree. foreach (TreeNode objVNode in treVehicles.Nodes[0].Nodes) { foreach (TreeNode objNode in objVNode.Nodes) { foreach (TreeNode objChild in objNode.Nodes) { if (objChild.Tag.ToString() == objEntry.Undo.ObjectId) { objChild.Remove(); break; } } } } break; } else { if (objWeapon.UnderbarrelWeapons.Count > 0) { foreach (Weapon objUnderbarrelWeapon in objWeapon.UnderbarrelWeapons) { if (objUnderbarrelWeapon.InternalId == objEntry.Undo.ObjectId) { // Remove the Underbarrel Weapon. objWeapon.UnderbarrelWeapons.Remove(objUnderbarrelWeapon); // Remove the Underbarrel Weapon from the Tree. foreach (TreeNode objVNode in treVehicles.Nodes[0].Nodes) { foreach (TreeNode objNode in objVNode.Nodes) { foreach (TreeNode objChild in objNode.Nodes) { foreach (TreeNode objSubChild in objChild.Nodes) { if (objSubChild.Tag.ToString() == objEntry.Undo.ObjectId) { objSubChild.Remove(); break; } } } } } break; } } } } } } } break; case NuyenExpenseType.AddVehicleWeaponAccessory: // Locate the Weapon Accessory that was added. foreach (Vehicle objVehicle in _objCharacter.Vehicles) { foreach (VehicleMod objMod in objVehicle.Mods) { foreach (Weapon objWeapon in objMod.Weapons) { foreach (WeaponAccessory objAccessory in objWeapon.WeaponAccessories) { if (objAccessory.InternalId == objEntry.Undo.ObjectId) { // Remove the Weapon Accessory. objWeapon.WeaponAccessories.Remove(objAccessory); // Remove the Weapon Accessory from the Tree. foreach (TreeNode objVNode in treVehicles.Nodes[0].Nodes) { foreach (TreeNode objNode in objVNode.Nodes) { foreach (TreeNode objWNode in objNode.Nodes) { foreach (TreeNode objChild in objWNode.Nodes) { if (objChild.Tag.ToString() == objEntry.Undo.ObjectId) { objChild.Remove(); break; } } } } } break; } } if (objWeapon.UnderbarrelWeapons.Count > 0) { foreach (Weapon objUnderbarrelWeapon in objWeapon.UnderbarrelWeapons) { foreach (WeaponAccessory objAccessory in objUnderbarrelWeapon.WeaponAccessories) { if (objAccessory.InternalId == objEntry.Undo.ObjectId) { // Remove the Weapon Accessory. objUnderbarrelWeapon.WeaponAccessories.Remove(objAccessory); // Remove the Weapon Accessory from the Tree. foreach (TreeNode objVNode in treVehicles.Nodes[0].Nodes) { foreach (TreeNode objNode in objVNode.Nodes) { foreach (TreeNode objWNode in objNode.Nodes) { foreach (TreeNode objChild in objWNode.Nodes) { foreach (TreeNode objSubChild in objChild.Nodes) { if (objSubChild.Tag.ToString() == objEntry.Undo.ObjectId) { objSubChild.Remove(); break; } } } } } } break; } } } } } } } break; case NuyenExpenseType.AddArmor: // Locate the Armor that was added. Armor objArmor = objCommon.FindArmor(objEntry.Undo.ObjectId, _objCharacter.Armor); if (objArmor != null) { // Remove the Improvements for any child items. foreach (ArmorMod objMod in objArmor.ArmorMods) _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.ArmorMod, objMod.InternalId); // Remove the Improvements for the Armor. _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Armor, objArmor.InternalId); // Remove the Armor from the character. _objCharacter.Armor.Remove(objArmor); // Remove the Armor from the Tree. TreeNode objArmorNode = objCommon.FindNode(objEntry.Undo.ObjectId, treArmor); objArmorNode.Remove(); } break; case NuyenExpenseType.AddArmorMod: // Locate the Armor Mod that was added. foreach (Armor objFoundArmor in _objCharacter.Armor) { foreach (ArmorMod objMod in objFoundArmor.ArmorMods) { if (objMod.InternalId == objEntry.Undo.ObjectId) { // Remove the Improtements for the Armor Mod. _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.ArmorMod, objMod.InternalId); // Remove the Armor Mod from the Armor. objFoundArmor.ArmorMods.Remove(objMod); // Remove the Cyberweapon created by the Mod if applicable. if (objMod.WeaponID != Guid.Empty.ToString()) { // Remove the Weapon from the TreeView. TreeNode objRemoveNode = new TreeNode(); foreach (TreeNode objWeaponNode in treWeapons.Nodes[0].Nodes) { if (objWeaponNode.Tag.ToString() == objMod.WeaponID) objRemoveNode = objWeaponNode; } treWeapons.Nodes.Remove(objRemoveNode); // Remove the Weapon from the Character. Weapon objRemoveWeapon = new Weapon(_objCharacter); foreach (Weapon objWeapon in _objCharacter.Weapons) { if (objWeapon.InternalId == objMod.WeaponID) objRemoveWeapon = objWeapon; } _objCharacter.Weapons.Remove(objRemoveWeapon); } // Remove the Armor Mod from the Tree. TreeNode objNode = objCommon.FindNode(objMod.InternalId, treArmor.Nodes[0]); objNode.Remove(); break; } } } break; case NuyenExpenseType.AddWeapon: // Locate the Weapon that was added. foreach (Weapon objWeapon in _objCharacter.Weapons) { if (objWeapon.InternalId == objEntry.Undo.ObjectId) { // Remove the Weapn from the character. _objCharacter.Weapons.Remove(objWeapon); // Remove the Weapon from the Tree. foreach (TreeNode objNode in treWeapons.Nodes[0].Nodes) { if (objNode.Tag.ToString() == objEntry.Undo.ObjectId) { objNode.Remove(); break; } } break; } } break; case NuyenExpenseType.AddWeaponAccessory: // Locate the Weapon Accessory that was added. foreach (Weapon objWeapon in _objCharacter.Weapons) { foreach (WeaponAccessory objAccessory in objWeapon.WeaponAccessories) { if (objAccessory.InternalId == objEntry.Undo.ObjectId) { // Remove the Weapon Accessory. objWeapon.WeaponAccessories.Remove(objAccessory); // Remove the Weapon Accessory from the tree. foreach (TreeNode objNode in treWeapons.Nodes[0].Nodes) { foreach (TreeNode objChild in objNode.Nodes) { if (objChild.Tag.ToString() == objEntry.Undo.ObjectId) { objChild.Remove(); break; } } } break; } } } break; case NuyenExpenseType.IncreaseLifestyle: // Locate the Lifestyle that was increased. foreach (Lifestyle objLifestyle in _objCharacter.Lifestyles) { if (objLifestyle.Name == objEntry.Undo.ObjectId) { objLifestyle.Months--; RefreshSelectedLifestyle(); break; } } break; case NuyenExpenseType.AddArmorGear: // Locate the Armor Gear that was added. foreach (Armor objFoundArmor in _objCharacter.Armor) { foreach (Gear objArmorGear in objFoundArmor.Gear) { if (objArmorGear.InternalId == objEntry.Undo.ObjectId) { // Deduct the Qty from the Gear. objArmorGear.Quantity -= objEntry.Undo.Qty; foreach (TreeNode objArmorNode in treArmor.Nodes[0].Nodes) { foreach (TreeNode objNode in objArmorNode.Nodes) { if (objNode.Tag.ToString() == objEntry.Undo.ObjectId) { objNode.Text = objArmorGear.DisplayName; // Remove the Node if its Qty has been reduced to 0. if (objArmorGear.Quantity <= 0) objNode.Remove(); break; } } } // Remove the Gear if its Qty has been reduced to 0. if (objArmorGear.Quantity <= 0) { // Remove any Improvements created by the Gear. _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Gear, objArmorGear.InternalId); objFoundArmor.Gear.Remove(objArmorGear); // Remove any Weapons created by the Gear. foreach (Weapon objWeapon in _objCharacter.Weapons) { if (objWeapon.InternalId == objArmorGear.WeaponID) { _objCharacter.Weapons.Remove(objWeapon); foreach (TreeNode objWeaponNode in treWeapons.Nodes[0].Nodes) { if (objWeaponNode.Tag.ToString() == objArmorGear.WeaponID) { objWeaponNode.Remove(); break; } } break; } } } break; } else { // Look in child items. foreach (Gear objChild in objArmorGear.Children) { if (objChild.InternalId == objEntry.Undo.ObjectId) { // Deduct the Qty from the Gear. objChild.Quantity -= objEntry.Undo.Qty; foreach (TreeNode objArmorNode in treArmor.Nodes[0].Nodes) { foreach (TreeNode objNode in objArmorNode.Nodes) { foreach (TreeNode objChildNode in objNode.Nodes) { if (objChildNode.Tag.ToString() == objEntry.Undo.ObjectId) { objChildNode.Text = objChild.DisplayName; // Remove the Node if its Qty has been reduced to 0. if (objChild.Quantity <= 0) { objChildNode.Remove(); // Remove any Weapons created by the Gear. foreach (Weapon objWeapon in _objCharacter.Weapons) { if (objWeapon.InternalId == objChild.WeaponID) { _objCharacter.Weapons.Remove(objWeapon); foreach (TreeNode objWeaponNode in treWeapons.Nodes[0].Nodes) { if (objWeaponNode.Tag.ToString() == objChild.WeaponID) { objWeaponNode.Remove(); break; } } break; } } } break; } } } } // Remove the Gear if its Qty has been reduce to 0. if (objChild.Quantity <= 0) { // Remove any Improvements created by the Gear. _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Gear, objChild.InternalId); objArmorGear.Children.Remove(objChild); } break; } else { foreach (Gear objSubChild in objChild.Children) { if (objSubChild.InternalId == objEntry.Undo.ObjectId) { // Deduct the Qty from the Gear. objSubChild.Quantity -= objEntry.Undo.Qty; foreach (TreeNode objArmorNode in treArmor.Nodes[0].Nodes) { foreach (TreeNode objNode in objArmorNode.Nodes) { foreach (TreeNode objChildNode in objNode.Nodes) { foreach (TreeNode objSubChildNode in objChildNode.Nodes) { if (objSubChildNode.Tag.ToString() == objEntry.Undo.ObjectId) { objSubChildNode.Text = objSubChild.DisplayName; // Remove the Node if its Qty has been reduced to 0. if (objSubChild.Quantity <= 0) { objSubChildNode.Remove(); // Remove any Weapons created by the Gear. foreach (Weapon objWeapon in _objCharacter.Weapons) { if (objWeapon.InternalId == objSubChild.WeaponID) { _objCharacter.Weapons.Remove(objWeapon); foreach (TreeNode objWeaponNode in treWeapons.Nodes[0].Nodes) { if (objWeaponNode.Tag.ToString() == objSubChild.WeaponID) { objWeaponNode.Remove(); break; } } break; } } } break; } } } } } // Remove the Gear if its Qty has been reduce to 0. if (objSubChild.Quantity <= 0) { // Remove any Improvements created by the Gear. _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Gear, objSubChild.InternalId); objChild.Children.Remove(objSubChild); } break; } } } } } } } break; case NuyenExpenseType.AddVehicleModCyberware: // Locate the Cyberware that was added. foreach (Vehicle objVehicle in _objCharacter.Vehicles) { foreach (VehicleMod objMod in objVehicle.Mods) { foreach (Cyberware objCyberware in objMod.Cyberware) { if (objCyberware.InternalId == objEntry.Undo.ObjectId) { // Remove the Cyberware. objMod.Cyberware.Remove(objCyberware); // Remove the Cyberware from the Tree. foreach (TreeNode objVNode in treVehicles.Nodes[0].Nodes) { foreach (TreeNode objNode in objVNode.Nodes) { foreach (TreeNode objChild in objNode.Nodes) { if (objChild.Tag.ToString() == objEntry.Undo.ObjectId) { objChild.Remove(); break; } } } } break; } } } } break; case NuyenExpenseType.AddCyberwareGear: // Locate the Gear that was added. Cyberware objFoundCyberware = new Cyberware(_objCharacter); Gear objFoundGear = _objFunctions.FindCyberwareGear(objEntry.Undo.ObjectId, _objCharacter.Cyberware, out objFoundCyberware); _objFunctions.DeleteGear(objFoundGear, treWeapons, _objImprovementManager); if (objFoundGear.Parent == null) objFoundCyberware.Gear.Remove(objFoundGear); else objFoundGear.Parent.Children.Remove(objFoundGear); TreeNode objFoundNode = _objFunctions.FindNode(objFoundGear.InternalId, treCyberware); objFoundNode.Remove(); break; case NuyenExpenseType.AddWeaponGear: // Locate the Gear that was added. WeaponAccessory objFoundAccessory = new WeaponAccessory(_objCharacter); Gear objFoundAccGear = _objFunctions.FindWeaponGear(objEntry.Undo.ObjectId, _objCharacter.Weapons, out objFoundAccessory); _objFunctions.DeleteGear(objFoundAccGear, treWeapons, _objImprovementManager); if (objFoundAccGear.Parent == null) objFoundAccessory.Gear.Remove(objFoundAccGear); else objFoundAccGear.Parent.Children.Remove(objFoundAccGear); TreeNode objFoundAccNode = _objFunctions.FindNode(objFoundAccGear.InternalId, treWeapons); objFoundAccNode.Remove(); break; case NuyenExpenseType.ManualAdd: case NuyenExpenseType.ManualSubtract: break; } // Refund the Nuyen amount and remove the Expense Entry. _objCharacter.Nuyen -= objEntry.Amount; _objCharacter.ExpenseEntries.Remove(objEntry); UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); }
private void tsVehicleAddWeaponAccessory_Click(object sender, EventArgs e) { // Attempt to locate the selected VehicleWeapon. bool blnWeaponFound = false; Vehicle objFoundVehicle = new Vehicle(_objCharacter); Weapon objWeapon = _objFunctions.FindVehicleWeapon(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (objWeapon != null) blnWeaponFound = true; if (!blnWeaponFound) { MessageBox.Show(LanguageManager.Instance.GetString("Message_VehicleWeaponAccessories"), LanguageManager.Instance.GetString("MessageTitle_VehicleWeaponAccessories"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Open the Weapons XML file and locate the selected Weapon. XmlDocument objXmlDocument = XmlManager.Instance.Load("weapons.xml"); XmlNode objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + treVehicles.SelectedNode.Text + "\"]"); frmSelectWeaponAccessory frmPickWeaponAccessory = new frmSelectWeaponAccessory(_objCharacter, true); if (objXmlWeapon == null) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotModifyWeapon"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Make sure the Weapon allows Accessories to be added to it. if (!Convert.ToBoolean(objXmlWeapon["allowaccessory"].InnerText)) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotModifyWeapon"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { XmlNodeList objXmlMountList = objXmlWeapon.SelectNodes("accessorymounts/mount"); string strMounts = ""; foreach (XmlNode objXmlMount in objXmlMountList) { // Run through the Weapon's currenct Accessories and filter out any used up Mount points. bool blnFound = false; foreach (WeaponAccessory objCurrentAccessory in objWeapon.WeaponAccessories) { if (objCurrentAccessory.Mount == objXmlMount.InnerText) blnFound = true; } if (!blnFound) strMounts += objXmlMount.InnerText + "/"; } frmPickWeaponAccessory.AllowedMounts = strMounts; } frmPickWeaponAccessory.WeaponCost = objWeapon.Cost; frmPickWeaponAccessory.AccessoryMultiplier = objWeapon.AccessoryMultiplier; frmPickWeaponAccessory.ShowDialog(); if (frmPickWeaponAccessory.DialogResult == DialogResult.Cancel) return; // Locate the selected piece. objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/accessories/accessory[name = \"" + frmPickWeaponAccessory.SelectedAccessory + "\"]"); TreeNode objNode = new TreeNode(); WeaponAccessory objAccessory = new WeaponAccessory(_objCharacter); objAccessory.Create(objXmlWeapon, objNode, frmPickWeaponAccessory.SelectedMount, Convert.ToInt32(frmPickWeaponAccessory.SelectedRating)); objAccessory.Parent = objWeapon; // Check the item's Cost and make sure the character can afford it. int intOriginalCost = objWeapon.TotalCost; objWeapon.WeaponAccessories.Add(objAccessory); int intCost = objWeapon.TotalCost - intOriginalCost; // Apply a markup if applicable. if (frmPickWeaponAccessory.Markup != 0) { double dblCost = Convert.ToDouble(intCost, GlobalOptions.Instance.CultureInfo); dblCost *= 1 + (Convert.ToDouble(frmPickWeaponAccessory.Markup, GlobalOptions.Instance.CultureInfo) / 100.0); intCost = Convert.ToInt32(dblCost); } // Multiply the cost if applicable. if (objAccessory.TotalAvail.EndsWith(LanguageManager.Instance.GetString("String_AvailRestricted")) && _objOptions.MultiplyRestrictedCost) intCost *= _objOptions.RestrictedCostMultiplier; if (objAccessory.TotalAvail.EndsWith(LanguageManager.Instance.GetString("String_AvailForbidden")) && _objOptions.MultiplyForbiddenCost) intCost *= _objOptions.ForbiddenCostMultiplier; if (!frmPickWeaponAccessory.FreeCost) { if (intCost > _objCharacter.Nuyen) { objWeapon.WeaponAccessories.Remove(objAccessory); MessageBox.Show(LanguageManager.Instance.GetString("Message_NotEnoughNuyen"), LanguageManager.Instance.GetString("MessageTitle_NotEnoughNuyen"), MessageBoxButtons.OK, MessageBoxIcon.Information); if (frmPickWeaponAccessory.AddAgain) tsVehicleAddWeaponAccessory_Click(sender, e); return; } else { // Create the Expense Log Entry. ExpenseLogEntry objExpense = new ExpenseLogEntry(); objExpense.Create(intCost * -1, LanguageManager.Instance.GetString("String_ExpensePurchaseVehicleWeaponAccessory") + " " + objAccessory.DisplayNameShort, ExpenseType.Nuyen, DateTime.Now); _objCharacter.ExpenseEntries.Add(objExpense); _objCharacter.Nuyen -= intCost; ExpenseUndo objUndo = new ExpenseUndo(); objUndo.CreateNuyen(NuyenExpenseType.AddVehicleWeaponAccessory, objAccessory.InternalId); objExpense.Undo = objUndo; } } objNode.ContextMenuStrip = cmsVehicleWeaponAccessory; treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); if (frmPickWeaponAccessory.AddAgain) tsVehicleAddWeaponAccessory_Click(sender, e); UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); }
/// <summary> /// Refresh the information for the currently displayed Weapon. /// </summary> public void RefreshSelectedWeapon() { lblWeaponDeviceRating.Text = ""; lblWeaponFirewallLabel.Visible = false; lblWeaponDataProcessingLabel.Visible = false; lblWeaponSleazeLabel.Visible = false; lblWeaponAttackLabel.Visible = false; cboCyberwareGearAttack.Visible = false; cboCyberwareGearDataProcessing.Visible = false; cboCyberwareGearFirewall.Visible = false; cboCyberwareGearSleaze.Visible = false; bool blnClear = false; try { if (treWeapons.SelectedNode.Level == 0) blnClear = true; } catch { blnClear = true; } if (blnClear) { lblWeaponName.Text = ""; lblWeaponCategory.Text = ""; lblWeaponAvail.Text = ""; lblWeaponCost.Text = ""; lblWeaponConceal.Text = ""; lblWeaponAccuracy.Text = ""; lblWeaponDamage.Text = ""; lblWeaponRC.Text = ""; lblWeaponAP.Text = ""; lblWeaponReach.Text = ""; lblWeaponMode.Text = ""; lblWeaponAmmo.Text = ""; lblWeaponRating.Text = ""; lblWeaponSource.Text = ""; cboWeaponAmmo.Enabled = false; tipTooltip.SetToolTip(lblWeaponSource, null); chkWeaponAccessoryInstalled.Enabled = false; chkIncludedInWeapon.Enabled = false; chkIncludedInWeapon.Checked = false; // Disable the fire button. cmdFireWeapon.Enabled = false; cmdReloadWeapon.Enabled = false; cmdWeaponBuyAmmo.Enabled = false; cboWeaponAmmo.Enabled = false; // Hide Weapon Ranges. lblWeaponRangeShort.Text = ""; lblWeaponRangeMedium.Text = ""; lblWeaponRangeLong.Text = ""; lblWeaponRangeExtreme.Text = ""; return; } lblWeaponDicePool.Text = ""; tipTooltip.SetToolTip(lblWeaponDicePool, ""); cmdWeaponMoveToVehicle.Enabled = false; // Locate the selected Weapon. if (treWeapons.SelectedNode.Level == 1) { Weapon objWeapon = _objFunctions.FindWeapon(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons); if (objWeapon == null) return; _blnSkipRefresh = true; lblWeaponName.Text = objWeapon.DisplayNameShort; lblWeaponCategory.Text = objWeapon.DisplayCategory; string strBook = _objOptions.LanguageBookShort(objWeapon.Source); string strPage = objWeapon.Page; lblWeaponSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblWeaponSource, _objOptions.LanguageBookLong(objWeapon.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objWeapon.Page); chkWeaponAccessoryInstalled.Enabled = false; chkIncludedInWeapon.Enabled = false; chkIncludedInWeapon.Checked = false; // Do not allow Cyberware of Gear Weapons to be moved. if (!objWeapon.Cyberware && objWeapon.Category != "Gear") { if (_objCharacter.Vehicles.Count > 0) cmdWeaponMoveToVehicle.Enabled = true; else cmdWeaponMoveToVehicle.Enabled = false; } // Enable the fire button if the Weapon is Ranged. if (objWeapon.WeaponType == "Ranged" || (objWeapon.WeaponType == "Melee" && objWeapon.Ammo != "0")) { cmdFireWeapon.Enabled = true; cmdReloadWeapon.Enabled = true; cmdWeaponBuyAmmo.Enabled = true; lblWeaponAmmoRemaining.Text = objWeapon.AmmoRemaining.ToString(); //lblWeaponAmmoType.Text = "External Source"; cmsAmmoSingleShot.Enabled = objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeSingleShot")) || objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeSemiAutomatic")); cmsAmmoShortBurst.Enabled = objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeBurstFire")) || objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeFullAutomatic")); cmsAmmoLongBurst.Enabled = objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeFullAutomatic")); cmsAmmoFullBurst.Enabled = objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeFullAutomatic")); cmsAmmoSuppressiveFire.Enabled = objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeFullAutomatic")); // Melee Weapons with Ammo are considered to be Single Shot. if (objWeapon.WeaponType == "Melee" && objWeapon.Ammo != "0") cmsAmmoSingleShot.Enabled = true; if (cmsAmmoFullBurst.Enabled) cmsAmmoFullBurst.Text = LanguageManager.Instance.GetString("String_FullBurst").Replace("{0}", objWeapon.FullBurst.ToString()); if (cmsAmmoSuppressiveFire.Enabled) cmsAmmoSuppressiveFire.Text = LanguageManager.Instance.GetString("String_SuppressiveFire").Replace("{0}", objWeapon.Suppressive.ToString()); List<ListItem> lstAmmo = new List<ListItem>(); int intCurrentSlot = objWeapon.ActiveAmmoSlot; for (int i = 1; i <= objWeapon.AmmoSlots; i++) { Gear objGear = new Gear(_objCharacter); ListItem objAmmo = new ListItem(); objWeapon.ActiveAmmoSlot = i; objGear = _objFunctions.FindGear(objWeapon.AmmoLoaded, _objCharacter.Gear); objAmmo.Value = i.ToString(); string strPlugins = ""; if (objGear != null) { foreach (Gear objChild in objGear.Children) { strPlugins += objChild.DisplayNameShort + ", "; } } // Remove the trailing comma. if (strPlugins != "") strPlugins = strPlugins.Substring(0, strPlugins.Length - 2); if (objGear == null) { if (objWeapon.AmmoRemaining == 0) objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + LanguageManager.Instance.GetString("String_Empty"); else objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + LanguageManager.Instance.GetString("String_ExternalSource"); } else objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + objGear.DisplayNameShort; if (strPlugins != "") objAmmo.Name += " [" + strPlugins + "]"; lstAmmo.Add(objAmmo); } _blnSkipRefresh = true; objWeapon.ActiveAmmoSlot = intCurrentSlot; cboWeaponAmmo.Enabled = true; cboWeaponAmmo.ValueMember = "Value"; cboWeaponAmmo.DisplayMember = "Name"; cboWeaponAmmo.DataSource = lstAmmo; cboWeaponAmmo.SelectedValue = objWeapon.ActiveAmmoSlot.ToString(); if (cboWeaponAmmo.SelectedIndex == -1) cboWeaponAmmo.SelectedIndex = 0; _blnSkipRefresh = false; } else { cmdFireWeapon.Enabled = false; cmdReloadWeapon.Enabled = false; cmdWeaponBuyAmmo.Enabled = false; lblWeaponAmmoRemaining.Text = ""; cboWeaponAmmo.Enabled = false; } // If this is a Cyberweapon, grab the STR of the limb. int intUseSTR = 0; if (objWeapon.Cyberware) { foreach (Cyberware objCyberware in _objCharacter.Cyberware) { foreach (Cyberware objPlugin in objCyberware.Children) { if (objPlugin.WeaponID == objWeapon.InternalId) { intUseSTR = objCyberware.TotalStrength; break; } } } } // Show the Weapon Ranges. lblWeaponRangeShort.Text = objWeapon.RangeShort; lblWeaponRangeMedium.Text = objWeapon.RangeMedium; lblWeaponRangeLong.Text = objWeapon.RangeLong; lblWeaponRangeExtreme.Text = objWeapon.RangeExtreme; _blnSkipRefresh = false; lblWeaponAvail.Text = objWeapon.TotalAvail; lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", objWeapon.TotalCost); lblWeaponConceal.Text = objWeapon.CalculatedConcealability(); lblWeaponDamage.Text = objWeapon.CalculatedDamage(intUseSTR); lblWeaponAccuracy.Text = objWeapon.TotalAccuracy.ToString(); lblWeaponRC.Text = objWeapon.TotalRC; lblWeaponAP.Text = objWeapon.TotalAP; lblWeaponReach.Text = objWeapon.TotalReach.ToString(); lblWeaponMode.Text = objWeapon.CalculatedMode; lblWeaponAmmo.Text = objWeapon.CalculatedAmmo(); lblWeaponRating.Text = ""; lblWeaponSlots.Text = objWeapon.AccessoryMounts; lblWeaponDicePool.Text = objWeapon.DicePool; tipTooltip.SetToolTip(lblWeaponDicePool, objWeapon.DicePoolTooltip); tipTooltip.SetToolTip(lblWeaponRC, objWeapon.RCToolTip); UpdateCharacterInfo(); } else { // See if this is an Underbarrel Weapon. bool blnUnderbarrel = false; Weapon objWeapon = new Weapon(_objCharacter); foreach (Weapon objCharacterWeapon in _objCharacter.Weapons) { if (objCharacterWeapon.UnderbarrelWeapons.Count > 0) { foreach (Weapon objUnderbarrelWeapon in objCharacterWeapon.UnderbarrelWeapons) { if (objUnderbarrelWeapon.InternalId == treWeapons.SelectedNode.Tag.ToString()) { objWeapon = objUnderbarrelWeapon; blnUnderbarrel = true; break; } } } } if (blnUnderbarrel) { cmdFireWeapon.Enabled = true; cmdReloadWeapon.Enabled = true; cmdWeaponBuyAmmo.Enabled = true; lblWeaponAvail.Text = objWeapon.TotalAvail; lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", objWeapon.TotalCost); lblWeaponConceal.Text = "+4"; lblWeaponDamage.Text = objWeapon.CalculatedDamage(); lblWeaponRC.Text = objWeapon.TotalRC; lblWeaponAccuracy.Text = objWeapon.TotalAccuracy.ToString(); lblWeaponAP.Text = objWeapon.TotalAP; lblWeaponReach.Text = objWeapon.TotalReach.ToString(); lblWeaponMode.Text = objWeapon.CalculatedMode; lblWeaponAmmo.Text = objWeapon.CalculatedAmmo(); lblWeaponRating.Text = ""; lblWeaponSlots.Text = objWeapon.AccessoryMounts; lblWeaponDicePool.Text = objWeapon.DicePool; tipTooltip.SetToolTip(lblWeaponDicePool, objWeapon.DicePoolTooltip); UpdateCharacterInfo(); cmsAmmoSingleShot.Enabled = objWeapon.AllowMode("SS") || objWeapon.AllowMode("SA"); cmsAmmoShortBurst.Enabled = objWeapon.AllowMode("BF") || objWeapon.AllowMode("FA"); cmsAmmoLongBurst.Enabled = objWeapon.AllowMode("FA"); cmsAmmoFullBurst.Enabled = objWeapon.AllowMode("FA"); cmsAmmoSuppressiveFire.Enabled = objWeapon.AllowMode("FA"); // Melee Weapons with Ammo are considered to be Single Shot. if (objWeapon.WeaponType == "Melee" && objWeapon.Ammo != "0") cmsAmmoSingleShot.Enabled = true; if (cmsAmmoFullBurst.Enabled) cmsAmmoFullBurst.Text = LanguageManager.Instance.GetString("String_FullBurst").Replace("{0}", objWeapon.FullBurst.ToString()); if (cmsAmmoSuppressiveFire.Enabled) cmsAmmoSuppressiveFire.Text = LanguageManager.Instance.GetString("String_SuppressiveFire").Replace("{0}", objWeapon.Suppressive.ToString()); List<ListItem> lstAmmo = new List<ListItem>(); int intCurrentSlot = objWeapon.ActiveAmmoSlot; for (int i = 1; i <= objWeapon.AmmoSlots; i++) { Gear objGear = new Gear(_objCharacter); ListItem objAmmo = new ListItem(); objWeapon.ActiveAmmoSlot = i; objGear = _objFunctions.FindGear(objWeapon.AmmoLoaded, _objCharacter.Gear); objAmmo.Value = i.ToString(); string strPlugins = ""; if (objGear != null) { foreach (Gear objChild in objGear.Children) { strPlugins += objChild.DisplayNameShort + ", "; } } // Remove the trailing comma. if (strPlugins != string.Empty) strPlugins = strPlugins.Substring(0, strPlugins.Length - 2); if (objGear == null) objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + LanguageManager.Instance.GetString("String_Empty"); else objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + objGear.DisplayNameShort; if (strPlugins != "") objAmmo.Name += " [" + strPlugins + "]"; lstAmmo.Add(objAmmo); } _blnSkipRefresh = true; chkWeaponAccessoryInstalled.Enabled = true; chkWeaponAccessoryInstalled.Checked = objWeapon.Installed; chkIncludedInWeapon.Enabled = false; chkIncludedInWeapon.Checked = objWeapon.IncludedInWeapon; objWeapon.ActiveAmmoSlot = intCurrentSlot; cboWeaponAmmo.Enabled = true; cboWeaponAmmo.ValueMember = "Value"; cboWeaponAmmo.DisplayMember = "Name"; cboWeaponAmmo.DataSource = lstAmmo; cboWeaponAmmo.SelectedValue = objWeapon.ActiveAmmoSlot.ToString(); if (cboWeaponAmmo.SelectedIndex == -1) cboWeaponAmmo.SelectedIndex = 0; // Show the Weapon Ranges. lblWeaponAmmoRemaining.Text = objWeapon.AmmoRemaining.ToString(); lblWeaponRangeShort.Text = objWeapon.RangeShort; lblWeaponRangeMedium.Text = objWeapon.RangeMedium; lblWeaponRangeLong.Text = objWeapon.RangeLong; lblWeaponRangeExtreme.Text = objWeapon.RangeExtreme; _blnSkipRefresh = false; } else { cmdFireWeapon.Enabled = false; cmdReloadWeapon.Enabled = false; cmdWeaponBuyAmmo.Enabled = false; cboWeaponAmmo.Enabled = false; bool blnAccessory = false; Weapon objSelectedWeapon = new Weapon(_objCharacter); WeaponAccessory objSelectedAccessory = _objFunctions.FindWeaponAccessory(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons); if (objSelectedAccessory != null) { blnAccessory = true; objSelectedWeapon = objSelectedAccessory.Parent; } if (blnAccessory) { lblWeaponName.Text = objSelectedAccessory.DisplayNameShort; lblWeaponCategory.Text = LanguageManager.Instance.GetString("String_WeaponAccessory"); lblWeaponAvail.Text = objSelectedAccessory.TotalAvail; lblWeaponAccuracy.Text = objWeapon.TotalAccuracy.ToString(); lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", Convert.ToInt32(objSelectedAccessory.TotalCost)); lblWeaponConceal.Text = objSelectedAccessory.Concealability.ToString(); lblWeaponDamage.Text = ""; lblWeaponRC.Text = objSelectedAccessory.RC; lblWeaponAP.Text = ""; lblWeaponReach.Text = ""; lblWeaponMode.Text = ""; lblWeaponAmmo.Text = ""; lblWeaponRating.Text = objSelectedAccessory.Rating.ToString(); string[] strMounts = objSelectedAccessory.Mount.Split('/'); string strMount = ""; foreach (string strCurrentMount in strMounts) { if (strCurrentMount != "") strMount += LanguageManager.Instance.GetString("String_Mount" + strCurrentMount) + "/"; } // Remove the trailing / if (strMount != "" && strMount.Contains('/')) strMount = strMount.Substring(0, strMount.Length - 1); lblWeaponSlots.Text = strMount; string strBook = _objOptions.LanguageBookShort(objSelectedAccessory.Source); string strPage = objSelectedAccessory.Page; lblWeaponSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblWeaponSource, _objOptions.LanguageBookLong(objSelectedAccessory.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objSelectedAccessory.Page); chkWeaponAccessoryInstalled.Enabled = true; chkWeaponAccessoryInstalled.Checked = objSelectedAccessory.Installed; chkIncludedInWeapon.Enabled = _objOptions.AllowEditPartOfBaseWeapon; chkIncludedInWeapon.Checked = objSelectedAccessory.IncludedInWeapon; } else { // Find the selected Gear. _blnSkipRefresh = true; WeaponAccessory objAccessory = new WeaponAccessory(_objCharacter); Gear objGear = _objFunctions.FindWeaponGear(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons, out objAccessory); lblWeaponName.Text = objGear.DisplayNameShort; lblWeaponCategory.Text = objGear.DisplayCategory; lblWeaponAvail.Text = objGear.TotalAvail(true); lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", objGear.TotalCost); lblWeaponAccuracy.Text = objWeapon.TotalAccuracy.ToString(); lblWeaponConceal.Text = ""; lblWeaponDamage.Text = ""; lblWeaponRC.Text = ""; lblWeaponAP.Text = ""; lblWeaponReach.Text = ""; lblWeaponMode.Text = ""; lblWeaponAmmo.Text = ""; lblWeaponRating.Text = ""; lblWeaponSlots.Text = ""; string strBook = _objOptions.LanguageBookShort(objGear.Source); string strPage = objGear.Page; lblWeaponSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblWeaponSource, _objOptions.BookFromCode(objGear.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objGear.Page); chkWeaponAccessoryInstalled.Enabled = true; chkWeaponAccessoryInstalled.Checked = objGear.Equipped; chkIncludedInWeapon.Enabled = false; chkIncludedInWeapon.Checked = false; _blnSkipRefresh = true; if (objGear.GetType() == typeof(Commlink)) { Commlink objCommlink = (Commlink)objGear; List<string> objASDF = new List<string>() { objCommlink.Attack.ToString(), objCommlink.Sleaze.ToString(), objCommlink.DataProcessing.ToString(), objCommlink.Firewall.ToString() }; cboWeaponGearAttack.BindingContext = new BindingContext(); cboWeaponGearAttack.ValueMember = "Value"; cboWeaponGearAttack.DisplayMember = "Name"; cboWeaponGearAttack.DataSource = objASDF; cboWeaponGearAttack.SelectedIndex = 0; cboWeaponGearAttack.Visible = true; cboWeaponGearSleaze.BindingContext = new BindingContext(); cboWeaponGearSleaze.ValueMember = "Value"; cboWeaponGearSleaze.DisplayMember = "Name"; cboWeaponGearSleaze.DataSource = objASDF; cboWeaponGearSleaze.SelectedIndex = 1; cboWeaponGearDataProcessing.BindingContext = new BindingContext(); cboWeaponGearDataProcessing.ValueMember = "Value"; cboWeaponGearDataProcessing.DisplayMember = "Name"; cboWeaponGearDataProcessing.DataSource = objASDF; cboWeaponGearDataProcessing.SelectedIndex = 2; cboWeaponGearFirewall.BindingContext = new BindingContext(); cboWeaponGearFirewall.ValueMember = "Value"; cboWeaponGearFirewall.DisplayMember = "Name"; cboWeaponGearFirewall.DataSource = objASDF; cboWeaponGearFirewall.SelectedIndex = 3; lblWeaponDeviceRating.Text = objCommlink.DeviceRating.ToString(); cboWeaponGearAttack.Visible = true; cboWeaponGearAttack.Text = objCommlink.Attack.ToString(); lblWeaponAttackLabel.Visible = true; cboWeaponGearSleaze.Visible = true; cboWeaponGearSleaze.Text = objCommlink.Sleaze.ToString(); lblWeaponSleazeLabel.Visible = true; cboWeaponGearDataProcessing.Visible = true; cboWeaponGearDataProcessing.Text = objCommlink.DataProcessing.ToString(); lblWeaponDataProcessingLabel.Visible = true; cboWeaponGearFirewall.Visible = true; cboWeaponGearFirewall.Text = objCommlink.Firewall.ToString(); lblWeaponFirewallLabel.Visible = true; } else { cboCyberwareGearOverclocker.Visible = _objCharacter.Overclocker; lblCyberwareGearOverclocker.Visible = _objCharacter.Overclocker; lblWeaponAttackLabel.Visible = false; cboWeaponGearAttack.Visible = false; lblWeaponDataProcessingLabel.Visible = false; cboWeaponGearDataProcessing.Visible = false; lblWeaponFirewallLabel.Visible = false; cboWeaponGearFirewall.Visible = false; lblWeaponSleazeLabel.Visible = false; cboWeaponGearSleaze.Visible = false; } } // Show the Weapon Ranges. lblWeaponRangeShort.Text = objSelectedWeapon.RangeShort; lblWeaponRangeMedium.Text = objSelectedWeapon.RangeMedium; lblWeaponRangeLong.Text = objSelectedWeapon.RangeLong; lblWeaponRangeExtreme.Text = objSelectedWeapon.RangeExtreme; } } }
/// <summary> /// Locate a piece of Gear within the character's Weapons. /// </summary> /// <param name="strGuid">InternalId of the Gear to find.</param> /// <param name="lstWeapons">List of Weapons to search.</param> /// <param name="objFoundAccessory">WeaponAccessory that the Gear was found in.</param> public Gear FindWeaponGear(string strGuid, List<Weapon> lstWeapons, out WeaponAccessory objFoundAccessory) { Gear objReturn = new Gear(_objCharacter); foreach (Weapon objWeapon in lstWeapons) { foreach (WeaponAccessory objAccessory in objWeapon.WeaponAccessories) { objReturn = FindGear(strGuid, objAccessory.Gear); if (objReturn != null) { if (objReturn.InternalId != Guid.Empty.ToString() && objReturn.Name != "") { objFoundAccessory = objAccessory; return objReturn; } } } if (objWeapon.UnderbarrelWeapons.Count > 0) { objReturn = FindWeaponGear(strGuid, objWeapon.UnderbarrelWeapons, out objFoundAccessory); if (objReturn != null) { if (objReturn.InternalId != Guid.Empty.ToString() && objReturn.Name != "") return objReturn; } } } objFoundAccessory = null; return objReturn; }
/// <summary> /// Locate a WeaponAccessory within the character's Weapons. /// </summary> /// <param name="strGuid">InternalId of the WeaponAccessory to find.</param> /// <param name="lstWeapons">List of Weapons to search.</param> public WeaponAccessory FindWeaponAccessory(string strGuid, List<Weapon> lstWeapons) { WeaponAccessory objReturn = new WeaponAccessory(_objCharacter); foreach (Weapon objWeapon in lstWeapons) { foreach (WeaponAccessory objAccessory in objWeapon.WeaponAccessories) { if (objAccessory.InternalId == strGuid) return objAccessory; } // Look within Underbarrel Weapons. objReturn = FindWeaponAccessory(strGuid, objWeapon.UnderbarrelWeapons); if (objReturn != null) return objReturn; } return null; }
private void tsWeaponAccessoryGearMenuAddAsPlugin_Click(object sender, EventArgs e) { // Locate the Vehicle Sensor Gear. bool blnFound = false; WeaponAccessory objFoundAccessory = new WeaponAccessory(_objCharacter); Gear objSensor = _objFunctions.FindWeaponGear(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons, out objFoundAccessory); if (objSensor != null) blnFound = true; // Make sure the Gear was found. if (!blnFound) { MessageBox.Show(LanguageManager.Instance.GetString("Message_ModifyVehicleGear"), LanguageManager.Instance.GetString("MessageTitle_SelectGear"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } XmlDocument objXmlDocument = XmlManager.Instance.Load("gear.xml"); XmlNode objXmlGear = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"" + objSensor.Name + "\" and category = \"" + objSensor.Category + "\"]"); frmSelectGear frmPickGear = new frmSelectGear(_objCharacter); //frmPickGear.ShowNegativeCapacityOnly = true; if (objXmlGear.InnerXml.Contains("<addoncategory>")) { string strCategories = ""; foreach (XmlNode objXmlCategory in objXmlGear.SelectNodes("addoncategory")) strCategories += objXmlCategory.InnerText + ","; // Remove the trailing comma. strCategories = strCategories.Substring(0, strCategories.Length - 1); frmPickGear.AllowedCategories = strCategories; } frmPickGear.ShowDialog(this); if (frmPickGear.DialogResult == DialogResult.Cancel) return; // Open the Gear XML file and locate the selected piece. objXmlGear = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"" + frmPickGear.SelectedGear + "\" and category = \"" + frmPickGear.SelectedCategory + "\"]"); // Create the new piece of Gear. List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); TreeNode objNode = new TreeNode(); Gear objGear = new Gear(_objCharacter); switch (frmPickGear.SelectedCategory) { case "Commlinks": case "Cyberdecks": case "Rigger Command Consoles": Commlink objCommlink = new Commlink(_objCharacter); objCommlink.Create(objXmlGear, _objCharacter, objNode, frmPickGear.SelectedRating); objCommlink.Quantity = frmPickGear.SelectedQty; objNode.Text = objCommlink.DisplayName; objGear = objCommlink; break; default: Gear objNewGear = new Gear(_objCharacter); objNewGear.Create(objXmlGear, _objCharacter, objNode, frmPickGear.SelectedRating, objWeapons, objWeaponNodes, "", frmPickGear.Hacked, frmPickGear.InherentProgram, true, true, frmPickGear.Aerodynamic); objNewGear.Quantity = frmPickGear.SelectedQty; objNode.Text = objNewGear.DisplayName; objGear = objNewGear; break; } if (objGear.InternalId == Guid.Empty.ToString()) return; objGear.DiscountCost = frmPickGear.BlackMarketDiscount; // Reduce the cost for Do It Yourself components. if (frmPickGear.DoItYourself) objGear.Cost = (Convert.ToDouble(objGear.Cost, GlobalOptions.Instance.CultureInfo) * 0.5).ToString(); // Reduce the cost to 10% for Hacked programs. if (frmPickGear.Hacked) { if (objGear.Cost != "") objGear.Cost = "(" + objGear.Cost + ") * 0.1"; if (objGear.Cost3 != "") objGear.Cost3 = "(" + objGear.Cost3 + ") * 0.1"; if (objGear.Cost6 != "") objGear.Cost6 = "(" + objGear.Cost6 + ") * 0.1"; if (objGear.Cost10 != "") objGear.Cost10 = "(" + objGear.Cost10 + ") * 0.1"; if (objGear.Extra == "") objGear.Extra = LanguageManager.Instance.GetString("Label_SelectGear_Hacked"); else objGear.Extra += ", " + LanguageManager.Instance.GetString("Label_SelectGear_Hacked"); } // If the item was marked as free, change its cost. if (frmPickGear.FreeCost) { objGear.Cost = "0"; objGear.Cost3 = "0"; objGear.Cost6 = "0"; objGear.Cost10 = "0"; } objNode.Text = objGear.DisplayName; objNode.ContextMenuStrip = cmsWeaponAccessoryGear; treWeapons.SelectedNode.Nodes.Add(objNode); treWeapons.SelectedNode.Expand(); objGear.Parent = objSensor; objSensor.Children.Add(objGear); if (frmPickGear.AddAgain) tsWeaponAccessoryGearMenuAddAsPlugin_Click(sender, e); UpdateCharacterInfo(); RefreshSelectedWeapon(); }
private void tsWeaponSell_Click(object sender, EventArgs e) { // Delete the selected Weapon. try { if (treWeapons.SelectedNode.Level == 1) { Weapon objWeapon = new Weapon(_objCharacter); // Locate the Weapon that is selected in the tree. foreach (Weapon objCharacterWeapon in _objCharacter.Weapons) { if (objCharacterWeapon.InternalId == treWeapons.SelectedNode.Tag.ToString()) { objWeapon = objCharacterWeapon; break; } } // Cyberweapons cannot be removed through here and must be done by removing the piece of Cyberware. if (objWeapon.Cyberware) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotRemoveCyberweapon"), LanguageManager.Instance.GetString("MessageTitle_CannotRemoveCyberweapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (objWeapon.Category == "Gear") { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotRemoveGearWeapon"), LanguageManager.Instance.GetString("MessageTitle_CannotRemoveGearWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (objWeapon.Category.StartsWith("Quality")) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotRemoveQualityWeapon"), LanguageManager.Instance.GetString("MessageTitle_CannotRemoveQualityWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } frmSellItem frmSell = new frmSellItem(); frmSell.ShowDialog(this); if (frmSell.DialogResult == DialogResult.Cancel) return; // Create the Expense Log Entry for the sale. int intAmount = Convert.ToInt32(Convert.ToDouble(objWeapon.TotalCost, GlobalOptions.Instance.CultureInfo) * frmSell.SellPercent); ExpenseLogEntry objExpense = new ExpenseLogEntry(); objExpense.Create(intAmount, LanguageManager.Instance.GetString("String_ExpenseSoldWeapon") + " " + objWeapon.DisplayNameShort, ExpenseType.Nuyen, DateTime.Now); _objCharacter.ExpenseEntries.Add(objExpense); _objCharacter.Nuyen += intAmount; _objCharacter.Weapons.Remove(objWeapon); treWeapons.SelectedNode.Remove(); } else if (treWeapons.SelectedNode.Level > 1) { Weapon objWeapon = new Weapon(_objCharacter); // Locate the Weapon that is selected in the tree. foreach (Weapon objCharacterWeapon in _objCharacter.Weapons) { if (objCharacterWeapon.InternalId == treWeapons.SelectedNode.Parent.Tag.ToString()) { objWeapon = objCharacterWeapon; break; } } WeaponAccessory objAccessory = new WeaponAccessory(_objCharacter); // Locate the Accessory that is selected in the tree. foreach (WeaponAccessory objCharacterAccessory in objWeapon.WeaponAccessories) { if (objCharacterAccessory.InternalId == treWeapons.SelectedNode.Tag.ToString()) { objAccessory = objCharacterAccessory; break; } } if (objAccessory.Name != "") { frmSellItem frmSell = new frmSellItem(); frmSell.ShowDialog(this); if (frmSell.DialogResult == DialogResult.Cancel) return; // Record the Weapon's original cost. int intOriginal = objWeapon.TotalCost; objWeapon.WeaponAccessories.Remove(objAccessory); treWeapons.SelectedNode.Remove(); int intAmount = Convert.ToInt32(Convert.ToDouble(intOriginal - objWeapon.TotalCost, GlobalOptions.Instance.CultureInfo) * frmSell.SellPercent); ExpenseLogEntry objExpense = new ExpenseLogEntry(); objExpense.Create(intAmount, LanguageManager.Instance.GetString("String_ExpenseSoldWeaponAccessory") + " " + objAccessory.DisplayNameShort, ExpenseType.Nuyen, DateTime.Now); _objCharacter.ExpenseEntries.Add(objExpense); _objCharacter.Nuyen += intAmount; } else { frmSellItem frmSell = new frmSellItem(); frmSell.ShowDialog(this); if (frmSell.DialogResult == DialogResult.Cancel) return; // Find the selected Gear. Gear objGear = _objFunctions.FindWeaponGear(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons, out objAccessory); _objFunctions.DeleteGear(objGear, treWeapons, _objImprovementManager); if (objGear.Parent == null) objAccessory.Gear.Remove(objGear); else objGear.Parent.Children.Remove(objGear); treWeapons.SelectedNode.Remove(); int intAmount = Convert.ToInt32(Convert.ToDouble(objGear.TotalCost, GlobalOptions.Instance.CultureInfo) * frmSell.SellPercent); ExpenseLogEntry objExpense = new ExpenseLogEntry(); objExpense.Create(intAmount, LanguageManager.Instance.GetString("String_ExpenseSoldWeaponGear") + " " + objGear.DisplayNameShort, ExpenseType.Nuyen, DateTime.Now); _objCharacter.ExpenseEntries.Add(objExpense); _objCharacter.Nuyen += intAmount; } } UpdateCharacterInfo(); RefreshSelectedWeapon(); _blnIsDirty = true; UpdateWindowTitle(); } catch { } }
private void tsWeaponAddAccessory_Click(object sender, EventArgs e) { // Make sure a parent item is selected, then open the Select Accessory window. try { if (treWeapons.SelectedNode.Level == 0) { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectWeaponAccessory"), LanguageManager.Instance.GetString("MessageTitle_SelectWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } catch { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectWeaponAccessory"), LanguageManager.Instance.GetString("MessageTitle_SelectWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Locate the Weapon that is selected in the Tree. Weapon objWeapon = _objFunctions.FindWeapon(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons); // Accessories cannot be added to Cyberweapons. if (objWeapon.Cyberware) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CyberweaponNoAccessory"), LanguageManager.Instance.GetString("MessageTitle_CyberweaponNoAccessory"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Open the Weapons XML file and locate the selected Weapon. XmlDocument objXmlDocument = XmlManager.Instance.Load("weapons.xml"); XmlNode objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + objWeapon.Name + "\"]"); frmSelectWeaponAccessory frmPickWeaponAccessory = new frmSelectWeaponAccessory(_objCharacter); if (objXmlWeapon == null) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotFindWeapon"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Make sure the Weapon allows Accessories to be added to it. bool blnAllowAccessories = false; if (objXmlWeapon["allowaccessory"] != null) { blnAllowAccessories = Convert.ToBoolean(objXmlWeapon["allowaccessory"].InnerText); } if (!blnAllowAccessories) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotModifyWeapon"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } else { XmlNodeList objXmlMountList = objXmlWeapon.SelectNodes("accessorymounts/mount"); string strMounts = ""; foreach (XmlNode objXmlMount in objXmlMountList) { bool blnFound = false; foreach (WeaponAccessory objMod in objWeapon.WeaponAccessories) { if (objMod.Mount == objXmlMount.InnerText) { blnFound = true; } } if (!blnFound) { strMounts += objXmlMount.InnerText + "/"; } } // Remove the trailing / if (strMounts != "" && strMounts.Contains('/')) strMounts = strMounts.Substring(0, strMounts.Length - 1); frmPickWeaponAccessory.AllowedMounts = strMounts; } frmPickWeaponAccessory.WeaponCost = objWeapon.Cost; frmPickWeaponAccessory.AccessoryMultiplier = objWeapon.AccessoryMultiplier; frmPickWeaponAccessory.ShowDialog(); if (frmPickWeaponAccessory.DialogResult == DialogResult.Cancel) return; // Locate the selected piece. objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/accessories/accessory[name = \"" + frmPickWeaponAccessory.SelectedAccessory + "\"]"); TreeNode objNode = new TreeNode(); WeaponAccessory objAccessory = new WeaponAccessory(_objCharacter); objAccessory.Create(objXmlWeapon, objNode, frmPickWeaponAccessory.SelectedMount,Convert.ToInt32(frmPickWeaponAccessory.SelectedRating)); objAccessory.Parent = objWeapon; if (objAccessory.Cost.StartsWith("Variable")) { int intMin = 0; int intMax = 0; string strCost = objAccessory.Cost.Replace("Variable(", string.Empty).Replace(")", string.Empty); if (strCost.Contains("-")) { string[] strValues = strCost.Split('-'); intMin = Convert.ToInt32(strValues[0]); intMax = Convert.ToInt32(strValues[1]); } else intMin = Convert.ToInt32(strCost.Replace("+", string.Empty)); if (intMin != 0 || intMax != 0) { frmSelectNumber frmPickNumber = new frmSelectNumber(); if (intMax == 0) intMax = 1000000; frmPickNumber.Minimum = intMin; frmPickNumber.Maximum = intMax; frmPickNumber.Description = LanguageManager.Instance.GetString("String_SelectVariableCost").Replace("{0}", objAccessory.DisplayNameShort); frmPickNumber.AllowCancel = false; frmPickNumber.ShowDialog(); objAccessory.Cost = frmPickNumber.SelectedValue.ToString(); } } objWeapon.WeaponAccessories.Add(objAccessory); objNode.ContextMenuStrip = cmsWeaponAccessory; treWeapons.SelectedNode.Nodes.Add(objNode); treWeapons.SelectedNode.Expand(); UpdateCharacterInfo(); RefreshSelectedWeapon(); if (frmPickWeaponAccessory.AddAgain) tsWeaponAddAccessory_Click(sender, e); }
private void cboWeaponGearSleaze_SelectedIndexChanged(object sender, EventArgs e) { WeaponAccessory objSelectedWeapon = new WeaponAccessory(_objCharacter); Gear objGear = _objFunctions.FindWeaponGear(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons, out objSelectedWeapon); if (objGear.GetType() == typeof(Commlink)) { Commlink objCommlink = (Commlink)objGear; List<string> objASDF = new List<string>() { "0", "1", "2", "3" }; objASDF.Remove(cboWeaponGearAttack.SelectedIndex.ToString()); objASDF.Remove(cboWeaponGearSleaze.SelectedIndex.ToString()); objASDF.Remove(cboWeaponGearDataProcessing.SelectedIndex.ToString()); objASDF.Remove(cboWeaponGearFirewall.SelectedIndex.ToString()); if (objASDF.Count == 0) return; string strMissing = objASDF[0].ToString(); _blnLoading = true; // Find the combo with the same value as this one and change it to the missing value. if (cboWeaponGearAttack.SelectedIndex == cboWeaponGearSleaze.SelectedIndex) { cboWeaponGearAttack.SelectedIndex = Convert.ToInt32(strMissing); objCommlink.Attack = Convert.ToInt32(cboWeaponGearAttack.SelectedValue); } if (cboWeaponGearDataProcessing.SelectedIndex == cboWeaponGearSleaze.SelectedIndex) { cboWeaponGearDataProcessing.SelectedIndex = Convert.ToInt32(strMissing); objCommlink.DataProcessing = Convert.ToInt32(cboWeaponGearDataProcessing.SelectedValue); } if (cboWeaponGearFirewall.SelectedIndex == cboWeaponGearSleaze.SelectedIndex) { cboWeaponGearFirewall.SelectedIndex = Convert.ToInt32(strMissing); objCommlink.Firewall = Convert.ToInt32(cboWeaponGearFirewall.SelectedValue); } _blnLoading = false; objCommlink.Sleaze = Convert.ToInt32(cboWeaponGearSleaze.SelectedValue); } else { return; } }
/// Create a Vehicle from an XmlNode and return the TreeNodes for it. /// <param name="objXmlVehicle">XmlNode of the Vehicle to create.</param> /// <param name="objNode">TreeNode to add to a TreeView.</param> /// <param name="cmsVehicle">ContextMenuStrip to attach to Weapon Mounts.</param> /// <param name="cmsVehicleGear">ContextMenuStrip to attach to Gear.</param> /// <param name="cmsVehicleWeapon">ContextMenuStrip to attach to Vehicle Weapons.</param> /// <param name="cmsVehicleWeaponAccessory">ContextMenuStrip to attach to Weapon Accessories.</param> /// <param name="blnCreateChildren">Whether or not child items should be created.</param> public void Create(XmlNode objXmlVehicle, TreeNode objNode, ContextMenuStrip cmsVehicle, ContextMenuStrip cmsVehicleGear, ContextMenuStrip cmsVehicleWeapon, ContextMenuStrip cmsVehicleWeaponAccessory, bool blnCreateChildren = true) { _strName = objXmlVehicle["name"].InnerText; _strCategory = objXmlVehicle["category"].InnerText; //Some vehicles have different Offroad Handling speeds. If so, we want to split this up for use with mods and such later. if (objXmlVehicle["handling"].InnerText.Contains('/')) { _intHandling = Convert.ToInt32(objXmlVehicle["handling"].InnerText.Split('/')[0]); _intOffroadHandling = Convert.ToInt32(objXmlVehicle["handling"].InnerText.Split('/')[1]); } else { _intHandling = Convert.ToInt32(objXmlVehicle["handling"].InnerText); } _intAccel = Convert.ToInt32(objXmlVehicle["accel"].InnerText); _intSpeed = Convert.ToInt32(objXmlVehicle["speed"].InnerText); _intPilot = Convert.ToInt32(objXmlVehicle["pilot"].InnerText); _intBody = Convert.ToInt32(objXmlVehicle["body"].InnerText); _intArmor = Convert.ToInt32(objXmlVehicle["armor"].InnerText); _intSensor = Convert.ToInt32(objXmlVehicle["sensor"].InnerText); try { _intDeviceRating = Convert.ToInt32(objXmlVehicle["devicerating"].InnerText); } catch { } try { _intSeats = Convert.ToInt32(objXmlVehicle["seats"].InnerText); } catch { } try { _intModSlots = Convert.ToInt32(objXmlVehicle["modslots"].InnerText); } catch (NullReferenceException e) { _intModSlots = _intBody; } _strAvail = objXmlVehicle["avail"].InnerText; _strCost = objXmlVehicle["cost"].InnerText; // Check for a Variable Cost. if (objXmlVehicle["cost"].InnerText.StartsWith("Variable")) { int intMin = 0; int intMax = 0; string strCost = objXmlVehicle["cost"].InnerText.Replace("Variable(", string.Empty).Replace(")", string.Empty); if (strCost.Contains("-")) { string[] strValues = strCost.Split('-'); intMin = Convert.ToInt32(strValues[0]); intMax = Convert.ToInt32(strValues[1]); } else intMin = Convert.ToInt32(strCost.Replace("+", string.Empty)); if (intMin != 0 || intMax != 0) { frmSelectNumber frmPickNumber = new frmSelectNumber(); if (intMax == 0) intMax = 1000000; frmPickNumber.Minimum = intMin; frmPickNumber.Maximum = intMax; frmPickNumber.Description = LanguageManager.Instance.GetString("String_SelectVariableCost").Replace("{0}", DisplayNameShort); frmPickNumber.AllowCancel = false; frmPickNumber.ShowDialog(); _strCost = frmPickNumber.SelectedValue.ToString(); } } _strSource = objXmlVehicle["source"].InnerText; _strPage = objXmlVehicle["page"].InnerText; if (GlobalOptions.Instance.Language != "en-us") { XmlDocument objXmlDocument = XmlManager.Instance.Load("vehicles.xml"); XmlNode objVehicleNode = objXmlDocument.SelectSingleNode("/chummer/vehicles/vehicle[name = \"" + _strName + "\"]"); if (objVehicleNode != null) { if (objVehicleNode["translate"] != null) _strAltName = objVehicleNode["translate"].InnerText; if (objVehicleNode["altpage"] != null) _strAltPage = objVehicleNode["altpage"].InnerText; } objVehicleNode = objXmlDocument.SelectSingleNode("/chummer/categories/category[. = \"" + _strCategory + "\"]"); if (objVehicleNode != null) { if (objVehicleNode.Attributes["translate"] != null) _strAltCategory = objVehicleNode.Attributes["translate"].InnerText; } } objNode.Text = DisplayName; objNode.Tag = _guiID.ToString(); // If there are any VehicleMods that come with the Vehicle, add them. if (objXmlVehicle.InnerXml.Contains("<mods>") && blnCreateChildren) { XmlDocument objXmlDocument = new XmlDocument(); objXmlDocument = XmlManager.Instance.Load("vehicles.xml"); XmlNodeList objXmlModList = objXmlVehicle.SelectNodes("mods/name"); foreach (XmlNode objXmlVehicleMod in objXmlModList) { XmlNode objXmlMod = objXmlDocument.SelectSingleNode("/chummer/mods/mod[name = \"" + objXmlVehicleMod.InnerText + "\"]"); if (objXmlMod != null) { TreeNode objModNode = new TreeNode(); VehicleMod objMod = new VehicleMod(_objCharacter); int intRating = 0; if (objXmlVehicleMod.Attributes["rating"] != null) intRating = Convert.ToInt32(objXmlVehicleMod.Attributes["rating"].InnerText); if (objXmlVehicleMod.Attributes["select"] != null) objMod.Extra = objXmlVehicleMod.Attributes["select"].InnerText; objMod.Create(objXmlMod, objModNode, intRating); objMod.IncludedInVehicle = true; _lstVehicleMods.Add(objMod); objModNode.ForeColor = SystemColors.GrayText; objModNode.ContextMenuStrip = cmsVehicle; objNode.Nodes.Add(objModNode); objNode.Expand(); } } if (objXmlVehicle.SelectSingleNode("mods/addslots") != null) _intAddSlots = Convert.ToInt32(objXmlVehicle.SelectSingleNode("mods/addslots").InnerText); } // If there is any Gear that comes with the Vehicle, add them. if (objXmlVehicle.InnerXml.Contains("<gears>") && blnCreateChildren) { XmlDocument objXmlDocument = XmlManager.Instance.Load("gear.xml"); XmlNodeList objXmlGearList = objXmlVehicle.SelectNodes("gears/gear"); foreach (XmlNode objXmlVehicleGear in objXmlGearList) { XmlNode objXmlGear = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"" + objXmlVehicleGear.InnerText + "\"]"); if (objXmlGear != null) { TreeNode objGearNode = new TreeNode(); Gear objGear = new Gear(_objCharacter); int intRating = 0; int intQty = 1; string strForceValue = ""; if (objXmlVehicleGear.Attributes["rating"] != null) intRating = Convert.ToInt32(objXmlVehicleGear.Attributes["rating"].InnerText); int intMaxRating = intRating; if (objXmlVehicleGear.Attributes["maxrating"] != null) intMaxRating = Convert.ToInt32(objXmlVehicleGear.Attributes["maxrating"].InnerText); if (objXmlVehicleGear.Attributes["qty"] != null) intQty = Convert.ToInt32(objXmlVehicleGear.Attributes["qty"].InnerText); if (objXmlVehicleGear.Attributes["select"] != null) strForceValue = objXmlVehicleGear.Attributes["select"].InnerText; else strForceValue = ""; List<Weapon> objWeapons = new List<Weapon>(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); objGear.Create(objXmlGear, _objCharacter, objGearNode, intRating, objWeapons, objWeaponNodes, strForceValue); objGear.Cost = "0"; objGear.Quantity = intQty; objGear.MaxRating = intMaxRating; objGear.IncludedInParent = true; objGearNode.Text = objGear.DisplayName; objGearNode.ContextMenuStrip = cmsVehicleGear; foreach (Weapon objWeapon in objWeapons) objWeapon.VehicleMounted = true; _lstGear.Add(objGear); objNode.Nodes.Add(objGearNode); objNode.Expand(); } } } // If there are any Weapons that come with the Vehicle, add them. if (objXmlVehicle.InnerXml.Contains("<weapons>") && blnCreateChildren) { XmlDocument objXmlWeaponDocument = XmlManager.Instance.Load("weapons.xml"); foreach (XmlNode objXmlWeapon in objXmlVehicle.SelectNodes("weapons/weapon")) { bool blnAttached = false; TreeNode objWeaponNode = new TreeNode(); Weapon objWeapon = new Weapon(_objCharacter); XmlNode objXmlWeaponNode = objXmlWeaponDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + objXmlWeapon["name"].InnerText + "\"]"); objWeapon.Create(objXmlWeaponNode, _objCharacter, objWeaponNode, cmsVehicleWeapon, cmsVehicleWeaponAccessory); objWeapon.Cost = 0; objWeapon.VehicleMounted = true; // Find the first free Weapon Mount in the Vehicle. foreach (VehicleMod objMod in _lstVehicleMods) { if ((objMod.Name.Contains("Weapon Mount") || (!String.IsNullOrEmpty(objMod.WeaponMountCategories) && objMod.WeaponMountCategories.Contains(objWeapon.Category) && objMod.Weapons.Count == 0))) { objMod.Weapons.Add(objWeapon); foreach (TreeNode objModNode in objNode.Nodes) { if (objModNode.Tag.ToString() == objMod.InternalId) { objWeaponNode.ContextMenuStrip = cmsVehicleWeapon; objModNode.Nodes.Add(objWeaponNode); objModNode.Expand(); blnAttached = true; break; } } break; } } // If a free Weapon Mount could not be found, just attach it to the first one found and let the player deal with it. if (!blnAttached) { foreach (VehicleMod objMod in _lstVehicleMods) { if (objMod.Name.Contains("Weapon Mount") || (!String.IsNullOrEmpty(objMod.WeaponMountCategories) && objMod.WeaponMountCategories.Contains(objWeapon.Category))) { objMod.Weapons.Add(objWeapon); foreach (TreeNode objModNode in objNode.Nodes) { if (objModNode.Tag.ToString() == objMod.InternalId) { objWeaponNode.ContextMenuStrip = cmsVehicleWeapon; objModNode.Nodes.Add(objWeaponNode); objModNode.Expand(); blnAttached = true; break; } } break; } } } // Look for Weapon Accessories. if (objXmlWeapon["accessories"] != null) { foreach (XmlNode objXmlAccessory in objXmlWeapon.SelectNodes("accessories/accessory")) { XmlNode objXmlAccessoryNode = objXmlWeaponDocument.SelectSingleNode("/chummer/accessories/accessory[name = \"" + objXmlAccessory["name"].InnerText + "\"]"); WeaponAccessory objMod = new WeaponAccessory(_objCharacter); TreeNode objModNode = new TreeNode(); string strMount = ""; int intRating = 0; if (objXmlAccessory["mount"] != null) strMount = objXmlAccessory["mount"].InnerText; objMod.Create(objXmlAccessoryNode, objModNode, strMount,intRating); objMod.Cost = "0"; objModNode.ContextMenuStrip = cmsVehicleWeaponAccessory; objWeapon.WeaponAccessories.Add(objMod); objWeaponNode.Nodes.Add(objModNode); objWeaponNode.Expand(); } } } } }
/// <summary> /// Locate a piece of Gear within the character's Vehicles. /// </summary> /// <param name="strGuid">InternalId of the Gear to find.</param> /// <param name="lstVehicles">List of Vehicles to search.</param> /// <param name="objFoundVehicle">Vehicle that the Gear was found in.</param> public Gear FindVehicleGear(string strGuid, List<Vehicle> lstVehicles, out Vehicle objFoundVehicle) { Gear objReturn = new Gear(_objCharacter); foreach (Vehicle objVehicle in lstVehicles) { objReturn = FindGear(strGuid, objVehicle.Gear); if (objReturn != null) { if (objReturn.InternalId != Guid.Empty.ToString() && objReturn.Name != "") { objFoundVehicle = objVehicle; return objReturn; } } // Look for any Gear that might be attached to this Vehicle through Weapon Accessories or Cyberware. foreach (VehicleMod objMod in objVehicle.Mods) { // Weapon Accessories. WeaponAccessory objAccessory = new WeaponAccessory(_objCharacter); objReturn = FindWeaponGear(strGuid, objMod.Weapons, out objAccessory); if (objReturn != null) { if (objReturn.InternalId != Guid.Empty.ToString() && objReturn.Name != "") { objFoundVehicle = objVehicle; return objReturn; } } // Cyberware. Cyberware objCyberware = new Cyberware(_objCharacter); objReturn = FindCyberwareGear(strGuid, objMod.Cyberware, out objCyberware); if (objReturn != null) { if (objReturn.InternalId != Guid.Empty.ToString() && objReturn.Name != "") { objFoundVehicle = objVehicle; return objReturn; } } } } objFoundVehicle = null; objReturn = null; return objReturn; }