private void tsVehicleAddWeaponModification_Click(object sender, EventArgs e) { // Attempt to locate the selected VehicleWeapon. 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) { MessageBox.Show(LanguageManager.Instance.GetString("Message_VehicleWeaponMods"), LanguageManager.Instance.GetString("MessageTitle_VehicleWeaponMods"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } frmSelectVehicleMod frmPickVehicleMod = new frmSelectVehicleMod(_objCharacter); // Make sure the Weapon allows Modifications to be added to it. // Open the Weapons XML file and locate the selected Weapon. XmlDocument objXmlDocument = XmlManager.Instance.Load("weapons.xml"); XmlNode objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + objWeapon.Name + "\"]"); if (objXmlWeapon == null) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotModifyWeaponMod"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (objXmlWeapon["allowmod"] != null) { if (objXmlWeapon["allowmod"].InnerText == "false") { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotModifyWeaponMod"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } // Set the Weapon properties for the window. frmPickVehicleMod.WeaponCost = objWeapon.Cost; frmPickVehicleMod.TotalWeaponCost = objWeapon.TotalCost; frmPickVehicleMod.ModMultiplier = objWeapon.ModMultiplier; frmPickVehicleMod.InputFile = "weapons"; frmPickVehicleMod.ShowDialog(this); // Make sure the dialogue window was not canceled. if (frmPickVehicleMod.DialogResult == DialogResult.Cancel) return; // Locate the selected piece. XmlNode objXmlMod = objXmlDocument.SelectSingleNode("/chummer/mods/mod[name = \"" + frmPickVehicleMod.SelectedMod + "\"]"); TreeNode objNode = new TreeNode(); WeaponMod objMod = new WeaponMod(_objCharacter); objMod.Create(objXmlMod, objNode); objMod.Rating = frmPickVehicleMod.SelectedRating; objMod.Parent = objWeapon; objWeapon.WeaponMods.Add(objMod); objNode.Text = objMod.DisplayName; objNode.ContextMenuStrip = cmsVehicleWeaponMod; treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); if (frmPickVehicleMod.AddAgain) tsVehicleAddWeaponModification_Click(sender, e); UpdateCharacterInfo(); }
private void tsVehicleAddMod_Click(object sender, EventArgs e) { // Make sure a parent items is selected, then open the Select Vehicle Mod window. try { if (treVehicles.SelectedNode.Level == 0) { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectVehicle"), LanguageManager.Instance.GetString("MessageTitle_SelectVehicle"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } catch { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectVehicle"), LanguageManager.Instance.GetString("MessageTitle_SelectVehicle"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (treVehicles.SelectedNode.Level > 1) treVehicles.SelectedNode = treVehicles.SelectedNode.Parent; Vehicle objSelectedVehicle = _objFunctions.FindVehicle(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles); frmSelectVehicleMod frmPickVehicleMod = new frmSelectVehicleMod(_objCharacter); // Set the Vehicle properties for the window. frmPickVehicleMod.VehicleCost = Convert.ToInt32(objSelectedVehicle.Cost); frmPickVehicleMod.Body = objSelectedVehicle.TotalBody; frmPickVehicleMod.Seats = objSelectedVehicle.Seats; frmPickVehicleMod.Handling = objSelectedVehicle.Handling; frmPickVehicleMod.Speed = objSelectedVehicle.Speed; frmPickVehicleMod.Accel = objSelectedVehicle.Accel; frmPickVehicleMod.DeviceRating = objSelectedVehicle.DeviceRating; frmPickVehicleMod.HasModularElectronics = objSelectedVehicle.HasModularElectronics(); frmPickVehicleMod.ShowDialog(this); // Make sure the dialogue window was not canceled. if (frmPickVehicleMod.DialogResult == DialogResult.Cancel) return; // Open the Vehicles XML file and locate the selected piece. XmlDocument objXmlDocument = XmlManager.Instance.Load("vehicles.xml"); XmlNode objXmlMod = objXmlDocument.SelectSingleNode("/chummer/mods/mod[name = \"" + frmPickVehicleMod.SelectedMod + "\"]"); TreeNode objNode = new TreeNode(); VehicleMod objMod = new VehicleMod(_objCharacter); objMod.Create(objXmlMod, objNode, frmPickVehicleMod.SelectedRating); // Make sure that the Armor Rating does not exceed the maximum allowed by the Vehicle. if (objMod.Name.StartsWith("Armor")) { if (objMod.Rating > objSelectedVehicle.MaxArmor) { objMod.Rating = objSelectedVehicle.MaxArmor; objNode.Text = objMod.DisplayName; } } objSelectedVehicle.Mods.Add(objMod); objNode.ContextMenuStrip = cmsVehicle; treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); RefreshSelectedVehicle(); // Check for Improved Sensor bonus. if (objMod.Bonus != null) { if (objMod.Bonus["selecttext"] != null) { frmSelectText frmPickText = new frmSelectText(); frmPickText.Description = LanguageManager.Instance.GetString("String_Improvement_SelectText").Replace("{0}", objMod.DisplayNameShort); frmPickText.ShowDialog(this); objMod.Extra = frmPickText.SelectedValue; objNode.Text = objMod.DisplayName; } if (objMod.Bonus["improvesensor"] != null) { ChangeVehicleSensor(objSelectedVehicle, true); } } _blnIsDirty = true; UpdateWindowTitle(); if (frmPickVehicleMod.AddAgain) tsVehicleAddMod_Click(sender, e); }
private void tsWeaponAddModification_Click(object sender, EventArgs e) { // Make sure a parent item is selected, then open the Select Accessory window. try { if (treWeapons.SelectedNode.Level == 0) { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectWeaponMod"), LanguageManager.Instance.GetString("MessageTitle_SelectWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } catch { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectWeaponMod"), LanguageManager.Instance.GetString("MessageTitle_SelectWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Locate the Weapon that is selected in the Tree. Weapon objWeapon = (Weapon)_objFunctions.FindEquipment(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons, typeof(Weapon)); frmSelectVehicleMod frmPickVehicleMod = new frmSelectVehicleMod(_objCharacter); // Make sure the Weapon allows Modifications to be added to it. // Open the Weapons XML file and locate the selected Weapon. XmlDocument objXmlDocument = XmlManager.Instance.Load("weapons.xml"); XmlNode objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/weapons/weapon[id = \"" + objWeapon.ExternalId + "\"]"); if (objXmlWeapon == null) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotModifyWeaponMod"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (objXmlWeapon["allowmod"] != null) { if (objXmlWeapon["allowmod"].InnerText == "false") { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotModifyWeaponMod"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } // Set the Weapon properties for the window. frmPickVehicleMod.WeaponCost = objWeapon.Cost; frmPickVehicleMod.TotalWeaponCost = objWeapon.TotalCost; frmPickVehicleMod.ModMultiplier = objWeapon.ModMultiplier; frmPickVehicleMod.WindowMode = frmSelectVehicleMod.Mode.WeaponMod; frmPickVehicleMod.ShowDialog(this); // Make sure the dialogue window was not canceled. if (frmPickVehicleMod.DialogResult == DialogResult.Cancel) return; // Locate the selected piece. XmlNode objXmlMod = objXmlDocument.SelectSingleNode("/chummer/mods/mod[id = \"" + frmPickVehicleMod.SelectedMod + "\"]"); TreeNode objNode = new TreeNode(); WeaponMod objMod = new WeaponMod(_objCharacter); objMod.Create(objXmlMod, objNode); objMod.Rating = frmPickVehicleMod.SelectedRating; objMod.Parent = objWeapon; objWeapon.WeaponMods.Add(objMod); objNode.Text = objMod.DisplayName; objNode.ContextMenuStrip = cmsWeaponMod; treWeapons.SelectedNode.Nodes.Add(objNode); treWeapons.SelectedNode.Expand(); UpdateCharacterInfo(); RefreshSelectedWeapon(); if (frmPickVehicleMod.AddAgain) tsWeaponAddModification_Click(sender, e); }
private void tsWeaponAddModification_Click(object sender, EventArgs e) { // Make sure a parent item is selected, then open the Select Accessory window. try { if (treWeapons.SelectedNode.Level == 0) { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectWeaponMod"), LanguageManager.Instance.GetString("MessageTitle_SelectWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } catch { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectWeaponMod"), LanguageManager.Instance.GetString("MessageTitle_SelectWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } // Locate the Weapon that is selected in the Tree. Weapon objWeapon = _objFunctions.FindWeapon(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons); frmSelectVehicleMod frmPickVehicleMod = new frmSelectVehicleMod(_objCharacter, true); // Make sure the Weapon allows Modifications to be added to it. // Open the Weapons XML file and locate the selected Weapon. XmlDocument objXmlDocument = XmlManager.Instance.Load("weapons.xml"); XmlNode objXmlWeapon = objXmlDocument.SelectSingleNode("/chummer/weapons/weapon[name = \"" + objWeapon.Name + "\"]"); if (objXmlWeapon == null) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotModifyWeaponMod"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (objXmlWeapon["allowmod"] != null) { if (objXmlWeapon["allowmod"].InnerText == "false") { MessageBox.Show(LanguageManager.Instance.GetString("Message_CannotModifyWeaponMod"), LanguageManager.Instance.GetString("MessageTitle_CannotModifyWeapon"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } // Set the Weapon properties for the window. frmPickVehicleMod.WeaponCost = objWeapon.Cost; frmPickVehicleMod.TotalWeaponCost = objWeapon.TotalCost; frmPickVehicleMod.ModMultiplier = objWeapon.ModMultiplier; frmPickVehicleMod.InputFile = "weapons"; frmPickVehicleMod.ShowDialog(this); // Make sure the dialogue window was not canceled. if (frmPickVehicleMod.DialogResult == DialogResult.Cancel) return; // Locate the selected piece. XmlNode objXmlMod = objXmlDocument.SelectSingleNode("/chummer/mods/mod[name = \"" + frmPickVehicleMod.SelectedMod + "\"]"); TreeNode objNode = new TreeNode(); WeaponMod objMod = new WeaponMod(_objCharacter); objMod.Create(objXmlMod, objNode); objMod.Rating = frmPickVehicleMod.SelectedRating; objMod.Parent = objWeapon; // Do not allow the user to add a new Weapon Mod if the Weapon's Capacity has been reached. if (_objOptions.EnforceCapacity && objWeapon.SlotsRemaining - objMod.Slots < 0) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CapacityReached"), LanguageManager.Instance.GetString("MessageTitle_CapacityReached"), MessageBoxButtons.OK, MessageBoxIcon.Information); if (frmPickVehicleMod.AddAgain) tsWeaponAddModification_Click(sender, e); return; } // Check the item's Cost and make sure the character can afford it. int intOriginalCost = objWeapon.TotalCost; objWeapon.WeaponMods.Add(objMod); int intCost = objWeapon.TotalCost - intOriginalCost; // Apply a markup if applicable. if (frmPickVehicleMod.Markup != 0) { double dblCost = Convert.ToDouble(intCost, GlobalOptions.Instance.CultureInfo); dblCost *= 1 + (Convert.ToDouble(frmPickVehicleMod.Markup, GlobalOptions.Instance.CultureInfo) / 100.0); intCost = Convert.ToInt32(dblCost); } // Multiply the cost if applicable. if (objMod.TotalAvail.EndsWith(LanguageManager.Instance.GetString("String_AvailRestricted")) && _objOptions.MultiplyRestrictedCost) intCost *= _objOptions.RestrictedCostMultiplier; if (objMod.TotalAvail.EndsWith(LanguageManager.Instance.GetString("String_AvailForbidden")) && _objOptions.MultiplyForbiddenCost) intCost *= _objOptions.ForbiddenCostMultiplier; if (!frmPickVehicleMod.FreeCost) { if (intCost > _objCharacter.Nuyen) { objWeapon.WeaponMods.Remove(objMod); MessageBox.Show(LanguageManager.Instance.GetString("Message_NotEnoughNuyen"), LanguageManager.Instance.GetString("MessageTitle_NotEnoughNuyen"), MessageBoxButtons.OK, MessageBoxIcon.Information); if (frmPickVehicleMod.AddAgain) tsWeaponAddModification_Click(sender, e); return; } else { // Create the Expense Log Entry. ExpenseLogEntry objExpense = new ExpenseLogEntry(); objExpense.Create(intCost * -1, LanguageManager.Instance.GetString("String_ExpensePurchaseWeaponMod") + " " + objMod.DisplayNameShort, ExpenseType.Nuyen, DateTime.Now); _objCharacter.ExpenseEntries.Add(objExpense); _objCharacter.Nuyen -= intCost; ExpenseUndo objUndo = new ExpenseUndo(); objUndo.CreateNuyen(NuyenExpenseType.AddWeaponMod, objMod.InternalId); objExpense.Undo = objUndo; } } objNode.Text = objMod.DisplayName; objNode.ContextMenuStrip = cmsWeaponMod; treWeapons.SelectedNode.Nodes.Add(objNode); treWeapons.SelectedNode.Expand(); UpdateCharacterInfo(); RefreshSelectedWeapon(); _blnIsDirty = true; UpdateWindowTitle(); if (frmPickVehicleMod.AddAgain) tsWeaponAddModification_Click(sender, e); }
private void tsVehicleAddMod_Click(object sender, EventArgs e) { // Make sure a parent items is selected, then open the Select Vehicle Mod window. try { if (treVehicles.SelectedNode.Level == 0) { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectVehicle"), LanguageManager.Instance.GetString("MessageTitle_SelectVehicle"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } catch { MessageBox.Show(LanguageManager.Instance.GetString("Message_SelectVehicle"), LanguageManager.Instance.GetString("MessageTitle_SelectVehicle"), MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (treVehicles.SelectedNode.Level > 1) treVehicles.SelectedNode = treVehicles.SelectedNode.Parent; Vehicle objSelectedVehicle = _objFunctions.FindVehicle(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles); frmSelectVehicleMod frmPickVehicleMod = new frmSelectVehicleMod(_objCharacter, true); // Set the Vehicle properties for the window. frmPickVehicleMod.VehicleCost = Convert.ToInt32(objSelectedVehicle.Cost); frmPickVehicleMod.Body = objSelectedVehicle.Body; frmPickVehicleMod.Speed = objSelectedVehicle.Speed; frmPickVehicleMod.Accel = objSelectedVehicle.Accel; frmPickVehicleMod.DeviceRating = objSelectedVehicle.DeviceRating; frmPickVehicleMod.HasModularElectronics = objSelectedVehicle.HasModularElectronics(); frmPickVehicleMod.ShowDialog(this); // Make sure the dialogue window was not canceled. if (frmPickVehicleMod.DialogResult == DialogResult.Cancel) return; // Open the Vehicles XML file and locate the selected piece. XmlDocument objXmlDocument = XmlManager.Instance.Load("vehicles.xml"); XmlNode objXmlMod = objXmlDocument.SelectSingleNode("/chummer/mods/mod[name = \"" + frmPickVehicleMod.SelectedMod + "\"]"); TreeNode objNode = new TreeNode(); VehicleMod objMod = new VehicleMod(_objCharacter); objMod.Create(objXmlMod, objNode, frmPickVehicleMod.SelectedRating); // Make sure that the Armor Rating does not exceed the maximum allowed by the Vehicle. if (objMod.Name.StartsWith("Armor")) { if (objMod.Rating > objSelectedVehicle.MaxArmor) { objMod.Rating = objSelectedVehicle.MaxArmor; objNode.Text = objMod.DisplayName; } } // Check the item's Cost and make sure the character can afford it. int intOriginalCost = objSelectedVehicle.TotalCost; objSelectedVehicle.Mods.Add(objMod); // Do not allow the user to add a new Vehicle Mod if the Vehicle's Capacity has been reached. if (_objOptions.EnforceCapacity && objSelectedVehicle.Slots < objSelectedVehicle.SlotsUsed) { MessageBox.Show(LanguageManager.Instance.GetString("Message_CapacityReached"), LanguageManager.Instance.GetString("MessageTitle_CapacityReached"), MessageBoxButtons.OK, MessageBoxIcon.Information); objSelectedVehicle.Mods.Remove(objMod); if (frmPickVehicleMod.AddAgain) tsVehicleAddMod_Click(sender, e); return; } int intCost = objSelectedVehicle.TotalCost - intOriginalCost; // Apply a markup if applicable. if (frmPickVehicleMod.Markup != 0) { double dblCost = Convert.ToDouble(intCost, GlobalOptions.Instance.CultureInfo); dblCost *= 1 + (Convert.ToDouble(frmPickVehicleMod.Markup, GlobalOptions.Instance.CultureInfo) / 100.0); intCost = Convert.ToInt32(dblCost); } // Multiply the cost if applicable. if (objMod.TotalAvail.EndsWith(LanguageManager.Instance.GetString("String_AvailRestricted")) && _objOptions.MultiplyRestrictedCost) intCost *= _objOptions.RestrictedCostMultiplier; if (objMod.TotalAvail.EndsWith(LanguageManager.Instance.GetString("String_AvailForbidden")) && _objOptions.MultiplyForbiddenCost) intCost *= _objOptions.ForbiddenCostMultiplier; if (!frmPickVehicleMod.FreeCost) { if (intCost > _objCharacter.Nuyen) { objSelectedVehicle.Mods.Remove(objMod); MessageBox.Show(LanguageManager.Instance.GetString("Message_NotEnoughNuyen"), LanguageManager.Instance.GetString("MessageTitle_NotEnoughNuyen"), MessageBoxButtons.OK, MessageBoxIcon.Information); if (frmPickVehicleMod.AddAgain) tsVehicleAddMod_Click(sender, e); return; } else { // Create the Expense Log Entry. ExpenseLogEntry objExpense = new ExpenseLogEntry(); objExpense.Create(intCost * -1, LanguageManager.Instance.GetString("String_ExpensePurchaseVehicleMod") + " " + objMod.DisplayNameShort, ExpenseType.Nuyen, DateTime.Now); _objCharacter.ExpenseEntries.Add(objExpense); _objCharacter.Nuyen -= intCost; ExpenseUndo objUndo = new ExpenseUndo(); objUndo.CreateNuyen(NuyenExpenseType.AddVehicleMod, objMod.InternalId); objExpense.Undo = objUndo; } } objNode.ContextMenuStrip = cmsVehicle; treVehicles.SelectedNode.Nodes.Add(objNode); treVehicles.SelectedNode.Expand(); RefreshSelectedVehicle(); // Check for Improved Sensor bonus. if (objMod.Bonus != null) { if (objMod.Bonus["selecttext"] != null) { frmSelectText frmPickText = new frmSelectText(); frmPickText.Description = LanguageManager.Instance.GetString("String_Improvement_SelectText").Replace("{0}", objMod.DisplayNameShort); frmPickText.ShowDialog(this); objMod.Extra = frmPickText.SelectedValue; objNode.Text = objMod.DisplayName; } if (objMod.Bonus["improvesensor"] != null) { ChangeVehicleSensor(objSelectedVehicle, true); } } _blnIsDirty = true; UpdateWindowTitle(); if (frmPickVehicleMod.AddAgain) tsVehicleAddMod_Click(sender, e); }
private void cmdAddMod_Click(object sender, EventArgs e) { bool blnAddAgain; XmlNode xmlSelectedMount = null; string strSelectedMount = cboSize.SelectedValue?.ToString(); if (!string.IsNullOrEmpty(strSelectedMount)) { xmlSelectedMount = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + strSelectedMount + "\"]"); } int intSlots = Convert.ToInt32(xmlSelectedMount?["slots"]?.InnerText); string[] astrSelectedValues = { cboVisibility.SelectedValue?.ToString(), cboFlexibility.SelectedValue?.ToString(), cboControl.SelectedValue?.ToString() }; for (int i = 0; i < astrSelectedValues.Length; ++i) { string strSelectedId = astrSelectedValues[i]; if (!string.IsNullOrEmpty(strSelectedId)) { XmlNode xmlLoopNode = _xmlDoc.SelectSingleNode("/chummer/weaponmounts/weaponmount[id = \"" + strSelectedId + "\"]"); if (xmlLoopNode != null) { intSlots += Convert.ToInt32(xmlLoopNode["slots"]?.InnerText); } } } foreach (VehicleMod objMod in _lstMods) { intSlots += objMod.CalculatedSlots; } string strSpaceCharacter = LanguageManager.GetString("String_Space", GlobalOptions.Language); TreeNode objModsParentNode = treMods.FindNode("Node_AdditionalMods"); do { frmSelectVehicleMod frmPickVehicleMod = new frmSelectVehicleMod(_objCharacter, _objMount?.Mods) { // Pass the selected vehicle on to the form. SelectedVehicle = _objVehicle, VehicleMountMods = true, WeaponMountSlots = intSlots }; frmPickVehicleMod.ShowDialog(this); // Make sure the dialogue window was not canceled. if (frmPickVehicleMod.DialogResult == DialogResult.Cancel) { frmPickVehicleMod.Dispose(); break; } blnAddAgain = frmPickVehicleMod.AddAgain; XmlDocument objXmlDocument = XmlManager.Load("vehicles.xml"); XmlNode objXmlMod = objXmlDocument.SelectSingleNode("/chummer/weaponmountmods/mod[id = \"" + frmPickVehicleMod.SelectedMod + "\"]"); VehicleMod objMod = new VehicleMod(_objCharacter) { DiscountCost = frmPickVehicleMod.BlackMarketDiscount }; objMod.Create(objXmlMod, frmPickVehicleMod.SelectedRating, _objVehicle, frmPickVehicleMod.Markup); // Check the item's Cost and make sure the character can afford it. decimal decOriginalCost = _objVehicle.TotalCost; if (frmPickVehicleMod.FreeCost) { objMod.Cost = "0"; } frmPickVehicleMod.Dispose(); // Do not allow the user to add a new Vehicle Mod if the Vehicle's Capacity has been reached. if (_objCharacter.Options.EnforceCapacity) { bool blnOverCapacity = false; if (_objCharacter.Options.BookEnabled("R5")) { if (_objVehicle.IsDrone && GlobalOptions.Dronemods) { if (_objVehicle.DroneModSlotsUsed > _objVehicle.DroneModSlots) { blnOverCapacity = true; } } else { int intUsed = _objVehicle.CalcCategoryUsed(objMod.Category); int intAvail = _objVehicle.CalcCategoryAvail(objMod.Category); if (intUsed > intAvail) { blnOverCapacity = true; } } } else if (_objVehicle.Slots < _objVehicle.SlotsUsed) { blnOverCapacity = true; } if (blnOverCapacity) { MessageBox.Show(LanguageManager.GetString("Message_CapacityReached", GlobalOptions.Language), LanguageManager.GetString("MessageTitle_CapacityReached", GlobalOptions.Language), MessageBoxButtons.OK, MessageBoxIcon.Information); continue; } } if (_objCharacter.Created) { decimal decCost = _objVehicle.TotalCost - decOriginalCost; // Multiply the cost if applicable. char chrAvail = objMod.TotalAvailTuple().Suffix; if (chrAvail == 'R' && _objCharacter.Options.MultiplyRestrictedCost) { decCost *= _objCharacter.Options.RestrictedCostMultiplier; } if (chrAvail == 'F' && _objCharacter.Options.MultiplyForbiddenCost) { decCost *= _objCharacter.Options.ForbiddenCostMultiplier; } if (decCost > _objCharacter.Nuyen) { MessageBox.Show(LanguageManager.GetString("Message_NotEnoughNuyen", GlobalOptions.Language), LanguageManager.GetString("MessageTitle_NotEnoughNuyen", GlobalOptions.Language), MessageBoxButtons.OK, MessageBoxIcon.Information); continue; } // Create the Expense Log Entry. ExpenseLogEntry objExpense = new ExpenseLogEntry(_objCharacter); objExpense.Create(decCost * -1, LanguageManager.GetString("String_ExpensePurchaseVehicleMod", GlobalOptions.Language) + strSpaceCharacter + objMod.DisplayNameShort(GlobalOptions.Language), ExpenseType.Nuyen, DateTime.Now); _objCharacter.ExpenseEntries.AddWithSort(objExpense); _objCharacter.Nuyen -= decCost; ExpenseUndo objUndo = new ExpenseUndo(); objUndo.CreateNuyen(NuyenExpenseType.AddVehicleWeaponMountMod, objMod.InternalId); objExpense.Undo = objUndo; } _lstMods.Add(objMod); intSlots += objMod.CalculatedSlots; TreeNode objNewNode = objMod.CreateTreeNode(null, null, null, null, null, null); if (objModsParentNode == null) { objModsParentNode = new TreeNode { Tag = "Node_AdditionalMods", Text = LanguageManager.GetString("Node_AdditionalMods", GlobalOptions.Language) }; treMods.Nodes.Add(objModsParentNode); objModsParentNode.Expand(); } objModsParentNode.Nodes.Add(objNewNode); treMods.SelectedNode = objNewNode; }while (blnAddAgain); }