protected int MountedGunDogBrainDicePool(Weapon weapon, Vehicle vehicle) { int pilotRating = vehicle.Pilot; Gear maybeAutoSoft = vehicle.Gear.SelectMany(x => x.ThisAndAllChildren()).FirstOrDefault(x => x.Name == "Autosoft" && (x.Extra == weapon.Name || x.Extra == weapon.DisplayName)); if (maybeAutoSoft != null) { return maybeAutoSoft.Rating + pilotRating; } return 0; }
private void TestVehicles() { Character objCharacter = new Character(); XmlDocument objXmlDocument = XmlManager.Instance.Load("vehicles.xml"); pgbProgress.Minimum = 0; pgbProgress.Value = 0; pgbProgress.Maximum = objXmlDocument.SelectNodes("/chummer/vehicles/vehicle").Count; pgbProgress.Maximum += objXmlDocument.SelectNodes("/chummer/mods/mod").Count; // Vehicles. foreach (XmlNode objXmlGear in objXmlDocument.SelectNodes("/chummer/vehicles/vehicle")) { pgbProgress.Value++; Application.DoEvents(); try { TreeNode objTempNode = new TreeNode(); Vehicle objTemp = new Vehicle(objCharacter); objTemp.Create(objXmlGear, objTempNode, null, null, null, null); try { int objValue = objTemp.TotalCost; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalCost\n"; } try { int objValue = objTemp.TotalAccel; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalAccel\n"; } try { int objValue = objTemp.TotalArmor; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalArmor\n"; } try { int objValue = objTemp.TotalBody; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalBody\n"; } try { string objValue = objTemp.TotalHandling; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalHandling\n"; } try { int objValue = objTemp.TotalSpeed; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalSpeed\n"; } try { string objValue = objTemp.CalculatedAvail; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed CalculatedAvail\n"; } } catch { txtOutput.Text += objXmlGear["name"].InnerText + " general failure\n"; } } // Vehicle Mods. foreach (XmlNode objXmlGear in objXmlDocument.SelectNodes("/chummer/mods/mod")) { pgbProgress.Value++; Application.DoEvents(); try { TreeNode objTempNode = new TreeNode(); VehicleMod objTemp = new VehicleMod(objCharacter); objTemp.Create(objXmlGear, objTempNode, 1); try { int objValue = objTemp.TotalCost; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalCost\n"; } try { string objValue = objTemp.TotalAvail; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed TotalAvail\n"; } try { int objValue = objTemp.CalculatedSlots; } catch { txtOutput.Text += objXmlGear["name"].InnerText + " failed CalculatedSlots\n"; } } catch { txtOutput.Text += objXmlGear["name"].InnerText + " general failure\n"; } } }
/// <summary> /// Move a Vehicle Gear TreeNode after Drag and Drop. /// </summary> /// <param name="intNewIndex">Node's new index.</param> /// <param name="objDestination">Destination Node.</param> public void MoveVehicleGearParent(int intNewIndex, TreeNode objDestination, TreeView treVehicles, ContextMenuStrip cmsVehicleGear) { // The item cannot be dropped onto itself. if (objDestination == treVehicles.SelectedNode) return; // The item cannot be dropped onton one of its children. foreach (TreeNode objNode in treVehicles.SelectedNode.Nodes) { if (objNode == objDestination) return; } // Determine if this is a Location. TreeNode objVehicleNode = objDestination; do { objVehicleNode = objVehicleNode.Parent; } while (objVehicleNode.Level > 1); // Get a reference to the destination Vehicle. Vehicle objDestinationVehicle = new Vehicle(_objCharacter); foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { if (objCharacterVehicle.InternalId == objVehicleNode.Tag.ToString()) { objDestinationVehicle = objCharacterVehicle; break; } } // Make sure the destination is another piece of Gear or a Location. bool blnDestinationGear = true; bool blnDestinationLocation = false; Vehicle objTempVehicle = new Vehicle(_objCharacter); Gear objDestinationGear = _objFunctions.FindVehicleGear(objDestination.Tag.ToString(), _objCharacter.Vehicles, out objTempVehicle); if (objDestinationGear == null) blnDestinationGear = false; // Determine if this is a Location in the destination Vehicle. string strDestinationLocation = ""; foreach (string strLocation in objDestinationVehicle.Locations) { if (strLocation == objDestination.Tag.ToString()) { strDestinationLocation = strLocation; blnDestinationLocation = true; break; } } if (!blnDestinationLocation && !blnDestinationGear) return; // Locate the currently selected piece of Gear. Vehicle objVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objVehicle); // Gear cannot be moved to one of its children. bool blnAllowMove = true; TreeNode objFindNode = objDestination; if (objDestination.Level > 0) { do { objFindNode = objFindNode.Parent; if (objFindNode.Tag.ToString() == objGear.InternalId) { blnAllowMove = false; break; } } while (objFindNode.Level > 0); } if (!blnAllowMove) return; // Remove the Gear from the Vehicle. if (objGear.Parent == null) objVehicle.Gear.Remove(objGear); else objGear.Parent.Children.Remove(objGear); if (blnDestinationLocation) { // Add the Gear to the Vehicle and set its Location. objDestinationVehicle.Gear.Add(objGear); objGear.Location = strDestinationLocation; objGear.Parent = null; } else { // Add the Gear to its new parent. objDestinationGear.Children.Add(objGear); objGear.Location = ""; objGear.Parent = objDestinationGear; } TreeNode objClone = treVehicles.SelectedNode; objClone.ContextMenuStrip = cmsVehicleGear; // Remove the current Node. treVehicles.SelectedNode.Remove(); // Add the new Node to its parent. objDestination.Nodes.Add(objClone); objDestination.Expand(); }
private void cmdDeleteVehicle_Click(object sender, EventArgs e) { // Delete the selected Vehicle. try { if (treVehicles.SelectedNode.Level == 0) return; } catch { return; } if (treVehicles.SelectedNode.Level != 2) { if (!_objFunctions.ConfirmDelete(LanguageManager.Instance.GetString("Message_DeleteVehicle"))) return; } if (treVehicles.SelectedNode.Level == 1) { // Locate the Vehicle that is selected in the tree. Vehicle objVehicle = _objFunctions.FindVehicle(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles); // Remove any Gear Improvements from the character (primarily those provided by an Emotitoy). foreach (Gear objGear in objVehicle.Gear) _objImprovementManager.RemoveImprovements(Improvement.ImprovementSource.Gear, objGear.InternalId); _objCharacter.Vehicles.Remove(objVehicle); treVehicles.SelectedNode.Remove(); } else if (treVehicles.SelectedNode.Level == 2) { bool blnFound = false; // Locate the VehicleMod that is selected in the tree. Vehicle objFoundVehicle = new Vehicle(_objCharacter); VehicleMod objMod = _objFunctions.FindVehicleMod(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (objMod != null) { blnFound = true; if (!_objFunctions.ConfirmDelete(LanguageManager.Instance.GetString("Message_DeleteVehicle"))) return; // Check for Improved Sensor bonus. if (objMod.Bonus != null) { if (objMod.Bonus["improvesensor"] != null) { ChangeVehicleSensor(objFoundVehicle, false); } } // If this is the Obsolete Mod, the user must select a percentage. This will create an Expense that costs X% of the Vehicle's base cost to remove the special Obsolete Mod. if (objMod.Name == "Obsolete" || (objMod.Name == "Obsolescent" && _objOptions.AllowObsolescentUpgrade)) { frmSelectNumber frmModPercent = new frmSelectNumber(); frmModPercent.Minimum = 0; frmModPercent.Maximum = 1000; frmModPercent.Description = LanguageManager.Instance.GetString("String_Retrofit"); frmModPercent.ShowDialog(this); if (frmModPercent.DialogResult == DialogResult.Cancel) return; int intPercentage = frmModPercent.SelectedValue; int intVehicleCost = Convert.ToInt32(objFoundVehicle.Cost); // Make sure the character has enough Nuyen for the expense. int intCost = Convert.ToInt32(Convert.ToDouble(intVehicleCost, GlobalOptions.Instance.CultureInfo) * (Convert.ToDouble(intPercentage, GlobalOptions.Instance.CultureInfo) / 100.0), GlobalOptions.Instance.CultureInfo); VehicleMod objRetrofit = new VehicleMod(_objCharacter); XmlDocument objVehiclesDoc = XmlManager.Instance.Load("vehicles.xml"); XmlNode objXmlNode = objVehiclesDoc.SelectSingleNode("/chummer/mods/mod[name = \"Retrofit\"]"); TreeNode objTreeNode = new TreeNode(); objRetrofit.Create(objXmlNode, objTreeNode, 0); objRetrofit.Cost = intCost.ToString(); objFoundVehicle.Mods.Add(objRetrofit); treVehicles.SelectedNode.Parent.Nodes.Add(objTreeNode); } objFoundVehicle.Mods.Remove(objMod); treVehicles.SelectedNode.Remove(); } if (!blnFound) { // Locate the Sensor or Ammunition that is selected in the tree. foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { foreach (Gear objGear in objCharacterVehicle.Gear) { if (objGear.InternalId == treVehicles.SelectedNode.Tag.ToString()) { if (!_objFunctions.ConfirmDelete(LanguageManager.Instance.GetString("Message_DeleteVehicle"))) return; // Remove the Gear Weapon created by the Gear if applicable. if (objGear.WeaponID != Guid.Empty.ToString()) { // Remove the Weapon from the TreeView. foreach (TreeNode objWeaponNode in treVehicles.SelectedNode.Parent.Nodes) { if (objWeaponNode.Tag.ToString() == objGear.WeaponID) { treVehicles.SelectedNode.Parent.Nodes.Remove(objWeaponNode); break; } } // Remove the Weapon from the Vehicle. Weapon objRemoveWeapon = new Weapon(_objCharacter); foreach (Weapon objWeapon in objCharacterVehicle.Weapons) { if (objWeapon.InternalId == objGear.WeaponID) objRemoveWeapon = objWeapon; } objCharacterVehicle.Weapons.Remove(objRemoveWeapon); } objCharacterVehicle.Gear.Remove(objGear); treVehicles.SelectedNode.Remove(); blnFound = true; break; } } } } if (!blnFound) { // Locate the Weapon that is selected in the tree. foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { foreach (Weapon objWeapon in objCharacterVehicle.Weapons) { if (objWeapon.InternalId == treVehicles.SelectedNode.Tag.ToString()) { blnFound = true; MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotRemoveGearWeaponVehicle"), LanguageManager.Instance.GetString("MessageTitle_CannotRemoveGearWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); break; } } } } if (!blnFound) { // This must be a Location, so find it. TreeNode objVehicleNode = treVehicles.SelectedNode.Parent; Vehicle objVehicle = _objFunctions.FindVehicle(objVehicleNode.Tag.ToString(), _objCharacter.Vehicles); if (!_objFunctions.ConfirmDelete(LanguageManager.Instance.GetString("Message_DeleteVehicleLocation"))) return; // Change the Location of the Gear. foreach (Gear objGear in objVehicle.Gear) { if (objGear.Location == treVehicles.SelectedNode.Text) objGear.Location = ""; } // Move all of the child nodes in the current parent to the Vehicle. List<TreeNode> lstMoveNodes = new List<TreeNode>(); foreach (TreeNode objNode in treVehicles.SelectedNode.Nodes) lstMoveNodes.Add(objNode); foreach (TreeNode objNode in lstMoveNodes) { treVehicles.SelectedNode.Nodes.Remove(objNode); objVehicleNode.Nodes.Add(objNode); } // Remove the Location from the Vehicle, then remove the selected node. objVehicle.Locations.Remove(treVehicles.SelectedNode.Text); treVehicles.SelectedNode.Remove(); } } else if (treVehicles.SelectedNode.Level == 3) { bool blnFound = false; // Locate the selected VehicleWeapon that is selected in the tree. foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { foreach (VehicleMod objMod in objCharacterVehicle.Mods) { foreach (Weapon objWeapon in objMod.Weapons) { if (objWeapon.InternalId == treVehicles.SelectedNode.Tag.ToString()) { objMod.Weapons.Remove(objWeapon); treVehicles.SelectedNode.Remove(); blnFound = true; break; } } } } if (!blnFound) { // Locate the selected Sensor Plugin. // Locate the Sensor that is selected in the tree. Vehicle objFoundVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (objGear != null) { blnFound = true; objGear.Parent.Children.Remove(objGear); treVehicles.SelectedNode.Remove(); _objFunctions.DeleteVehicleGear(objGear, treVehicles, objFoundVehicle); } } if (!blnFound) { // Locate the selected Cyberware. foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { foreach (VehicleMod objMod in objCharacterVehicle.Mods) { foreach (Cyberware objCyberware in objMod.Cyberware) { if (objCyberware.InternalId == treVehicles.SelectedNode.Tag.ToString()) { // Remove the Cyberweapon created by the Cyberware if applicable. if (objCyberware.WeaponID != Guid.Empty.ToString()) { // Remove the Weapon from the TreeView. TreeNode objRemoveNode = new TreeNode(); foreach (TreeNode objWeaponNode in treVehicles.SelectedNode.Parent.Parent.Nodes) { if (objWeaponNode.Tag.ToString() == objCyberware.WeaponID) objRemoveNode = objWeaponNode; } treWeapons.Nodes.Remove(objRemoveNode); // Remove the Weapon from the Vehicle. Weapon objRemoveWeapon = new Weapon(_objCharacter); foreach (Weapon objWeapon in objCharacterVehicle.Weapons) { if (objWeapon.InternalId == objCyberware.WeaponID) objRemoveWeapon = objWeapon; } objCharacterVehicle.Weapons.Remove(objRemoveWeapon); } objMod.Cyberware.Remove(objCyberware); treVehicles.SelectedNode.Remove(); break; } } } } } } else if (treVehicles.SelectedNode.Level == 4) { bool blnFound = false; // Locate the selected WeaponAccessory that is selected in the tree. foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { foreach (VehicleMod objMod in objCharacterVehicle.Mods) { foreach (Weapon objWeapon in objMod.Weapons) { foreach (WeaponAccessory objAccessory in objWeapon.WeaponAccessories) { if (objAccessory.InternalId == treVehicles.SelectedNode.Tag.ToString()) { objWeapon.WeaponAccessories.Remove(objAccessory); treVehicles.SelectedNode.Remove(); blnFound = true; break; } } if (!blnFound) { // Remove the Underbarrel Weapon if the selected item it is one. if (objWeapon.UnderbarrelWeapons.Count > 0) { foreach (Weapon objUnderbarrelWeapon in objWeapon.UnderbarrelWeapons) { if (objUnderbarrelWeapon.InternalId == treVehicles.SelectedNode.Tag.ToString()) { objWeapon.UnderbarrelWeapons.Remove(objUnderbarrelWeapon); treVehicles.SelectedNode.Remove(); break; } } } } } } } if (!blnFound) { // Locate the selected Sensor Plugin. // Locate the Sensor that is selected in the tree. Vehicle objFoundVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (objGear != null) { blnFound = true; objGear.Parent.Children.Remove(objGear); treVehicles.SelectedNode.Remove(); _objFunctions.DeleteVehicleGear(objGear, treVehicles, objFoundVehicle); } } } else if (treVehicles.SelectedNode.Level == 5) { // Locate the selected WeaponAccessory that is selected in the tree. bool blnFound = false; foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { foreach (VehicleMod objMod in objCharacterVehicle.Mods) { foreach (Weapon objWeapon in objMod.Weapons) { if (objWeapon.UnderbarrelWeapons.Count > 0) { foreach (Weapon objUnderbarrelWeapon in objWeapon.UnderbarrelWeapons) { foreach (WeaponAccessory objAccessory in objUnderbarrelWeapon.WeaponAccessories) { if (objAccessory.InternalId == treVehicles.SelectedNode.Tag.ToString()) { objUnderbarrelWeapon.WeaponAccessories.Remove(objAccessory); treVehicles.SelectedNode.Remove(); blnFound = true; break; } } } } } } } if (!blnFound) { Vehicle objFoundVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (objGear != null) { blnFound = true; objGear.Parent.Children.Remove(objGear); treVehicles.SelectedNode.Remove(); _objFunctions.DeleteVehicleGear(objGear, treVehicles, objFoundVehicle); } } } else if (treVehicles.SelectedNode.Level > 5) { Vehicle objFoundVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (objGear != null) { objGear.Parent.Children.Remove(objGear); treVehicles.SelectedNode.Remove(); _objFunctions.DeleteVehicleGear(objGear, treVehicles, objFoundVehicle); } } UpdateCharacterInfo(); RefreshSelectedVehicle(); _blnIsDirty = true; UpdateWindowTitle(); }
private void cmdAddVehicleLocation_Click(object sender, EventArgs e) { // Make sure a Vehicle is selected. Vehicle objVehicle = new Vehicle(_objCharacter); try { if (treVehicles.SelectedNode.Level == 1) { objVehicle = _objFunctions.FindVehicle(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles); } else { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectVehicleLocation"), LanguageManager.Instance.GetString("MessageTitle_SelectVehicle"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } catch { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectVehicleLocation"), LanguageManager.Instance.GetString("MessageTitle_SelectVehicle"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Add a new location to the selected Vehicle. frmSelectText frmPickText = new frmSelectText(); frmPickText.Description = LanguageManager.Instance.GetString("String_AddLocation"); frmPickText.ShowDialog(this); if (frmPickText.DialogResult == DialogResult.Cancel || frmPickText.SelectedValue == "") return; string strLocation = frmPickText.SelectedValue; objVehicle.Locations.Add(strLocation); TreeNode objLocation = new TreeNode(); objLocation.Tag = strLocation; objLocation.Text = strLocation; objLocation.ContextMenuStrip = cmsVehicleLocation; treVehicles.SelectedNode.Nodes.Add(objLocation); _blnIsDirty = true; UpdateWindowTitle(); }
private void chkVehicleHomeNode_CheckedChanged(object sender, EventArgs e) { if (treVehicles.SelectedNode.Level == 1) { Vehicle objVehicle = _objFunctions.FindVehicle(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles); if (objVehicle == null) return; objVehicle.HomeNode = chkVehicleHomeNode.Checked; } else { Commlink objGear = new Commlink(_objCharacter); Vehicle objSelectedVehicle = new Vehicle(_objCharacter); objGear = (Commlink)_objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objSelectedVehicle); objGear.HomeNode = chkVehicleHomeNode.Checked; } _objFunctions.ReplaceHomeNodes(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Gear, _objCharacter.Vehicles); RefreshSelectedVehicle(); UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); }
private void cboVehicleGearSleaze_SelectedIndexChanged(object sender, EventArgs e) { Vehicle objSelectedVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objSelectedVehicle); if (objGear.GetType() == typeof(Commlink)) { Commlink objCommlink = (Commlink)objGear; List<string> objASDF = new List<string>() { "0", "1", "2", "3" }; objASDF.Remove(cboVehicleGearAttack.SelectedIndex.ToString()); objASDF.Remove(cboVehicleGearSleaze.SelectedIndex.ToString()); objASDF.Remove(cboVehicleGearDataProcessing.SelectedIndex.ToString()); objASDF.Remove(cboVehicleGearFirewall.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 (cboVehicleGearAttack.SelectedIndex == cboVehicleGearSleaze.SelectedIndex) { cboVehicleGearAttack.SelectedIndex = Convert.ToInt32(strMissing); objCommlink.Attack = Convert.ToInt32(cboVehicleGearAttack.SelectedValue); } if (cboVehicleGearDataProcessing.SelectedIndex == cboVehicleGearSleaze.SelectedIndex) { cboVehicleGearDataProcessing.SelectedIndex = Convert.ToInt32(strMissing); objCommlink.DataProcessing = Convert.ToInt32(cboVehicleGearDataProcessing.SelectedValue); } if (cboVehicleGearFirewall.SelectedIndex == cboVehicleGearSleaze.SelectedIndex) { cboVehicleGearFirewall.SelectedIndex = Convert.ToInt32(strMissing); objCommlink.Firewall = Convert.ToInt32(cboVehicleGearFirewall.SelectedValue); } _blnLoading = false; objCommlink.Sleaze = Convert.ToInt32(cboVehicleGearSleaze.SelectedValue); } else { return; } }
private void tsVehicleWeaponNotes_Click(object sender, EventArgs e) { bool blnFound = false; Vehicle objFoundVehicle = new Vehicle(_objCharacter); Weapon objWeapon = _objFunctions.FindVehicleWeapon(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (objWeapon != null) blnFound = true; if (blnFound) { frmNotes frmItemNotes = new frmNotes(); frmItemNotes.Notes = objWeapon.Notes; string strOldValue = objWeapon.Notes; frmItemNotes.ShowDialog(this); if (frmItemNotes.DialogResult == DialogResult.OK) { objWeapon.Notes = frmItemNotes.Notes; if (objWeapon.Notes != strOldValue) { _blnIsDirty = true; UpdateWindowTitle(); } } if (objWeapon.Notes != string.Empty) treVehicles.SelectedNode.ForeColor = Color.SaddleBrown; else { if (objWeapon.Cyberware || objWeapon.Category == "Gear") treVehicles.SelectedNode.ForeColor = SystemColors.GrayText; else treVehicles.SelectedNode.ForeColor = SystemColors.WindowText; } treVehicles.SelectedNode.ToolTipText = CommonFunctions.WordWrap(objWeapon.Notes, 100); } }
/// <summary> /// Refresh the currently-selected Vehicle. /// </summary> private void RefreshSelectedVehicle() { bool blnClear = false; try { if (treVehicles.SelectedNode.Level == 0) blnClear = true; } catch { blnClear = true; } if (blnClear) { _blnSkipRefresh = true; nudVehicleRating.Enabled = false; nudVehicleGearQty.Enabled = false; DisplayVehicleWeaponStats(false); DisplayVehicleCommlinkStats(false); DisplayVehicleStats(false); lblVehicleCategory.Text = ""; lblVehicleName.Text = ""; lblVehicleAvail.Text = ""; lblVehicleCost.Text = ""; lblVehicleSource.Text = ""; _blnSkipRefresh = false; chkVehicleWeaponAccessoryInstalled.Enabled = false; return; } nudVehicleGearQty.Enabled = false; chkVehicleHomeNode.Visible = false; // Locate the selected Vehicle. if (treVehicles.SelectedNode.Level == 1) { Vehicle objVehicle = _objFunctions.FindVehicle(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles); if (objVehicle == null) return; _blnSkipRefresh = true; lblVehicleRatingLabel.Visible = false; nudVehicleRating.Minimum = 0; nudVehicleRating.Maximum = 0; nudVehicleRating.Enabled = false; nudVehicleRating.Visible = false; _blnSkipRefresh = false; lblVehicleName.Text = objVehicle.DisplayNameShort; lblVehicleNameLabel.Visible = true; lblVehicleCategory.Text = objVehicle.DisplayCategory; lblVehicleCategoryLabel.Visible = true; lblVehicleAvailLabel.Visible = true; lblVehicleAvail.Text = objVehicle.CalculatedAvail; lblVehicleCostLabel.Visible = true; lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objVehicle.TotalCost); lblVehicleHandling.Text = objVehicle.TotalHandling.ToString(); lblVehicleAccel.Text = objVehicle.TotalAccel.ToString(); lblVehicleSpeed.Text = objVehicle.TotalSpeed.ToString(); lblVehicleDevice.Text = objVehicle.DeviceRating.ToString(); lblVehiclePilot.Text = objVehicle.Pilot.ToString(); lblVehicleBody.Text = objVehicle.TotalBody.ToString(); lblVehicleArmor.Text = objVehicle.TotalArmor.ToString(); // Update the vehicle mod slots if (objVehicle.IsDrone && GlobalOptions.Instance.Dronemods) { lblVehicleDroneModSlots.Text = objVehicle.DroneModSlotsUsed + "/" + objVehicle.DroneModSlots; } else { lblVehiclePowertrain.Text = objVehicle.CalcPowertrain.ToString(); lblVehicleCosmetic.Text = objVehicle.CalcCosmetic.ToString(); lblVehicleElectromagnetic.Text = objVehicle.CalcElectromagnetic.ToString(); lblVehicleBodymod.Text = objVehicle.CalcBodymod.ToString(); lblVehicleWeaponsmod.Text = objVehicle.CalcWeaponsmod.ToString(); lblVehicleProtection.Text = objVehicle.CalcProtection.ToString(); } nudVehicleGearQty.Visible = true; lblVehicleGearQtyLabel.Visible = true; lblVehicleSensor.Text = objVehicle.CalculatedSensor.ToString(); UpdateSensor(objVehicle); lblVehicleSlots.Text = objVehicle.Slots.ToString() + " (" + (objVehicle.Slots - objVehicle.SlotsUsed).ToString() + " " + LanguageManager.Instance.GetString("String_Remaining") + ")"; string strBook = _objOptions.LanguageBookShort(objVehicle.Source); string strPage = objVehicle.Page; lblVehicleSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objVehicle.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objVehicle.Page); chkVehicleWeaponAccessoryInstalled.Enabled = false; chkVehicleIncludedInWeapon.Checked = false; if (_objCharacter.Metatype.EndsWith("A.I.") || _objCharacter.MetatypeCategory == "Technocritters" || _objCharacter.MetatypeCategory == "Protosapients") { chkVehicleHomeNode.Visible = true; chkVehicleHomeNode.Checked = objVehicle.HomeNode; } DisplayVehicleWeaponStats(false); DisplayVehicleCommlinkStats(false); DisplayVehicleStats(true); if (_objOptions.BookEnabled("R5")) { lblVehicleSlotsLabel.Visible = false; lblVehicleSlots.Visible = false; DisplayVehicleDroneMods(objVehicle.IsDrone && GlobalOptions.Instance.Dronemods); DisplayVehicleMods(!(objVehicle.IsDrone && GlobalOptions.Instance.Dronemods)); } else { DisplayVehicleMods(false); DisplayVehicleDroneMods(false); lblVehicleSlotsLabel.Visible = true; lblVehicleSlots.Visible = true; } UpdateCharacterInfo(); } else if (treVehicles.SelectedNode.Level == 2) { // If this is a Vehicle Location, don't do anything. foreach (Vehicle objVehicle in _objCharacter.Vehicles) { if (objVehicle.InternalId == treVehicles.SelectedNode.Parent.Tag.ToString()) { foreach (string strLocation in objVehicle.Locations) { if (strLocation == treVehicles.SelectedNode.Tag.ToString()) { DisplayVehicleWeaponStats(false); DisplayVehicleCommlinkStats(false); DisplayVehicleStats(false); nudVehicleGearQty.Visible = false; lblVehicleGearQtyLabel.Visible = false; chkVehicleIncludedInWeapon.Visible = false; chkVehicleWeaponAccessoryInstalled.Visible = false; return; } } } } bool blnVehicleMod = false; // Locate the selected VehicleMod. Vehicle objSelectedVehicle = new Vehicle(_objCharacter); VehicleMod objMod = _objFunctions.FindVehicleMod(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objSelectedVehicle); if (objMod != null) blnVehicleMod = true; if (blnVehicleMod) { if (objMod.MaxRating != "qty") { if (objMod.MaxRating == "Seats") { objMod.MaxRating = objSelectedVehicle.Seats.ToString(); } if (objMod.MaxRating == "body") { objMod.MaxRating = objSelectedVehicle.Body.ToString(); } if (Convert.ToInt32(objMod.MaxRating) > 0) { _blnSkipRefresh = true; lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating"); lblVehicleRatingLabel.Visible = true; // If the Mod is Armor, use the lower of the Mod's maximum Rating and MaxArmor value for the Vehicle instead. if (objMod.Name.StartsWith("Armor,")) nudVehicleRating.Maximum = Math.Min(Convert.ToInt32(objMod.MaxRating), objSelectedVehicle.MaxArmor); else nudVehicleRating.Maximum = Convert.ToInt32(objMod.MaxRating); nudVehicleRating.Minimum = 1; nudVehicleRating.Visible = true; nudVehicleRating.Value = objMod.Rating; nudVehicleRating.Increment = 1; nudVehicleRating.Enabled = !objMod.IncludedInVehicle; _blnSkipRefresh = false; } else { _blnSkipRefresh = true; lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating"); lblVehicleRatingLabel.Visible = false; nudVehicleRating.Minimum = 0; nudVehicleRating.Increment = 1; nudVehicleRating.Maximum = 0; nudVehicleRating.Enabled = false; nudVehicleRating.Visible = false; _blnSkipRefresh = false; } } else { _blnSkipRefresh = true; lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Qty"); lblVehicleRatingLabel.Visible = false; nudVehicleRating.Visible = true; nudVehicleRating.Minimum = 1; nudVehicleRating.Maximum = 20; nudVehicleRating.Value = objMod.Rating; nudVehicleRating.Increment = 1; nudVehicleRating.Enabled = !objMod.IncludedInVehicle; _blnSkipRefresh = false; } DisplayVehicleStats(false); DisplayVehicleWeaponStats(false); DisplayVehicleCommlinkStats(false); lblVehicleName.Text = objMod.DisplayNameShort; lblVehicleNameLabel.Visible = true; lblVehicleCategoryLabel.Visible = true; lblVehicleCategory.Text = LanguageManager.Instance.GetString("String_VehicleModification"); lblVehicleAvailLabel.Visible = true; lblVehicleAvail.Text = objMod.TotalAvail; lblVehicleCostLabel.Visible = true; lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objMod.TotalCost); nudVehicleGearQty.Visible = true; lblVehicleGearQtyLabel.Visible = true; lblVehicleSlots.Text = objMod.CalculatedSlots.ToString(); string strBook = _objOptions.LanguageBookShort(objMod.Source); string strPage = objMod.Page; lblVehicleSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objMod.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objMod.Page); } else { bool blnFound = false; // If it's not a Vehicle Mod then it must be a Sensor. Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objSelectedVehicle); if (objGear != null) blnFound = true; if (blnFound) { _blnSkipRefresh = true; nudVehicleRating.Enabled = false; nudVehicleGearQty.Enabled = true; nudVehicleGearQty.Maximum = 100000; //nudVehicleGearQty.Minimum = objGear.CostFor; nudVehicleGearQty.Value = objGear.Quantity; nudVehicleGearQty.Increment = objGear.CostFor; nudVehicleGearQty.Visible = true; lblVehicleGearQtyLabel.Visible = true; if (objGear.MaxRating > 0) { lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating"); lblVehicleRatingLabel.Visible = true; nudVehicleRating.Visible = true; nudVehicleRating.Enabled = true; nudVehicleRating.Maximum = objGear.MaxRating; nudVehicleRating.Value = objGear.Rating; } _blnSkipRefresh = false; lblVehicleName.Text = objGear.DisplayNameShort; lblVehicleCategory.Text = objGear.DisplayCategory; lblVehicleAvail.Text = objGear.TotalAvail(true); lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objGear.TotalCost); DisplayVehicleStats(false); DisplayVehicleWeaponStats(false); DisplayVehicleCommlinkStats(false); lblVehicleSlots.Text = objGear.CalculatedCapacity + " (" + objGear.CapacityRemaining.ToString() + " " + LanguageManager.Instance.GetString("String_Remaining") + ")"; string strBook = _objOptions.LanguageBookShort(objGear.Source); string strPage = objGear.Page; lblVehicleSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objGear.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objGear.Page); 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() }; cboVehicleGearAttack.BindingContext = new BindingContext(); cboVehicleGearAttack.ValueMember = "Value"; cboVehicleGearAttack.DisplayMember = "Name"; cboVehicleGearAttack.DataSource = objASDF; cboVehicleGearAttack.SelectedIndex = 0; cboVehicleGearAttack.Visible = true; cboVehicleGearSleaze.BindingContext = new BindingContext(); cboVehicleGearSleaze.ValueMember = "Value"; cboVehicleGearSleaze.DisplayMember = "Name"; cboVehicleGearSleaze.DataSource = objASDF; cboVehicleGearSleaze.SelectedIndex = 1; cboVehicleGearDataProcessing.BindingContext = new BindingContext(); cboVehicleGearDataProcessing.ValueMember = "Value"; cboVehicleGearDataProcessing.DisplayMember = "Name"; cboVehicleGearDataProcessing.DataSource = objASDF; cboVehicleGearDataProcessing.SelectedIndex = 2; cboVehicleGearFirewall.BindingContext = new BindingContext(); cboVehicleGearFirewall.ValueMember = "Value"; cboVehicleGearFirewall.DisplayMember = "Name"; cboVehicleGearFirewall.DataSource = objASDF; cboVehicleGearFirewall.SelectedIndex = 3; DisplayVehicleWeaponStats(false); DisplayVehicleCommlinkStats(true); if (_objCharacter.Metatype == "A.I.") { chkVehicleHomeNode.Visible = true; chkVehicleHomeNode.Checked = objCommlink.HomeNode; } } } else { // Look for the selected Vehicle Weapon. Weapon objWeapon = new Weapon(_objCharacter); foreach (Vehicle objVehicle in _objCharacter.Vehicles) { objWeapon = _objFunctions.FindWeapon(treVehicles.SelectedNode.Tag.ToString(), objVehicle.Weapons); if (objWeapon != null) break; } nudVehicleRating.Enabled = false; DisplayVehicleWeaponStats(true); DisplayVehicleCommlinkStats(false); DisplayVehicleStats(false); lblVehicleWeaponName.Text = objWeapon.DisplayNameShort; lblVehicleWeaponCategory.Text = objWeapon.DisplayCategory; lblVehicleWeaponDamage.Text = objWeapon.CalculatedDamage(); lblVehicleWeaponAP.Text = objWeapon.TotalAP; lblVehicleWeaponAmmo.Text = objWeapon.CalculatedAmmo(); lblVehicleWeaponMode.Text = objWeapon.CalculatedMode; lblVehicleWeaponRangeShort.Text = objWeapon.RangeShort; lblVehicleWeaponRangeMedium.Text = objWeapon.RangeMedium; lblVehicleWeaponRangeLong.Text = objWeapon.RangeLong; lblVehicleWeaponRangeExtreme.Text = objWeapon.RangeExtreme; lblVehicleName.Text = objWeapon.DisplayNameShort; lblVehicleCategory.Text = LanguageManager.Instance.GetString("String_VehicleWeapon"); lblVehicleAvail.Text = objWeapon.TotalAvail; lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objWeapon.TotalCost); lblVehicleSlots.Text = ""; string strBook = _objOptions.LanguageBookShort(objWeapon.Source); string strPage = objWeapon.Page; lblVehicleSource.Text = strBook + " " + strPage; _blnSkipRefresh = true; _blnSkipRefresh = false; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objWeapon.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objWeapon.Page); } } if (blnVehicleMod) { chkVehicleWeaponAccessoryInstalled.Enabled = true; chkVehicleWeaponAccessoryInstalled.Checked = objMod.Installed; } else chkVehicleWeaponAccessoryInstalled.Enabled = false; chkVehicleIncludedInWeapon.Checked = false; } else if (treVehicles.SelectedNode.Level == 3) { bool blnSensorPlugin = false; Vehicle objSelectedVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objSelectedVehicle); if (objGear != null) blnSensorPlugin = true; if (blnSensorPlugin) { if (objGear.MaxRating > 0) { _blnSkipRefresh = true; lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating"); nudVehicleRating.Minimum = 1; nudVehicleRating.Maximum = objGear.MaxRating; nudVehicleRating.Value = objGear.Rating; nudVehicleRating.Enabled = true; _blnSkipRefresh = false; } else { _blnSkipRefresh = true; lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating"); nudVehicleRating.Minimum = 0; nudVehicleRating.Maximum = 0; nudVehicleRating.Enabled = false; _blnSkipRefresh = false; } lblVehicleName.Text = objGear.DisplayNameShort; lblVehicleCategory.Text = objGear.DisplayCategory; lblVehicleAvail.Text = objGear.TotalAvail(true); lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objGear.TotalCost); lblVehicleDevice.Text = objGear.DeviceRating.ToString(); lblVehicleDeviceLabel.Visible = true; DisplayVehicleWeaponStats(false); DisplayVehicleCommlinkStats(false); DisplayVehicleStats(false); lblVehicleSlots.Text = objGear.CalculatedCapacity + " (" + objGear.CapacityRemaining.ToString() + " " + LanguageManager.Instance.GetString("String_Remaining") + ")"; string strBook = _objOptions.LanguageBookShort(objGear.Source); string strPage = objGear.Page; lblVehicleSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objGear.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objGear.Page); 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() }; cboVehicleGearAttack.BindingContext = new BindingContext(); cboVehicleGearAttack.ValueMember = "Value"; cboVehicleGearAttack.DisplayMember = "Name"; cboVehicleGearAttack.DataSource = objASDF; cboVehicleGearAttack.SelectedIndex = 0; cboVehicleGearAttack.Visible = true; cboVehicleGearSleaze.BindingContext = new BindingContext(); cboVehicleGearSleaze.ValueMember = "Value"; cboVehicleGearSleaze.DisplayMember = "Name"; cboVehicleGearSleaze.DataSource = objASDF; cboVehicleGearSleaze.SelectedIndex = 1; cboVehicleGearDataProcessing.BindingContext = new BindingContext(); cboVehicleGearDataProcessing.ValueMember = "Value"; cboVehicleGearDataProcessing.DisplayMember = "Name"; cboVehicleGearDataProcessing.DataSource = objASDF; cboVehicleGearDataProcessing.SelectedIndex = 2; cboVehicleGearFirewall.BindingContext = new BindingContext(); cboVehicleGearFirewall.ValueMember = "Value"; cboVehicleGearFirewall.DisplayMember = "Name"; cboVehicleGearFirewall.DataSource = objASDF; cboVehicleGearFirewall.SelectedIndex = 3; if (_objCharacter.Metatype == "A.I.") { chkVehicleHomeNode.Visible = true; chkVehicleHomeNode.Checked = objCommlink.HomeNode; } } } else { // Look for the selected Vehicle Weapon. Weapon objWeapon = new Weapon(_objCharacter); bool blnWeapon = false; objWeapon = _objFunctions.FindVehicleWeapon(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objSelectedVehicle); if (objWeapon != null) blnWeapon = true; if (blnWeapon) { DisplayVehicleWeaponStats(true); lblVehicleWeaponName.Text = objWeapon.DisplayNameShort; lblVehicleWeaponCategory.Text = objWeapon.DisplayCategory; lblVehicleWeaponDamage.Text = objWeapon.CalculatedDamage(); lblVehicleWeaponAP.Text = objWeapon.TotalAP; lblVehicleWeaponAmmo.Text = objWeapon.CalculatedAmmo(); lblVehicleWeaponMode.Text = objWeapon.CalculatedMode; lblVehicleWeaponRangeShort.Text = objWeapon.RangeShort; lblVehicleWeaponRangeMedium.Text = objWeapon.RangeMedium; lblVehicleWeaponRangeLong.Text = objWeapon.RangeLong; lblVehicleWeaponRangeExtreme.Text = objWeapon.RangeExtreme; lblVehicleName.Text = objWeapon.DisplayNameShort; lblVehicleCategory.Text = LanguageManager.Instance.GetString("String_VehicleWeapon"); lblVehicleAvail.Text = objWeapon.TotalAvail; lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objWeapon.TotalCost); lblVehicleHandling.Text = ""; lblVehicleAccel.Text = ""; lblVehicleSpeed.Text = ""; lblVehicleDevice.Text = ""; lblVehiclePilot.Text = ""; lblVehicleBody.Text = ""; lblVehicleArmor.Text = ""; lblVehicleSensor.Text = ""; lblVehicleHandlingLabel.Visible = false; lblVehicleAccelLabel.Visible = false; lblVehicleSpeedLabel.Visible = false; lblVehicleDeviceLabel.Visible = false; lblVehiclePilotLabel.Visible = false; lblVehicleBodyLabel.Visible = false; lblVehicleArmorLabel.Visible = false; lblVehicleSensorLabel.Visible = false; lblVehiclePowertrainLabel.Visible = false; lblVehiclePowertrain.Text = ""; lblVehicleCosmeticLabel.Visible = false; lblVehicleCosmetic.Text = ""; lblVehicleElectromagneticLabel.Visible = false; lblVehicleElectromagnetic.Text = ""; lblVehicleBodymodLabel.Visible = false; lblVehicleBodymod.Text = ""; lblVehicleWeaponsmodLabel.Visible = false; lblVehicleWeaponsmod.Text = ""; lblVehicleProtectionLabel.Visible = false; lblVehicleProtection.Text = ""; lblVehicleDroneModSlotsLabel.Visible = false; lblVehicleDroneModSlots.Text = ""; lblVehicleSlots.Text = ""; string strBook = _objOptions.LanguageBookShort(objWeapon.Source); string strPage = objWeapon.Page; lblVehicleSource.Text = strBook + " " + strPage; _blnSkipRefresh = true; _blnSkipRefresh = false; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objWeapon.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objWeapon.Page); } else { bool blnCyberware = false; // See if this is a piece of Cyberware. Cyberware objCyberware = _objFunctions.FindVehicleCyberware(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles); if (objCyberware != null) blnCyberware = true; if (blnCyberware) { _blnSkipRefresh = true; lblVehicleName.Text = objCyberware.DisplayNameShort; lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating"); nudVehicleRating.Minimum = objCyberware.MinRating; nudVehicleRating.Maximum = objCyberware.MaxRating; nudVehicleRating.Value = objCyberware.Rating; _blnSkipRefresh = false; lblVehicleName.Text = objCyberware.DisplayNameShort; lblVehicleCategory.Text = LanguageManager.Instance.GetString("String_VehicleModification"); lblVehicleAvail.Text = objCyberware.TotalAvail; lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objCyberware.TotalCost); lblVehicleHandling.Text = ""; lblVehicleAccel.Text = ""; lblVehicleSpeed.Text = ""; lblVehicleDevice.Text = ""; lblVehiclePilot.Text = ""; lblVehicleBody.Text = ""; lblVehicleArmor.Text = ""; lblVehicleSensor.Text = ""; lblVehicleSlots.Text = ""; lblVehicleHandlingLabel.Visible = false; lblVehicleAccelLabel.Visible = false; lblVehicleSpeedLabel.Visible = false; lblVehicleDeviceLabel.Visible = false; lblVehiclePilotLabel.Visible = false; lblVehicleBodyLabel.Visible = false; lblVehicleArmorLabel.Visible = false; lblVehicleSensorLabel.Visible = false; lblVehicleSlotsLabel.Visible = false; lblVehiclePowertrainLabel.Visible = false; lblVehiclePowertrain.Text = ""; lblVehicleCosmeticLabel.Visible = false; lblVehicleCosmetic.Text = ""; lblVehicleElectromagneticLabel.Visible = false; lblVehicleElectromagnetic.Text = ""; lblVehicleBodymodLabel.Visible = false; lblVehicleBodymod.Text = ""; lblVehicleWeaponsmodLabel.Visible = false; lblVehicleWeaponsmod.Text = ""; lblVehicleProtectionLabel.Visible = false; lblVehicleProtection.Text = ""; lblVehicleDroneModSlotsLabel.Visible = false; lblVehicleDroneModSlots.Text = ""; string strBook = _objOptions.LanguageBookShort(objCyberware.Source); string strPage = objCyberware.Page; lblVehicleSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objCyberware.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objCyberware.Page); } } } chkVehicleWeaponAccessoryInstalled.Enabled = false; chkVehicleIncludedInWeapon.Checked = false; } else if (treVehicles.SelectedNode.Level == 4) { bool blnSensorPlugin = false; Vehicle objSelectedVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objSelectedVehicle); if (objGear != null) blnSensorPlugin = true; if (blnSensorPlugin) { if (objGear.MaxRating > 0) { _blnSkipRefresh = true; lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating"); nudVehicleRating.Minimum = 1; nudVehicleRating.Maximum = objGear.MaxRating; nudVehicleRating.Value = objGear.Rating; nudVehicleRating.Enabled = true; _blnSkipRefresh = false; } else { _blnSkipRefresh = true; lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating"); nudVehicleRating.Minimum = 0; nudVehicleRating.Maximum = 0; nudVehicleRating.Enabled = false; _blnSkipRefresh = false; } lblVehicleName.Text = objGear.DisplayNameShort; lblVehicleCategory.Text = objGear.DisplayCategory; lblVehicleAvail.Text = objGear.TotalAvail(true); lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objGear.TotalCost); lblVehicleHandling.Text = ""; lblVehicleAccel.Text = ""; lblVehicleSpeed.Text = ""; lblVehicleDevice.Text = ""; lblVehiclePilot.Text = ""; lblVehicleBody.Text = ""; lblVehicleArmor.Text = ""; lblVehicleSensor.Text = ""; lblVehiclePowertrainLabel.Visible = false; lblVehiclePowertrain.Text = ""; lblVehicleCosmeticLabel.Visible = false; lblVehicleCosmetic.Text = ""; lblVehicleElectromagneticLabel.Visible = false; lblVehicleElectromagnetic.Text = ""; lblVehicleBodymodLabel.Visible = false; lblVehicleBodymod.Text = ""; lblVehicleWeaponsmodLabel.Visible = false; lblVehicleWeaponsmod.Text = ""; lblVehicleProtectionLabel.Visible = false; lblVehicleProtection.Text = ""; lblVehicleDroneModSlotsLabel.Visible = false; lblVehicleDroneModSlots.Text = ""; lblVehicleSlots.Text = objGear.CalculatedCapacity + " (" + objGear.CapacityRemaining.ToString() + " " + LanguageManager.Instance.GetString("String_Remaining") + ")"; string strBook = _objOptions.LanguageBookShort(objGear.Source); string strPage = objGear.Page; lblVehicleSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objGear.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objGear.Page); 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() }; cboVehicleGearAttack.BindingContext = new BindingContext(); cboVehicleGearAttack.ValueMember = "Value"; cboVehicleGearAttack.DisplayMember = "Name"; cboVehicleGearAttack.DataSource = objASDF; cboVehicleGearAttack.SelectedIndex = 0; cboVehicleGearAttack.Visible = true; cboVehicleGearSleaze.BindingContext = new BindingContext(); cboVehicleGearSleaze.ValueMember = "Value"; cboVehicleGearSleaze.DisplayMember = "Name"; cboVehicleGearSleaze.DataSource = objASDF; cboVehicleGearSleaze.SelectedIndex = 1; cboVehicleGearDataProcessing.BindingContext = new BindingContext(); cboVehicleGearDataProcessing.ValueMember = "Value"; cboVehicleGearDataProcessing.DisplayMember = "Name"; cboVehicleGearDataProcessing.DataSource = objASDF; cboVehicleGearDataProcessing.SelectedIndex = 2; cboVehicleGearFirewall.BindingContext = new BindingContext(); cboVehicleGearFirewall.ValueMember = "Value"; cboVehicleGearFirewall.DisplayMember = "Name"; cboVehicleGearFirewall.DataSource = objASDF; cboVehicleGearFirewall.SelectedIndex = 3; if (_objCharacter.Metatype == "A.I.") { chkVehicleHomeNode.Visible = true; chkVehicleHomeNode.Checked = objCommlink.HomeNode; } } } else { bool blnAccessory = false; // Locate the the Selected Vehicle Weapon Accessory of Modification. Weapon objWeapon = new Weapon(_objCharacter); WeaponAccessory objAccessory = _objFunctions.FindVehicleWeaponAccessory(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles); if (objAccessory != null) { objWeapon = objAccessory.Parent; blnAccessory = true; } if (blnAccessory) { lblVehicleName.Text = objAccessory.DisplayNameShort; lblVehicleCategory.Text = LanguageManager.Instance.GetString("String_VehicleWeaponAccessory"); lblVehicleAvail.Text = objAccessory.TotalAvail; lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", Convert.ToInt32(objAccessory.TotalCost)); lblVehicleHandling.Text = ""; lblVehicleAccel.Text = ""; lblVehicleSpeed.Text = ""; lblVehicleDevice.Text = ""; lblVehiclePilot.Text = ""; lblVehicleBody.Text = ""; lblVehicleArmor.Text = ""; lblVehicleSensor.Text = ""; lblVehiclePowertrainLabel.Visible = false; lblVehiclePowertrain.Text = ""; lblVehicleCosmeticLabel.Visible = false; lblVehicleCosmetic.Text = ""; lblVehicleElectromagneticLabel.Visible = false; lblVehicleElectromagnetic.Text = ""; lblVehicleBodymodLabel.Visible = false; lblVehicleBodymod.Text = ""; lblVehicleWeaponsmodLabel.Visible = false; lblVehicleWeaponsmod.Text = ""; lblVehicleProtectionLabel.Visible = false; lblVehicleProtection.Text = ""; lblVehicleDroneModSlotsLabel.Visible = false; lblVehicleDroneModSlots.Text = ""; _blnSkipRefresh = true; _blnSkipRefresh = false; string[] strMounts = objAccessory.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); lblVehicleSlots.Text = strMount; string strBook = _objOptions.LanguageBookShort(objAccessory.Source); string strPage = objAccessory.Page; lblVehicleSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objAccessory.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objAccessory.Page); chkVehicleWeaponAccessoryInstalled.Enabled = true; chkVehicleWeaponAccessoryInstalled.Checked = objAccessory.Installed; chkVehicleIncludedInWeapon.Checked = objAccessory.IncludedInWeapon; } else { // If it's none of these, it must be an Underbarrel Weapon. Vehicle objFoundVehicle = new Vehicle(_objCharacter); objWeapon = _objFunctions.FindVehicleWeapon(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); lblVehicleName.Text = objWeapon.DisplayNameShort; lblVehicleCategory.Text = LanguageManager.Instance.GetString("String_VehicleWeapon"); lblVehicleAvail.Text = objWeapon.TotalAvail; lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objWeapon.TotalCost); lblVehicleHandling.Text = ""; lblVehicleAccel.Text = ""; lblVehicleSpeed.Text = ""; lblVehicleDevice.Text = ""; lblVehiclePilot.Text = ""; lblVehicleBody.Text = ""; lblVehicleArmor.Text = ""; lblVehicleSensor.Text = ""; lblVehicleSlots.Text = ""; lblVehiclePowertrainLabel.Visible = false; lblVehiclePowertrain.Text = ""; lblVehicleCosmeticLabel.Visible = false; lblVehicleCosmetic.Text = ""; lblVehicleElectromagneticLabel.Visible = false; lblVehicleElectromagnetic.Text = ""; lblVehicleBodymodLabel.Visible = false; lblVehicleBodymod.Text = ""; lblVehicleWeaponsmodLabel.Visible = false; lblVehicleWeaponsmod.Text = ""; lblVehicleProtectionLabel.Visible = false; lblVehicleProtection.Text = ""; lblVehicleDroneModSlotsLabel.Visible = false; lblVehicleDroneModSlots.Text = ""; string strBook = _objOptions.LanguageBookShort(objWeapon.Source); string strPage = objWeapon.Page; lblVehicleSource.Text = strBook + " " + strPage; _blnSkipRefresh = true; chkVehicleWeaponAccessoryInstalled.Enabled = true; chkVehicleWeaponAccessoryInstalled.Checked = objWeapon.Installed; _blnSkipRefresh = false; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objWeapon.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objWeapon.Page); } } } else if (treVehicles.SelectedNode.Level == 5) { bool blnFound = false; // Locate the the Selected Vehicle Underbarrel Weapon Accessory or Modification. Weapon objWeapon = new Weapon(_objCharacter); WeaponAccessory objAccessory = _objFunctions.FindVehicleWeaponAccessory(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles); if (objAccessory != null) { blnFound = true; objWeapon = objAccessory.Parent; } if (blnFound) { lblVehicleName.Text = objAccessory.DisplayNameShort; lblVehicleCategory.Text = LanguageManager.Instance.GetString("String_VehicleWeaponAccessory"); lblVehicleAvail.Text = objAccessory.TotalAvail; lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", Convert.ToInt32(objAccessory.TotalCost)); lblVehicleHandling.Text = ""; lblVehicleAccel.Text = ""; lblVehicleSpeed.Text = ""; lblVehicleDevice.Text = ""; lblVehiclePilot.Text = ""; lblVehicleBody.Text = ""; lblVehicleArmor.Text = ""; lblVehicleSensor.Text = ""; lblVehiclePowertrainLabel.Visible = false; lblVehiclePowertrain.Text = ""; lblVehicleCosmeticLabel.Visible = false; lblVehicleCosmetic.Text = ""; lblVehicleElectromagneticLabel.Visible = false; lblVehicleElectromagnetic.Text = ""; lblVehicleBodymodLabel.Visible = false; lblVehicleBodymod.Text = ""; lblVehicleWeaponsmodLabel.Visible = false; lblVehicleWeaponsmod.Text = ""; lblVehicleProtectionLabel.Visible = false; lblVehicleProtection.Text = ""; lblVehicleDroneModSlotsLabel.Visible = false; lblVehicleDroneModSlots.Text = ""; string[] strMounts = objAccessory.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); lblVehicleSlots.Text = strMount; string strBook = _objOptions.LanguageBookShort(objAccessory.Source); string strPage = objAccessory.Page; lblVehicleSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objAccessory.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objAccessory.Page); chkVehicleWeaponAccessoryInstalled.Enabled = true; chkVehicleWeaponAccessoryInstalled.Checked = objAccessory.Installed; chkVehicleIncludedInWeapon.Checked = objAccessory.IncludedInWeapon; _blnSkipRefresh = true; _blnSkipRefresh = false; } else { Vehicle objSelectedVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objSelectedVehicle); if (objGear.MaxRating > 0) { _blnSkipRefresh = true; lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating"); nudVehicleRating.Minimum = 1; nudVehicleRating.Maximum = objGear.MaxRating; nudVehicleRating.Value = objGear.Rating; nudVehicleRating.Enabled = true; _blnSkipRefresh = false; } else { _blnSkipRefresh = true; lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating"); nudVehicleRating.Minimum = 0; nudVehicleRating.Maximum = 0; nudVehicleRating.Enabled = false; _blnSkipRefresh = false; } lblVehicleName.Text = objGear.DisplayNameShort; lblVehicleCategory.Text = objGear.DisplayCategory; lblVehicleAvail.Text = objGear.TotalAvail(true); lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objGear.TotalCost); lblVehicleHandling.Text = ""; lblVehicleAccel.Text = ""; lblVehicleSpeed.Text = ""; lblVehicleDevice.Text = ""; lblVehiclePilot.Text = ""; lblVehicleBody.Text = ""; lblVehicleArmor.Text = ""; lblVehicleSensor.Text = ""; lblVehiclePowertrainLabel.Visible = false; lblVehiclePowertrain.Text = ""; lblVehicleCosmeticLabel.Visible = false; lblVehicleCosmetic.Text = ""; lblVehicleElectromagneticLabel.Visible = false; lblVehicleElectromagnetic.Text = ""; lblVehicleBodymodLabel.Visible = false; lblVehicleBodymod.Text = ""; lblVehicleWeaponsmodLabel.Visible = false; lblVehicleWeaponsmod.Text = ""; lblVehicleProtectionLabel.Visible = false; lblVehicleProtection.Text = ""; lblVehicleDroneModSlotsLabel.Visible = false; lblVehicleDroneModSlots.Text = ""; lblVehicleSlots.Text = objGear.CalculatedCapacity + " (" + objGear.CapacityRemaining.ToString() + " " + LanguageManager.Instance.GetString("String_Remaining") + ")"; string strBook = _objOptions.LanguageBookShort(objGear.Source); string strPage = objGear.Page; lblVehicleSource.Text = strBook + " " + strPage; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objGear.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objGear.Page); 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() }; cboVehicleGearAttack.BindingContext = new BindingContext(); cboVehicleGearAttack.ValueMember = "Value"; cboVehicleGearAttack.DisplayMember = "Name"; cboVehicleGearAttack.DataSource = objASDF; cboVehicleGearAttack.SelectedIndex = 0; cboVehicleGearAttack.Visible = true; cboVehicleGearSleaze.BindingContext = new BindingContext(); cboVehicleGearSleaze.ValueMember = "Value"; cboVehicleGearSleaze.DisplayMember = "Name"; cboVehicleGearSleaze.DataSource = objASDF; cboVehicleGearSleaze.SelectedIndex = 1; cboVehicleGearDataProcessing.BindingContext = new BindingContext(); cboVehicleGearDataProcessing.ValueMember = "Value"; cboVehicleGearDataProcessing.DisplayMember = "Name"; cboVehicleGearDataProcessing.DataSource = objASDF; cboVehicleGearDataProcessing.SelectedIndex = 2; cboVehicleGearFirewall.BindingContext = new BindingContext(); cboVehicleGearFirewall.ValueMember = "Value"; cboVehicleGearFirewall.DisplayMember = "Name"; cboVehicleGearFirewall.DataSource = objASDF; cboVehicleGearFirewall.SelectedIndex = 3; if (_objCharacter.Metatype == "A.I.") { chkVehicleHomeNode.Visible = true; chkVehicleHomeNode.Checked = objCommlink.HomeNode; } } } } else if (treVehicles.SelectedNode.Level > 5) { Vehicle objSelectedVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objSelectedVehicle); if (objGear.MaxRating > 0) { _blnSkipRefresh = true; lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating"); nudVehicleRating.Minimum = 1; nudVehicleRating.Maximum = objGear.MaxRating; nudVehicleRating.Value = objGear.Rating; nudVehicleRating.Enabled = true; _blnSkipRefresh = false; } else { _blnSkipRefresh = true; lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating"); nudVehicleRating.Minimum = 0; nudVehicleRating.Maximum = 0; nudVehicleRating.Enabled = false; _blnSkipRefresh = false; } lblVehicleName.Text = objGear.DisplayNameShort; lblVehicleCategory.Text = objGear.DisplayCategory; lblVehicleAvail.Text = objGear.TotalAvail(true); lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objGear.TotalCost); lblVehicleHandling.Text = ""; lblVehicleAccel.Text = ""; lblVehicleSpeed.Text = ""; lblVehicleDevice.Text = ""; lblVehiclePilot.Text = ""; lblVehicleBody.Text = ""; lblVehicleArmor.Text = ""; lblVehicleSensor.Text = ""; lblVehiclePowertrainLabel.Visible = false; lblVehiclePowertrain.Text = ""; lblVehicleCosmeticLabel.Visible = false; lblVehicleCosmetic.Text = ""; lblVehicleElectromagneticLabel.Visible = false; lblVehicleElectromagnetic.Text = ""; lblVehicleBodymodLabel.Visible = false; lblVehicleBodymod.Text = ""; lblVehicleWeaponsmodLabel.Visible = false; lblVehicleWeaponsmod.Text = ""; lblVehicleProtectionLabel.Visible = false; lblVehicleProtection.Text = ""; lblVehicleDroneModSlotsLabel.Visible = false; lblVehicleDroneModSlots.Text = ""; lblVehicleSlots.Text = objGear.CalculatedCapacity + " (" + objGear.CapacityRemaining.ToString() + " " + LanguageManager.Instance.GetString("String_Remaining") + ")"; string strBook = _objOptions.LanguageBookShort(objGear.Source); string strPage = objGear.Page; lblVehicleSource.Text = strBook + " " + strPage; _blnSkipRefresh = true; _blnSkipRefresh = false; tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objGear.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objGear.Page); 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() }; cboVehicleGearAttack.BindingContext = new BindingContext(); cboVehicleGearAttack.ValueMember = "Value"; cboVehicleGearAttack.DisplayMember = "Name"; cboVehicleGearAttack.DataSource = objASDF; cboVehicleGearAttack.SelectedIndex = 0; cboVehicleGearAttack.Visible = true; cboVehicleGearSleaze.BindingContext = new BindingContext(); cboVehicleGearSleaze.ValueMember = "Value"; cboVehicleGearSleaze.DisplayMember = "Name"; cboVehicleGearSleaze.DataSource = objASDF; cboVehicleGearSleaze.SelectedIndex = 1; cboVehicleGearDataProcessing.BindingContext = new BindingContext(); cboVehicleGearDataProcessing.ValueMember = "Value"; cboVehicleGearDataProcessing.DisplayMember = "Name"; cboVehicleGearDataProcessing.DataSource = objASDF; cboVehicleGearDataProcessing.SelectedIndex = 2; cboVehicleGearFirewall.BindingContext = new BindingContext(); cboVehicleGearFirewall.ValueMember = "Value"; cboVehicleGearFirewall.DisplayMember = "Name"; cboVehicleGearFirewall.DataSource = objASDF; cboVehicleGearFirewall.SelectedIndex = 3; if (_objCharacter.Metatype == "A.I.") { chkVehicleHomeNode.Visible = true; chkVehicleHomeNode.Checked = objCommlink.HomeNode; } } } }
/// <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 nudVehicleRating_ValueChanged(object sender, EventArgs e) { if (_blnSkipRefresh) return; if (treVehicles.SelectedNode.Level == 2) { bool blnFound = false; // Locate the currently selected VehicleMod. Vehicle objFoundVehicle = new Vehicle(_objCharacter); VehicleMod objMod = _objFunctions.FindVehicleMod(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (objMod != null) blnFound = true; if (blnFound) { objMod.Rating = Convert.ToInt32(nudVehicleRating.Value); treVehicles.SelectedNode.Text = objMod.DisplayName; UpdateCharacterInfo(); RefreshSelectedVehicle(); } else { // Locate the currently selected Vehicle Gear,. Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); objGear.Rating = Convert.ToInt32(nudVehicleRating.Value); treVehicles.SelectedNode.Text = objGear.DisplayName; UpdateCharacterInfo(); RefreshSelectedVehicle(); } } else if (treVehicles.SelectedNode.Level > 2) { bool blnGear = false; Vehicle objFoundVehicle = new Vehicle(_objCharacter); Gear objGear = new Gear(_objCharacter); // Locate the currently selected Vehicle Sensor Plugin. objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (objGear != null) blnGear = true; if (blnGear) { objGear.Rating = Convert.ToInt32(nudVehicleRating.Value); treVehicles.SelectedNode.Text = objGear.DisplayName; UpdateCharacterInfo(); RefreshSelectedVehicle(); } else { // See if this is a piece of Cyberware. bool blnCyberware = false; Cyberware objCyberware = _objFunctions.FindVehicleCyberware(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles); if (objCyberware != null) blnCyberware = true; if (blnCyberware) { objCyberware.Rating = Convert.ToInt32(nudVehicleRating.Value); treVehicles.SelectedNode.Text = objCyberware.DisplayName; } } UpdateCharacterInfo(); RefreshSelectedVehicle(); } _blnIsDirty = true; UpdateWindowTitle(); }
private void nudVehicleGearQty_ValueChanged(object sender, EventArgs e) { if (_blnSkipRefresh) return; Vehicle objFoundVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); objGear.Quantity = Convert.ToInt32(nudVehicleGearQty.Value); treVehicles.SelectedNode.Text = objGear.DisplayName; UpdateCharacterInfo(); RefreshSelectedVehicle(); _blnIsDirty = true; UpdateWindowTitle(); }
/// <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(); }
private void mnuEditPaste_Click(object sender, EventArgs e) { if (tabCharacterTabs.SelectedTab == tabStreetGear) { // Lifestyle Tab. if (tabStreetGearTabs.SelectedTab == tabLifestyle) { // Paste Lifestyle. Lifestyle objLifestyle = new Lifestyle(_objCharacter); XmlNode objXmlNode = GlobalOptions.Instance.Clipboard.SelectSingleNode("/character/lifestyle"); if (objXmlNode != null) { objLifestyle.Load(objXmlNode, true); // Reset the number of months back to 1 since 0 isn't valid in Create Mode. objLifestyle.Months = 1; _objCharacter.Lifestyles.Add(objLifestyle); TreeNode objLifestyleNode = new TreeNode(); objLifestyleNode.Text = objLifestyle.DisplayName; objLifestyleNode.Tag = objLifestyle.InternalId; if (objLifestyle.StyleType.ToString() != "Standard") objLifestyleNode.ContextMenuStrip = cmsAdvancedLifestyle; else objLifestyleNode.ContextMenuStrip = cmsLifestyleNotes; if (objLifestyle.Notes != string.Empty) objLifestyleNode.ForeColor = Color.SaddleBrown; objLifestyleNode.ToolTipText = CommonFunctions.WordWrap(objLifestyle.Notes, 100); treLifestyles.Nodes[0].Nodes.Add(objLifestyleNode); UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); return; } } // Armor Tab. if (tabStreetGearTabs.SelectedTab == tabArmor) { // Paste Armor. Armor objArmor = new Armor(_objCharacter); XmlNode objXmlNode = GlobalOptions.Instance.Clipboard.SelectSingleNode("/character/armor"); if (objXmlNode != null) { objArmor.Load(objXmlNode, true); _objCharacter.Armor.Add(objArmor); _objFunctions.CreateArmorTreeNode(objArmor, treArmor, cmsArmor, cmsArmorMod, cmsArmorGear); UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); return; } // Paste Gear. Gear objGear = new Gear(_objCharacter); 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; } foreach (Armor objCharacterArmor in _objCharacter.Armor) { if (objCharacterArmor.InternalId == treArmor.SelectedNode.Tag.ToString()) { objCharacterArmor.Gear.Add(objGear); TreeNode objNode = new TreeNode(); objNode.Text = objGear.DisplayName; objNode.Tag = objGear.InternalId; objNode.ContextMenuStrip = cmsArmorGear; _objFunctions.BuildGearTree(objGear, objNode, cmsArmorGear); treArmor.SelectedNode.Nodes.Add(objNode); treArmor.SelectedNode.Expand(); } } // Add any Weapons that come with the Gear. objXmlNode = GlobalOptions.Instance.Clipboard.SelectSingleNode("/character/weapon"); if (objXmlNode != null) { Weapon objWeapon = new Weapon(_objCharacter); objWeapon.Load(objXmlNode, true); _objCharacter.Weapons.Add(objWeapon); objGear.WeaponID = objWeapon.InternalId; _objFunctions.CreateWeaponTreeNode(objWeapon, treWeapons.Nodes[0], cmsWeapon, cmsWeaponAccessory, cmsWeaponAccessoryGear); } UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); return; } } // Weapons Tab. if (tabStreetGearTabs.SelectedTab == tabWeapons) { // Paste Gear into a 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 = _objFunctions.FindWeaponAccessory(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons); bool blnAllowPaste = false; if (objAccessory.AllowGear != null) { foreach (XmlNode objAllowed in objAccessory.AllowGear.SelectNodes("gearcategory")) { if (objAllowed.InnerText == objGear.Category) { blnAllowPaste = true; break; } } } if (blnAllowPaste) { objAccessory.Gear.Add(objGear); TreeNode objNode = new TreeNode(); objNode.Text = objGear.DisplayName; objNode.Tag = objGear.InternalId; objNode.ContextMenuStrip = cmsWeaponAccessoryGear; _objFunctions.BuildGearTree(objGear, objNode, cmsWeaponAccessoryGear); treWeapons.SelectedNode.Nodes.Add(objNode); treWeapons.SelectedNode.Expand(); // Add any Weapons that come with the Gear. objXmlNode = GlobalOptions.Instance.Clipboard.SelectSingleNode("/character/weapon"); if (objXmlNode != null) { Weapon objGearWeapon = new Weapon(_objCharacter); objGearWeapon.Load(objXmlNode, true); _objCharacter.Weapons.Add(objGearWeapon); objGear.WeaponID = objGearWeapon.InternalId; _objFunctions.CreateWeaponTreeNode(objGearWeapon, treWeapons.Nodes[0], cmsWeapon, cmsWeaponAccessory, cmsWeaponAccessoryGear); } UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); return; } } // Paste Weapon. Weapon objWeapon = new Weapon(_objCharacter); objXmlNode = GlobalOptions.Instance.Clipboard.SelectSingleNode("/character/weapon"); if (objXmlNode != null) { objWeapon.Load(objXmlNode, true); objWeapon.VehicleMounted = false; _objCharacter.Weapons.Add(objWeapon); _objFunctions.CreateWeaponTreeNode(objWeapon, treWeapons.Nodes[0], cmsWeapon, cmsWeaponAccessory, cmsWeaponAccessoryGear); UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); return; } } // Gear Tab. if (tabStreetGearTabs.SelectedTab == tabGear) { // Paste Gear. 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); _objCharacter.Gear.Add(objCommlink); objGear = objCommlink; break; default: Gear objNewGear = new Gear(_objCharacter); objNewGear.Load(objXmlNode, true); _objCharacter.Gear.Add(objNewGear); objGear = objNewGear; break; } objGear.Parent = null; TreeNode objNode = new TreeNode(); objNode.Text = objGear.DisplayName; objNode.Tag = objGear.InternalId; if (objGear.Notes != string.Empty) objNode.ForeColor = Color.SaddleBrown; objNode.ToolTipText = CommonFunctions.WordWrap(objGear.Notes, 100); _objFunctions.BuildGearTree(objGear, objNode, cmsGear); objNode.ContextMenuStrip = cmsGear; TreeNode objParent = new TreeNode(); if (objGear.Location == "") objParent = treGear.Nodes[0]; else { foreach (TreeNode objFind in treGear.Nodes) { if (objFind.Text == objGear.Location) { objParent = objFind; break; } } } objParent.Nodes.Add(objNode); objParent.Expand(); // Add any Weapons that come with the Gear. objXmlNode = GlobalOptions.Instance.Clipboard.SelectSingleNode("/character/weapon"); if (objXmlNode != null) { Weapon objWeapon = new Weapon(_objCharacter); objWeapon.Load(objXmlNode, true); _objCharacter.Weapons.Add(objWeapon); objGear.WeaponID = objWeapon.InternalId; _objFunctions.CreateWeaponTreeNode(objWeapon, treWeapons.Nodes[0], cmsWeapon, cmsWeaponAccessory, cmsWeaponAccessoryGear); } UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); return; } } } // Vehicles Tab. if (tabCharacterTabs.SelectedTab == tabVehicles) { // Paste Vehicle. Vehicle objVehicle = new Vehicle(_objCharacter); XmlNode objXmlNode = GlobalOptions.Instance.Clipboard.SelectSingleNode("/character/vehicle"); if (objXmlNode != null) { objVehicle.Load(objXmlNode, true); _objCharacter.Vehicles.Add(objVehicle); _objFunctions.CreateVehicleTreeNode(objVehicle, treVehicles, cmsVehicle, cmsVehicleLocation, cmsVehicleWeapon, cmsVehicleWeaponAccessory, cmsVehicleWeaponAccessoryGear, cmsVehicleGear); UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); return; } // Paste Gear. Gear objGear = new Gear(_objCharacter); 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; } // Paste the Gear into a Vehicle. foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { if (objCharacterVehicle.InternalId == treVehicles.SelectedNode.Tag.ToString()) { objCharacterVehicle.Gear.Add(objGear); TreeNode objNode = new TreeNode(); objNode.Text = objGear.DisplayName; objNode.Tag = objGear.InternalId; objNode.ContextMenuStrip = cmsVehicleGear; objVehicle = objCharacterVehicle; _objFunctions.BuildGearTree(objGear, objNode, cmsVehicleGear); treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); } } // Paste the Gear into a Vehicle's Gear. Vehicle objTempVehicle = objVehicle; Gear objVehicleGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objVehicle); if (objVehicle == null) objVehicle = objTempVehicle; if (objVehicleGear != null) { objVehicleGear.Children.Add(objGear); objGear.Parent = objVehicleGear; TreeNode objNode = new TreeNode(); objNode.Text = objGear.DisplayName; objNode.Tag = objGear.InternalId; objNode.ContextMenuStrip = cmsVehicleGear; _objFunctions.BuildGearTree(objGear, objNode, cmsVehicleGear); treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); } UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); return; } // Paste Weapon. Weapon objWeapon = new Weapon(_objCharacter); objXmlNode = GlobalOptions.Instance.Clipboard.SelectSingleNode("/character/weapon"); if (objXmlNode != null) { objWeapon.Load(objXmlNode, true); objWeapon.VehicleMounted = true; try { // Weapons can only be added to Vehicle Mods that support them (Weapon Mounts and Mechanical Arms). VehicleMod objMod = new VehicleMod(_objCharacter); foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { foreach (VehicleMod objVehicleMod in objCharacterVehicle.Mods) { if (objVehicleMod.InternalId == treVehicles.SelectedNode.Tag.ToString()) { if (objVehicleMod.Name.StartsWith("Weapon Mount") || objVehicleMod.Name.StartsWith("Heavy Weapon Mount") || objVehicleMod.Name.StartsWith("Mechanical Arm") || objVehicleMod.WeaponMountCategories != "") { objVehicleMod.Weapons.Add(objWeapon); _objFunctions.CreateWeaponTreeNode(objWeapon, treVehicles.SelectedNode, cmsVehicleWeapon, cmsVehicleWeaponAccessory, null); UpdateCharacterInfo(); _blnIsDirty = true; UpdateWindowTitle(); return; } } } } } catch { } } } }
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(); }
private void tsVehicleRenameLocation_Click(object sender, EventArgs e) { string strNewLocation = ""; frmSelectText frmPickText = new frmSelectText(); frmPickText.Description = LanguageManager.Instance.GetString("String_AddLocation"); frmPickText.ShowDialog(this); if (frmPickText.DialogResult == DialogResult.Cancel) return; // Determine if this is a Location. TreeNode objVehicleNode = treVehicles.SelectedNode; do { objVehicleNode = objVehicleNode.Parent; } while (objVehicleNode.Level > 1); // Get a reference to the affected Vehicle. Vehicle objVehicle = new Vehicle(_objCharacter); foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { if (objCharacterVehicle.InternalId == objVehicleNode.Tag.ToString()) { objVehicle = objCharacterVehicle; break; } } strNewLocation = frmPickText.SelectedValue; int i = -1; foreach (string strLocation in objVehicle.Locations) { i++; if (strLocation == treVehicles.SelectedNode.Text) { foreach (Gear objGear in objVehicle.Gear) { if (objGear.Location == strLocation) objGear.Location = strNewLocation; } objVehicle.Locations[i] = strNewLocation; treVehicles.SelectedNode.Text = strNewLocation; break; } } }
private void tsVehicleWeaponAccessoryGearMenuAddAsPlugin_Click(object sender, EventArgs e) { // Locate the Vehicle Sensor Gear. bool blnFound = false; Vehicle objFoundVehicle = new Vehicle(_objCharacter); Gear objSensor = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); 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, false); 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, false, 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 = cmsVehicleWeaponAccessoryGear; treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); objGear.Parent = objSensor; objSensor.Children.Add(objGear); if (frmPickGear.AddAgain) tsVehicleWeaponAccessoryGearMenuAddAsPlugin_Click(sender, e); UpdateCharacterInfo(); RefreshSelectedVehicle(); }
private void treVehicles_ItemDrag(object sender, ItemDragEventArgs e) { try { if (treVehicles.SelectedNode.Level != 1) { // Determine if this is a piece of Gear. If not, don't let the user drag the Node. Vehicle objVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objVehicle); if (objGear != null) { _objDragButton = e.Button; _blnDraggingGear = true; } else { return; } } } catch { return; } _intDragLevel = treVehicles.SelectedNode.Level; DoDragDrop(e.Item, DragDropEffects.Move); }
/// <summary> /// Recheck all mods to see if Sensor has changed. /// </summary> /// <param name="objVehicle">Vehicle to modify.</param> private void UpdateSensor(Vehicle objVehicle) { foreach (Gear objGear in objVehicle.Gear) { if (objGear.Category == "Sensors" && objGear.Name == "Sensor Array" && objGear.IncludedInParent) { // Update the name of the item in the TreeView. TreeNode objNode = _objFunctions.FindNode(objGear.InternalId, treVehicles); objNode.Text = objGear.DisplayName; } } }
private void tsVehicleAddCyberware_Click(object sender, EventArgs e) { Vehicle objVehicle = new Vehicle(_objCharacter); VehicleMod objMod = _objFunctions.FindVehicleMod(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objVehicle); if (objMod == null) { MessageBox.Show(LanguageManager.Instance.GetString("Message_VehicleCyberwarePlugin"), LanguageManager.Instance.GetString("MessageTitle_NoCyberware"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (!objMod.AllowCyberware) { MessageBox.Show(LanguageManager.Instance.GetString("Message_VehicleCyberwarePlugin"), LanguageManager.Instance.GetString("MessageTitle_NoCyberware"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } frmSelectCyberware frmPickCyberware = new frmSelectCyberware(_objCharacter); frmPickCyberware.SetGrade = "Standard"; frmPickCyberware.LockGrade(); frmPickCyberware.ShowOnlySubsystems = true; frmPickCyberware.Subsystems = objMod.Subsystems; frmPickCyberware.AllowModularPlugins = objMod.AllowModularPlugins; frmPickCyberware.ShowDialog(this); if (frmPickCyberware.DialogResult == DialogResult.Cancel) return; // Open the Cyberware XML file and locate the selected piece. XmlDocument objXmlDocument = XmlManager.Instance.Load("cyberware.xml"); XmlNode objXmlCyberware = objXmlDocument.SelectSingleNode("/chummer/cyberwares/cyberware[name = \"" + frmPickCyberware.SelectedCyberware + "\"]"); // Create the Cyberware object. Cyberware objCyberware = new Cyberware(_objCharacter); List<Weapon> objWeapons = new List<Weapon>(); TreeNode objNode = new TreeNode(); List<TreeNode> objWeaponNodes = new List<TreeNode>(); objCyberware.Create(objXmlCyberware, _objCharacter, frmPickCyberware.SelectedGrade, Improvement.ImprovementSource.Cyberware, frmPickCyberware.SelectedRating, objNode, objWeapons, objWeaponNodes, false); if (objCyberware.InternalId == Guid.Empty.ToString()) return; if (frmPickCyberware.FreeCost) objCyberware.Cost = "0"; objCyberware.DiscountCost = frmPickCyberware.BlackMarketDiscount; treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); objMod.Cyberware.Add(objCyberware); foreach (Weapon objWeapon in objWeapons) { objWeapon.VehicleMounted = true; objVehicle.Weapons.Add(objWeapon); } // Create the Weapon Node if one exists. foreach (TreeNode objWeaponNode in objWeaponNodes) { objWeaponNode.ContextMenuStrip = cmsVehicleWeapon; treVehicles.SelectedNode.Parent.Nodes.Add(objWeaponNode); treVehicles.SelectedNode.Parent.Expand(); } UpdateCharacterInfo(); if (frmPickCyberware.AddAgain) tsVehicleAddCyberware_Click(sender, e); }
/// <summary> /// Change the size of a Vehicle's Sensor -- This appears to be obsolete code /// </summary> /// <param name="objVehicle">Vehicle to modify.</param> /// <param name="blnIncrease">True if the Sensor should increase in size, False if it should decrease.</param> private void ChangeVehicleSensor(Vehicle objVehicle, bool blnIncrease) { XmlDocument objXmlDocument = XmlManager.Instance.Load("gear.xml"); XmlNode objNewNode; bool blnFound = false; Gear objSensor = new Gear(_objCharacter); Gear objNewSensor = new Gear(_objCharacter); TreeNode objTreeNode = new TreeNode(); List<Weapon> lstWeapons = new List<Weapon>(); List<TreeNode> lstWeaponNodes = new List<TreeNode>(); foreach (Gear objCurrentGear in objVehicle.Gear) { if (objCurrentGear.Name == "Microdrone Sensor") { if (blnIncrease) { objNewNode = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"Minidrone Sensor\" and category = \"Sensors\"]"); objNewSensor.Create(objNewNode, _objCharacter, objTreeNode, 0, lstWeapons, lstWeaponNodes); objSensor = objCurrentGear; blnFound = true; } break; } else if (objCurrentGear.Name == "Minidrone Sensor") { if (blnIncrease) objNewNode = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"Small Drone Sensor\" and category = \"Sensors\"]"); else objNewNode = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"Microdrone Sensor\" and category = \"Sensors\"]"); objNewSensor.Create(objNewNode, _objCharacter, objTreeNode, 0, lstWeapons, lstWeaponNodes); objSensor = objCurrentGear; blnFound = true; break; } else if (objCurrentGear.Name == "Small Drone Sensor") { if (blnIncrease) objNewNode = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"Medium Drone Sensor\" and category = \"Sensors\"]"); else objNewNode = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"Minidrone Sensor\" and category = \"Sensors\"]"); objNewSensor.Create(objNewNode, _objCharacter, objTreeNode, 0, lstWeapons, lstWeaponNodes); objSensor = objCurrentGear; blnFound = true; break; } else if (objCurrentGear.Name == "Medium Drone Sensor") { if (blnIncrease) objNewNode = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"Large Drone Sensor\" and category = \"Sensors\"]"); else objNewNode = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"Small Drone Sensor\" and category = \"Sensors\"]"); objNewSensor.Create(objNewNode, _objCharacter, objTreeNode, 0, lstWeapons, lstWeaponNodes); objSensor = objCurrentGear; blnFound = true; break; } else if (objCurrentGear.Name == "Large Drone Sensor") { if (blnIncrease) objNewNode = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"Vehicle Sensor\" and category = \"Sensors\"]"); else objNewNode = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"Medium Drone Sensor\" and category = \"Sensors\"]"); objNewSensor.Create(objNewNode, _objCharacter, objTreeNode, 0, lstWeapons, lstWeaponNodes); objSensor = objCurrentGear; blnFound = true; break; } else if (objCurrentGear.Name == "Vehicle Sensor") { if (blnIncrease) objNewNode = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"Extra-Large Vehicle Sensor\" and category = \"Sensors\"]"); else objNewNode = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"Large Drone Sensor\" and category = \"Sensors\"]"); objNewSensor.Create(objNewNode, _objCharacter, objTreeNode, 0, lstWeapons, lstWeaponNodes); objSensor = objCurrentGear; blnFound = true; break; } else if (objCurrentGear.Name == "Extra-Large Vehicle Sensor") { if (!blnIncrease) { objNewNode = objXmlDocument.SelectSingleNode("/chummer/gears/gear[name = \"Vehicle Sensor\" and category = \"Sensors\"]"); objNewSensor.Create(objNewNode, _objCharacter, objTreeNode, 0, lstWeapons, lstWeaponNodes); objSensor = objCurrentGear; blnFound = true; } break; } } // If the item was found, update the Vehicle Sensor information. if (blnFound) { objSensor.Name = objNewSensor.Name; objSensor.Rating = objNewSensor.Rating; objSensor.Capacity = objNewSensor.Capacity; objSensor.DeviceRating = objNewSensor.DeviceRating; objSensor.Avail = objNewSensor.Avail; objSensor.Cost = objNewSensor.Cost; objSensor.Source = objNewSensor.Source; objSensor.Page = objNewSensor.Page; // Update the name of the item in the TreeView. TreeNode objNode = _objFunctions.FindNode(objSensor.InternalId, treVehicles); objNode.Text = objSensor.DisplayNameShort; } }
private void tsVehicleAddUnderbarrelWeapon_Click(object sender, EventArgs e) { // Attempt to locate the selected VehicleWeapon. bool blnWeaponFound = false; Vehicle objFoundVehicle = new Vehicle(_objCharacter); Weapon objSelectedWeapon = _objFunctions.FindVehicleWeapon(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (objSelectedWeapon != null) blnWeaponFound = true; if (!blnWeaponFound) { MessageBox.Show(LanguageManager.Instance.GetString("Message_VehicleWeaponUnderbarrel"), LanguageManager.Instance.GetString("MessageTitle_VehicleWeaponUnderbarrel"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } frmSelectWeapon frmPickWeapon = new frmSelectWeapon(_objCharacter); frmPickWeapon.ShowDialog(this); // Make sure the dialogue window was not canceled. if (frmPickWeapon.DialogResult == DialogResult.Cancel) return; // Open the Weapons XML file and locate the selected piece. XmlDocument objXmlDocument = XmlManager.Instance.Load("weapons.xml"); XmlNode objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + frmPickWeapon.SelectedWeapon + "\"]"); TreeNode objNode = new TreeNode(); Weapon objWeapon = new Weapon(_objCharacter); objWeapon.Create(objXmlWeapon, _objCharacter, objNode, cmsVehicleWeapon, cmsVehicleWeaponAccessory); objWeapon.DiscountCost = frmPickWeapon.BlackMarketDiscount; objWeapon.VehicleMounted = true; objWeapon.IsUnderbarrelWeapon = true; objSelectedWeapon.UnderbarrelWeapons.Add(objWeapon); objNode.ContextMenuStrip = cmsVehicleWeapon; treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); //treWeapons.SelectedNode = objNode; UpdateCharacterInfo(); }
private void chkVehicleWeaponAccessoryInstalled_CheckedChanged(object sender, EventArgs e) { bool blnAccessory = false; // Locate the the Selected Vehicle Weapon Accessory of Modification. WeaponAccessory objAccessory = _objFunctions.FindVehicleWeaponAccessory(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles); if (objAccessory != null) blnAccessory = true; if (blnAccessory) objAccessory.Installed = chkVehicleWeaponAccessoryInstalled.Checked; else { // If this isn't an Accessory, then it must be a Vehicle Mod. Vehicle objFoundVehicle = new Vehicle(_objCharacter); VehicleMod objVehicleMod = _objFunctions.FindVehicleMod(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (objVehicleMod != null) objVehicleMod.Installed = chkVehicleWeaponAccessoryInstalled.Checked; else { // If everything else has failed, we're left with a Vehicle Weapon. Weapon objWeapon = _objFunctions.FindVehicleWeapon(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); objWeapon.Installed = chkVehicleWeaponAccessoryInstalled.Checked; } } _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); 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 cmdAddVehicle_Click(object sender, EventArgs e) { frmSelectVehicle frmPickVehicle = new frmSelectVehicle(_objCharacter); frmPickVehicle.ShowDialog(this); // Make sure the dialogue window was not canceled. if (frmPickVehicle.DialogResult == DialogResult.Cancel) return; // Open the Vehicles XML file and locate the selected piece. XmlDocument objXmlDocument = XmlManager.Instance.Load("vehicles.xml"); XmlNode objXmlVehicle = objXmlDocument.SelectSingleNode("/chummer/vehicles/vehicle[name = \"" + frmPickVehicle.SelectedVehicle + "\"]"); TreeNode objNode = new TreeNode(); Vehicle objVehicle = new Vehicle(_objCharacter); objVehicle.Create(objXmlVehicle, objNode, cmsVehicle, cmsVehicleGear, cmsVehicleWeapon, cmsVehicleWeaponAccessory); // Update the Used Vehicle information if applicable. if (frmPickVehicle.UsedVehicle) { objVehicle.Avail = frmPickVehicle.UsedAvail; objVehicle.Cost = frmPickVehicle.UsedCost.ToString(); } objVehicle.BlackMarketDiscount = frmPickVehicle.BlackMarketDiscount; _objCharacter.Vehicles.Add(objVehicle); objNode.ContextMenuStrip = cmsVehicle; treVehicles.Nodes[0].Nodes.Add(objNode); treVehicles.Nodes[0].Expand(); treVehicles.SelectedNode = objNode; UpdateCharacterInfo(); RefreshSelectedVehicle(); _blnIsDirty = true; UpdateWindowTitle(); if (frmPickVehicle.AddAgain) cmdAddVehicle_Click(sender, e); }
private void tsVehicleAddWeaponWeapon_Click(object sender, EventArgs e) { VehicleMod objMod = new VehicleMod(_objCharacter); // Make sure that a Weapon Mount has been selected. try { // Attempt to locate the selected VehicleMod. Vehicle objFoundVehicle = new Vehicle(_objCharacter); objMod = _objFunctions.FindVehicleMod(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objFoundVehicle); if (!objMod.Name.Contains("Weapon Mount") && !objMod.Name.StartsWith("Mechanical Arm") || objMod.WeaponMountCategories == "") { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotAddWeapon"), LanguageManager.Instance.GetString("MessageTitle_CannotAddWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } catch { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotAddWeapon"), LanguageManager.Instance.GetString("MessageTitle_CannotAddWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } frmSelectWeapon frmPickWeapon = new frmSelectWeapon(_objCharacter); frmPickWeapon.LimitToCategories = objMod.WeaponMountCategories; frmPickWeapon.ShowDialog(); if (frmPickWeapon.DialogResult == DialogResult.Cancel) return; // Open the Weapons XML file and locate the selected piece. XmlDocument objXmlDocument = XmlManager.Instance.Load("weapons.xml"); XmlNode objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + frmPickWeapon.SelectedWeapon + "\"]"); TreeNode objNode = new TreeNode(); Weapon objWeapon = new Weapon(_objCharacter); objWeapon.Create(objXmlWeapon, _objCharacter, objNode, cmsVehicleWeapon, cmsVehicleWeaponAccessory); objWeapon.DiscountCost = frmPickWeapon.BlackMarketDiscount; objWeapon.VehicleMounted = true; objMod.Weapons.Add(objWeapon); objNode.ContextMenuStrip = cmsVehicleWeapon; treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); if (frmPickWeapon.AddAgain) tsVehicleAddWeaponWeapon_Click(sender, e); UpdateCharacterInfo(); }
private void tsVehicleGearNotes_Click(object sender, EventArgs e) { try { bool blnFound = false; Vehicle objVehicle = new Vehicle(_objCharacter); Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objVehicle); if (objGear != null) blnFound = true; if (blnFound) { frmNotes frmItemNotes = new frmNotes(); frmItemNotes.Notes = objGear.Notes; string strOldValue = objGear.Notes; frmItemNotes.ShowDialog(this); if (frmItemNotes.DialogResult == DialogResult.OK) { objGear.Notes = frmItemNotes.Notes; if (objGear.Notes != strOldValue) { _blnIsDirty = true; UpdateWindowTitle(); } } if (objGear.Notes != string.Empty) treVehicles.SelectedNode.ForeColor = Color.SaddleBrown; else treVehicles.SelectedNode.ForeColor = SystemColors.WindowText; treVehicles.SelectedNode.ToolTipText = CommonFunctions.WordWrap(objGear.Notes, 100); } } catch { } }
private void tsVehicleNotes_Click(object sender, EventArgs e) { Vehicle objVehicle = new Vehicle(_objCharacter); VehicleMod objMod = new VehicleMod(_objCharacter); bool blnFoundVehicle = false; bool blnFoundMod = false; try { foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { if (objCharacterVehicle.InternalId == treVehicles.SelectedNode.Tag.ToString()) { objVehicle = objCharacterVehicle; blnFoundVehicle = true; break; } foreach (VehicleMod objVehicleMod in objCharacterVehicle.Mods) { if (objVehicleMod.InternalId == treVehicles.SelectedNode.Tag.ToString()) { objMod = objVehicleMod; blnFoundMod = true; break; } } } if (blnFoundVehicle) { frmNotes frmItemNotes = new frmNotes(); frmItemNotes.Notes = objVehicle.Notes; string strOldValue = objVehicle.Notes; frmItemNotes.ShowDialog(this); if (frmItemNotes.DialogResult == DialogResult.OK) { objVehicle.Notes = frmItemNotes.Notes; if (objVehicle.Notes != strOldValue) { _blnIsDirty = true; UpdateWindowTitle(); } } if (objVehicle.Notes != string.Empty) treVehicles.SelectedNode.ForeColor = Color.SaddleBrown; else treVehicles.SelectedNode.ForeColor = SystemColors.WindowText; treVehicles.SelectedNode.ToolTipText = CommonFunctions.WordWrap(objVehicle.Notes, 100); } if (blnFoundMod) { frmNotes frmItemNotes = new frmNotes(); frmItemNotes.Notes = objMod.Notes; string strOldValue = objMod.Notes; frmItemNotes.ShowDialog(this); if (frmItemNotes.DialogResult == DialogResult.OK) { objMod.Notes = frmItemNotes.Notes; if (objMod.Notes != strOldValue) { _blnIsDirty = true; UpdateWindowTitle(); } } if (objMod.Notes != string.Empty) treVehicles.SelectedNode.ForeColor = Color.SaddleBrown; else { if (objMod.IncludedInVehicle) treVehicles.SelectedNode.ForeColor = SystemColors.GrayText; else treVehicles.SelectedNode.ForeColor = SystemColors.WindowText; } treVehicles.SelectedNode.ToolTipText = CommonFunctions.WordWrap(objMod.Notes, 100); } } catch { } }
/// <summary> /// Move a Vehicle TreeNode after Drag and Drop. /// </summary> /// <param name="intNewIndex">Node's new index.</param> /// <param name="objDestination">Destination Node.</param> public void MoveVehicleNode(int intNewIndex, TreeNode objDestination, TreeView treVehicles) { Vehicle objVehicle = new Vehicle(_objCharacter); // Locate the currently selected Vehicle. foreach (Vehicle objCharacterVehicle in _objCharacter.Vehicles) { if (objCharacterVehicle.InternalId == treVehicles.SelectedNode.Tag.ToString()) { objVehicle = objCharacterVehicle; break; } } _objCharacter.Vehicles.Remove(objVehicle); if (intNewIndex > _objCharacter.Weapons.Count) _objCharacter.Vehicles.Add(objVehicle); else _objCharacter.Vehicles.Insert(intNewIndex, objVehicle); TreeNode objNewParent = objDestination; while (objNewParent.Level > 0) objNewParent = objNewParent.Parent; TreeNode objOldParent = treVehicles.SelectedNode; while (objOldParent.Level > 0) objOldParent = objOldParent.Parent; TreeNode objClone = treVehicles.SelectedNode; objOldParent.Nodes.Remove(treVehicles.SelectedNode); objNewParent.Nodes.Insert(intNewIndex, objClone); objNewParent.Expand(); }
private void cmdReloadVehicleWeapon_Click(object sender, EventArgs e) { Vehicle objVehicle = new Vehicle(_objCharacter); List<Gear> lstAmmo = new List<Gear>(); List<string> lstCount = new List<string>(); bool blnExternalSource = false; Gear objExternalSource = new Gear(_objCharacter); objExternalSource.Name = "External Source"; // Locate the selected Vehicle Weapon. Weapon objWeapon = _objFunctions.FindVehicleWeapon(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objVehicle); // Determine which loading methods are available to the Weapon. if (objWeapon.CalculatedAmmo().Contains(" or ") || objWeapon.CalculatedAmmo().Contains("x") || objWeapon.CalculatedAmmo().Contains("Special") || objWeapon.CalculatedAmmo().Contains("+")) { string strWeaponAmmo = objWeapon.CalculatedAmmo().ToLower(); if (strWeaponAmmo.Contains("external source")) blnExternalSource = true; // Get rid of external source, special, or belt, and + energy. strWeaponAmmo = strWeaponAmmo.Replace("external source", "100"); strWeaponAmmo = strWeaponAmmo.Replace("special", "100"); strWeaponAmmo = strWeaponAmmo.Replace(" + energy", ""); strWeaponAmmo = strWeaponAmmo.Replace(" or belt", ""); string[] strSplit = new string[] { " or " }; string[] strAmmos = strWeaponAmmo.Split(strSplit, StringSplitOptions.RemoveEmptyEntries); foreach (string strAmmo in strAmmos) { string strThisAmmo = strAmmo; if (strThisAmmo.StartsWith("2x") || strThisAmmo.StartsWith("3x") || strThisAmmo.StartsWith("4x")) strThisAmmo = strThisAmmo.Substring(2, strThisAmmo.Length - 2); if (strThisAmmo.EndsWith("x2") || strThisAmmo.EndsWith("x3") || strThisAmmo.EndsWith("x4")) strThisAmmo = strThisAmmo.Substring(0, strThisAmmo.Length - 2); if (strThisAmmo.Contains("(")) strThisAmmo = strThisAmmo.Substring(0, strThisAmmo.IndexOf("(")); lstCount.Add(strThisAmmo); } } else { // Nothing weird in the ammo string, so just use the number given. string strAmmo = objWeapon.CalculatedAmmo(); if (strAmmo.Contains("(")) strAmmo = strAmmo.Substring(0, strAmmo.IndexOf("(")); lstCount.Add(strAmmo); } // Find all of the Ammo for the current Weapon that the character is carrying. if (objWeapon.AmmoCategory != "Grenade Launchers" && objWeapon.AmmoCategory != "Missile Launchers" && objWeapon.AmmoCategory != "Mortar Launchers") { // This is a standard Weapon, so consume traditional Ammunition. foreach (Gear objAmmo in objVehicle.Gear) { if (objAmmo.Quantity > 0) { if (objAmmo.Category == "Ammunition" && objAmmo.Extra == objWeapon.AmmoCategory) lstAmmo.Add(objAmmo); } } } else { if (objWeapon.AmmoCategory == "Grenade Launchers") { // Grenade Launchers can only use Grenades. foreach (Gear objAmmo in objVehicle.Gear) { if (objAmmo.Quantity > 0) { if (objAmmo.Category == "Ammunition" && objAmmo.Name.StartsWith("Minigrenade:")) lstAmmo.Add(objAmmo); } } } if (objWeapon.AmmoCategory == "Missile Launchers") { // Missile Launchers can only use Missiles and Rockets. foreach (Gear objAmmo in objVehicle.Gear) { if (objAmmo.Quantity > 0) { if (objAmmo.Category == "Ammunition" && (objAmmo.Name.StartsWith("Missile:") || objAmmo.Name.StartsWith("Rocket:"))) lstAmmo.Add(objAmmo); } } } if (objWeapon.AmmoCategory == "Mortar Launchers") { // Mortar Launchers can only use Mortars. foreach (Gear objAmmo in objVehicle.Gear) { if (objAmmo.Quantity > 0) { if (objAmmo.Category == "Ammunition" && objAmmo.Name.StartsWith("Mortar Round:")) lstAmmo.Add(objAmmo); } } } } // If the Weapon is allowed to use an External Source, put in an External Source item. if (blnExternalSource) lstAmmo.Add(objExternalSource); // Make sure the character has some form of Ammunition for this Weapon. if (lstAmmo.Count == 0 && objWeapon.RequireAmmo) { MessageBox.Show(LanguageManager.Instance.GetString("Message_OutOfAmmoType").Replace("{0}", objWeapon.DisplayAmmoCategory), LanguageManager.Instance.GetString("MessageTitle_OutOfAmmo"), MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } if (!objWeapon.RequireAmmo) { // If the Weapon does not require Ammo, clear the Ammo list and just use External Source. lstAmmo.Clear(); lstAmmo.Add(objExternalSource); } // Show the Ammunition Selection window. frmReload frmReloadWeapon = new frmReload(); frmReloadWeapon.Ammo = lstAmmo; frmReloadWeapon.Count = lstCount; frmReloadWeapon.ShowDialog(this); if (frmReloadWeapon.DialogResult == DialogResult.Cancel) return; // Return any unspent rounds to the Ammo. if (objWeapon.AmmoRemaining > 0) { foreach (Gear objAmmo in objVehicle.Gear) { if (objAmmo.InternalId == objWeapon.AmmoLoaded) { objAmmo.Quantity += objWeapon.AmmoRemaining; // Refresh the Vehicle tree. foreach (TreeNode objVehicleNode in treVehicles.Nodes[0].Nodes) { if (objVehicle.InternalId == objVehicleNode.Tag.ToString()) { foreach (TreeNode objNode in objVehicleNode.Nodes) { if (objAmmo.InternalId == objNode.Tag.ToString()) { objNode.Text = objAmmo.DisplayName; break; } } } } break; } } } Gear objSelectedAmmo = new Gear(_objCharacter); int intQty = frmReloadWeapon.SelectedCount; // If an External Source is not being used, consume ammo. if (frmReloadWeapon.SelectedAmmo != objExternalSource.InternalId) { foreach (Gear objGear in objVehicle.Gear) { if (objGear.InternalId == frmReloadWeapon.SelectedAmmo) { objSelectedAmmo = objGear; break; } } // Deduct the ammo qty from the ammo. If there isn't enough remaining, use whatever is left. if (objSelectedAmmo.Quantity > intQty) objSelectedAmmo.Quantity -= intQty; else { intQty = objSelectedAmmo.Quantity; objSelectedAmmo.Quantity = 0; } // Refresh the Vehicle tree. foreach (TreeNode objVehicleNode in treVehicles.Nodes[0].Nodes) { if (objVehicle.InternalId == objVehicleNode.Tag.ToString()) { foreach (TreeNode objNode in objVehicleNode.Nodes) { if (objSelectedAmmo.InternalId == objNode.Tag.ToString()) { objNode.Text = objSelectedAmmo.DisplayName; break; } } } } } else { objSelectedAmmo = objExternalSource; } objWeapon.AmmoRemaining = intQty; objWeapon.AmmoLoaded = objSelectedAmmo.InternalId; lblVehicleWeaponAmmoRemaining.Text = intQty.ToString(); RefreshSelectedVehicle(); _blnIsDirty = true; UpdateWindowTitle(); }