コード例 #1
0
ファイル: CharacterShared.cs プロジェクト: argo2445/chummer5a
        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;
        }
コード例 #2
0
ファイル: frmTest.cs プロジェクト: argo2445/chummer5a
        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";
                }
            }
        }
コード例 #3
0
ファイル: clsMainController.cs プロジェクト: Rockzo/chummer5a
        /// <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();
        }
コード例 #4
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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();
        }
コード例 #5
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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();
        }
コード例 #6
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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();
        }
コード例 #7
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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;
            }
        }
コード例 #8
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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);
            }
        }
コード例 #9
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        /// <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;
                    }
                }
            }
        }
コード例 #10
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        /// <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;
        }
コード例 #11
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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();
        }
コード例 #12
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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();
        }
コード例 #13
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        /// <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();
        }
コード例 #14
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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
                    {
                    }
                }
            }
        }
コード例 #15
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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();
        }
コード例 #16
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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;
                }
            }
        }
コード例 #17
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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();
        }
コード例 #18
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
 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);
 }
コード例 #19
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
 /// <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;
         }
     }
 }
コード例 #20
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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);
        }
コード例 #21
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        /// <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;
            }
        }
コード例 #22
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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();
        }
コード例 #23
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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();
        }
コード例 #24
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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();
        }
コード例 #25
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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);
        }
コード例 #26
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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();
        }
コード例 #27
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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
            {
            }
        }
コード例 #28
0
ファイル: frmCreate.cs プロジェクト: argo2445/chummer5a
        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
            {
            }
        }
コード例 #29
0
ファイル: clsMainController.cs プロジェクト: Rockzo/chummer5a
        /// <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();
        }
コード例 #30
0
ファイル: frmCareer.cs プロジェクト: argo2445/chummer5a
        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();
        }