Esempio n. 1
0
        /// <summary>
        /// Refresh the currently-selected Vehicle.
        /// </summary>
        private void RefreshSelectedVehicle()
        {
            lblVehicleAttack.Text = "";
            lblVehicleSleaze.Text = "";
            lblVehicleDataProcessing.Text = "";
            lblVehicleFirewall.Text = "";

            bool blnClear = false;
            try
            {
                if (treVehicles.SelectedNode.Level == 0)
                    blnClear = true;
            }
            catch
            {
                blnClear = true;
            }
            if (blnClear)
            {
                lblVehicleWeaponAmmoRemaining.Text = "";
                lblVehicleWeaponName.Text = "";
                lblVehicleWeaponCategory.Text = "";
                lblVehicleWeaponAP.Text = "";
                lblVehicleWeaponDamage.Text = "";
                lblVehicleWeaponMode.Text = "";
                lblVehicleWeaponAmmo.Text = "";
                cmdFireVehicleWeapon.Enabled = false;
                cmdReloadVehicleWeapon.Enabled = false;

                lblVehicleWeaponRangeShort.Text = "";
                lblVehicleWeaponRangeMedium.Text = "";
                lblVehicleWeaponRangeLong.Text = "";
                lblVehicleWeaponRangeExtreme.Text = "";

                lblVehicleGearQty.Text = "";
                cmdVehicleGearReduceQty.Enabled = false;
                cboVehicleWeaponAmmo.Enabled = false;
                return;
            }
            chkVehicleHomeNode.Visible = false;
            cmdVehicleMoveToInventory.Enabled = false;

            if (treVehicles.SelectedNode.Level != 0)
            {
                // Locate the selected Vehicle.
                TreeNode objVehicleNode = new TreeNode();
                objVehicleNode = treVehicles.SelectedNode;
                if (treVehicles.SelectedNode.Level > 1)
                {
                    while (objVehicleNode.Level > 1)
                        objVehicleNode = objVehicleNode.Parent;
                }

                Vehicle objVehicle = _objFunctions.FindVehicle(objVehicleNode.Tag.ToString(), _objCharacter.Vehicles);
                if (objVehicle == null)
                    return;

                // Hide any unused Physical CM boxes.
                panVehicleCM.Visible = true;
                _blnSkipRefresh = true;
                foreach (CheckBox objPhysicalCM in panVehicleCM.Controls.OfType<CheckBox>())
                {
                    if (Convert.ToInt32(objPhysicalCM.Tag.ToString()) <= objVehicle.PhysicalCM)
                    {
                        if (Convert.ToInt32(objPhysicalCM.Tag.ToString()) <= objVehicle.PhysicalCMFilled)
                            objPhysicalCM.Checked = true;
                        else
                            objPhysicalCM.Checked = false;

                        objPhysicalCM.Visible = true;
                    }
                    else
                    {
                        objPhysicalCM.Checked = false;
                        objPhysicalCM.Visible = false;
                        objPhysicalCM.Text = "";
                    }
                }
                _blnSkipRefresh = 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.Text = LanguageManager.Instance.GetString("Label_Rating");
                lblVehicleRating.Text = "";
                _blnSkipRefresh = false;

                lblVehicleName.Text = objVehicle.DisplayNameShort;
                lblVehicleCategory.Text = objVehicle.DisplayCategory;
                lblVehicleAvail.Text = objVehicle.CalculatedAvail;
                lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objVehicle.TotalCost);
                lblVehicleHandling.Text = objVehicle.TotalHandling.ToString();
                lblVehicleAccel.Text = objVehicle.TotalAccel;
                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();
                if (_objOptions.UseCalculatedVehicleSensorRatings)
                    lblVehicleSensor.Text = objVehicle.CalculatedSensor.ToString();
                else
                    lblVehicleSensor.Text = objVehicle.Sensor.ToString();
                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;
                }

                UpdateCharacterInfo();
            }
            else if (treVehicles.SelectedNode.Level == 2)
            {
                panVehicleCM.Visible = true;
                bool blnVehicleMod = false;

                // 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())
                            {
                                lblVehicleName.Text = "";
                                lblVehicleCategory.Text = "";
                                lblVehicleSource.Text = "";
                                lblVehicleHandling.Text = "";
                                lblVehicleAccel.Text = "";
                                lblVehicleSpeed.Text = "";
                                lblVehicleDevice.Text = "";
                                lblVehiclePilot.Text = "";
                                lblVehicleBody.Text = "";
                                lblVehicleArmor.Text = "";
                                lblVehicleSensor.Text = "";
                                lblVehicleAvail.Text = "";
                                lblVehicleCost.Text = "";
                                lblVehicleSlots.Text = "";
                                return;
                            }
                        }
                    }
                }

                // 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 (Convert.ToInt32(objMod.MaxRating) > 0)
                        {
                            _blnSkipRefresh = true;
                            lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating");
                            lblVehicleRating.Text = objMod.Rating.ToString();
                            _blnSkipRefresh = false;
                        }
                        else
                        {
                            _blnSkipRefresh = true;
                            lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Rating");
                            lblVehicleRating.Text = "";
                            _blnSkipRefresh = false;
                        }
                    }
                    else
                    {
                        _blnSkipRefresh = true;
                        lblVehicleRatingLabel.Text = LanguageManager.Instance.GetString("Label_Qty");
                        lblVehicleRating.Text = objMod.Rating.ToString();
                        _blnSkipRefresh = false;
                    }

                    lblVehicleName.Text = objMod.DisplayNameShort;
                    lblVehicleCategory.Text = LanguageManager.Instance.GetString("String_VehicleModification");
                    lblVehicleAvail.Text = objMod.TotalAvail;
                    lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", objMod.TotalCost);
                    lblVehicleHandling.Text = "";
                    lblVehicleAccel.Text = "";
                    lblVehicleSpeed.Text = "";
                    lblVehicleDevice.Text = "";
                    lblVehiclePilot.Text = "";
                    lblVehicleBody.Text = "";
                    lblVehicleArmor.Text = "";
                    lblVehicleSensor.Text = "";
                    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)
                    {
                        lblVehicleRating.Text = "";
                        if (objGear.InternalId == treVehicles.SelectedNode.Tag.ToString())
                        {
                            lblVehicleGearQty.Text = objGear.Quantity.ToString();
                            cmdVehicleGearReduceQty.Enabled = true;

                            if (objGear.Rating > 0)
                                lblVehicleRating.Text = objGear.Rating.ToString();
                        }

                        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 = "";
                        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);

                        cmdVehicleMoveToInventory.Enabled = true;

                        if (objGear.GetType() == typeof(Commlink))
                        {
                            Commlink objCommlink = (Commlink)objGear;
                            lblVehicleDevice.Text = objCommlink.DeviceRating.ToString();
                            lblVehicleAttack.Text = objCommlink.Attack.ToString();
                            lblVehicleSleaze.Text = objCommlink.Sleaze.ToString();
                            lblVehicleDataProcessing.Text = objCommlink.DataProcessing.ToString();
                            lblVehicleFirewall.Text = objCommlink.Firewall.ToString();
                        }

                        if ((_objCharacter.Metatype.EndsWith("A.I.") || _objCharacter.MetatypeCategory == "Technocritters" || _objCharacter.MetatypeCategory == "Protosapients") && objGear.GetType() == typeof(Commlink))
                        {
                            chkVehicleHomeNode.Visible = true;
                            chkVehicleHomeNode.Checked = objGear.HomeNode;
                        }
                    }
                    else
                    {
                        // Look for the selected Vehicle Weapon.
                        Weapon objWeapon = new Weapon(_objCharacter);
                        Vehicle objCurrentVehicle = new Vehicle(_objCharacter);

                        foreach (Vehicle objVehicle in _objCharacter.Vehicles)
                        {
                            objWeapon = _objFunctions.FindWeapon(treVehicles.SelectedNode.Tag.ToString(), objVehicle.Weapons);
                            if (objWeapon != null)
                            {
                                objCurrentVehicle = objVehicle;
                                break;
                            }
                        }

                        lblVehicleWeaponName.Text = objWeapon.DisplayNameShort;
                        lblVehicleWeaponCategory.Text = objWeapon.DisplayCategory;
                        lblVehicleWeaponDamage.Text = objWeapon.CalculatedDamage();
                        lblVehicleWeaponAP.Text = objWeapon.TotalAP;
                        lblVehicleWeaponAmmo.Text = objWeapon.CalculatedAmmo();
                        lblVehicleWeaponMode.Text = objWeapon.CalculatedMode;
                        if (objWeapon.WeaponType == "Ranged" || (objWeapon.WeaponType == "Melee" && objWeapon.Ammo != "0"))
                        {
                            cmdFireVehicleWeapon.Enabled = true;
                            cmdReloadVehicleWeapon.Enabled = true;
                            lblVehicleWeaponAmmoRemaining.Text = objWeapon.AmmoRemaining.ToString();

                            cmsVehicleAmmoSingleShot.Enabled = objWeapon.AllowMode("SS") || objWeapon.AllowMode("SA");
                            cmsVehicleAmmoShortBurst.Enabled = objWeapon.AllowMode("BF");
                            cmsVehicleAmmoLongBurst.Enabled = objWeapon.AllowMode("FA");
                            cmsVehicleAmmoFullBurst.Enabled = objWeapon.AllowMode("FA");
                            cmsVehicleAmmoSuppressiveFire.Enabled = objWeapon.AllowMode("FA");

                            // Melee Weapons with Ammo are considered to be Single Shot.
                            if (objWeapon.WeaponType == "Melee" && objWeapon.Ammo != "0")
                                cmsVehicleAmmoSingleShot.Enabled = true;

                            if (cmsVehicleAmmoFullBurst.Enabled)
                                cmsVehicleAmmoFullBurst.Text = LanguageManager.Instance.GetString("String_FullBurst").Replace("{0}", objWeapon.FullBurst.ToString());
                            if (cmsVehicleAmmoSuppressiveFire.Enabled)
                                cmsVehicleAmmoSuppressiveFire.Text = LanguageManager.Instance.GetString("String_SuppressiveFire").Replace("{0}", objWeapon.Suppressive.ToString());

                            List<ListItem> lstAmmo = new List<ListItem>();
                            int intCurrentSlot = objWeapon.ActiveAmmoSlot;
                            for (int i = 1; i <= objWeapon.AmmoSlots; i++)
                            {
                                Gear objVehicleGear = new Gear(_objCharacter);
                                ListItem objAmmo = new ListItem();
                                objWeapon.ActiveAmmoSlot = i;
                                objVehicleGear = _objFunctions.FindGear(objWeapon.AmmoLoaded, objCurrentVehicle.Gear);
                                objAmmo.Value = i.ToString();

                                string strPlugins = "";
                                foreach (Vehicle objVehicle in _objCharacter.Vehicles)
                                {
                                    foreach (Gear objCurrentAmmo in objVehicle.Gear)
                                    {
                                        if (objCurrentAmmo.InternalId == objWeapon.AmmoLoaded)
                                        {
                                            foreach (Gear objChild in objCurrentAmmo.Children)
                                            {
                                                strPlugins += objChild.DisplayNameShort + ", ";
                                            }
                                        }
                                    }
                                }
                                // Remove the trailing comma.
                                if (strPlugins != "")
                                    strPlugins = strPlugins.Substring(0, strPlugins.Length - 2);

                                if (objVehicleGear == null)
                                {
                                    if (objWeapon.AmmoRemaining == 0)
                                        objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + LanguageManager.Instance.GetString("String_Empty");
                                    else
                                        objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + LanguageManager.Instance.GetString("String_ExternalSource");
                                }
                                else
                                    objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + objVehicleGear.DisplayNameShort;

                                if (strPlugins != "")
                                    objAmmo.Name += " [" + strPlugins + "]";
                                lstAmmo.Add(objAmmo);
                            }
                            _blnSkipRefresh = true;
                            objWeapon.ActiveAmmoSlot = intCurrentSlot;
                            cboVehicleWeaponAmmo.Enabled = true;
                            cboVehicleWeaponAmmo.ValueMember = "Value";
                            cboVehicleWeaponAmmo.DisplayMember = "Name";
                            cboVehicleWeaponAmmo.DataSource = lstAmmo;
                            cboVehicleWeaponAmmo.SelectedValue = objWeapon.ActiveAmmoSlot.ToString();
                            if (cboVehicleWeaponAmmo.SelectedIndex == -1)
                                cboVehicleWeaponAmmo.SelectedIndex = 0;
                            _blnSkipRefresh = false;
                        }

                        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 = "";
                        lblVehicleSlots.Text = "6 (" + objWeapon.SlotsRemaining.ToString() + " " + LanguageManager.Instance.GetString("String_Remaining") + ")";
                        string strBook = _objOptions.LanguageBookShort(objWeapon.Source);
                        string strPage = objWeapon.Page;
                        lblVehicleSource.Text = strBook + " " + strPage;
                        tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objWeapon.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objWeapon.Page);

                        cmdVehicleMoveToInventory.Enabled = true;

                        // Determine the Dice Pool size.
                        int intPilot = objCurrentVehicle.Pilot;
                        int intAutosoft = 0;
                        bool blnAutosoftFound = false;
                        foreach (Gear objAutosoft in objCurrentVehicle.Gear)
                        {
                            if (objAutosoft.Category.StartsWith("Autosofts") && objAutosoft.Name == "Targeting")
                            {
                                if (!blnAutosoftFound)
                                {
                                    if (objAutosoft.Rating > intAutosoft)
                                        intAutosoft = objAutosoft.Rating;
                                    if (objAutosoft.Extra == objWeapon.DisplayCategory)
                                    {
                                        intAutosoft = objAutosoft.Rating;
                                        blnAutosoftFound = true;
                                    }
                                }
                            }
                        }
                        if (intAutosoft == 0)
                            intPilot -= 1;
                        lblVehicleWeaponDicePool.Text = (intPilot + intAutosoft).ToString();
                    }
                }
                if (blnVehicleMod)
                {
                    chkVehicleWeaponAccessoryInstalled.Enabled = true;
                    chkVehicleWeaponAccessoryInstalled.Checked = objMod.Installed;
                }
                else
                    chkVehicleWeaponAccessoryInstalled.Enabled = false;
                chkVehicleIncludedInWeapon.Checked = false;
            }
            else if (treVehicles.SelectedNode.Level == 3)
            {
                panVehicleCM.Visible = true;
                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)
                {
                    lblVehicleRating.Text = "";
                    if (objGear.InternalId == treVehicles.SelectedNode.Tag.ToString())
                    {
                        lblVehicleGearQty.Text = objGear.Quantity.ToString();
                        cmdVehicleGearReduceQty.Enabled = true;

                        if (objGear.Rating > 0)
                            lblVehicleRating.Text = objGear.Rating.ToString();
                    }

                    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 = "";
                    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;
                        lblVehicleDevice.Text = objCommlink.DeviceRating.ToString();
                        lblVehicleAttack.Text = objCommlink.Attack.ToString();
                        lblVehicleSleaze.Text = objCommlink.Sleaze.ToString();
                        lblVehicleDataProcessing.Text = objCommlink.DataProcessing.ToString();
                        lblVehicleFirewall.Text = objCommlink.Firewall.ToString();
                    }

                    if ((_objCharacter.Metatype.EndsWith("A.I.") || _objCharacter.MetatypeCategory == "Technocritters" || _objCharacter.MetatypeCategory == "Protosapients") && objGear.GetType() == typeof(Commlink))
                    {
                        chkVehicleHomeNode.Visible = true;
                        chkVehicleHomeNode.Checked = objGear.HomeNode;
                    }
                }
                else
                {
                    // Look for the selected Vehicle Weapon.
                    Weapon objWeapon = new Weapon(_objCharacter);
                    Vehicle objCurrentVehicle = new Vehicle(_objCharacter);
                    bool blnWeapon = false;

                    objWeapon = _objFunctions.FindVehicleWeapon(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objCurrentVehicle);
                    if (objWeapon != null)
                        blnWeapon = true;

                    if (blnWeapon)
                    {
                        lblVehicleWeaponName.Text = objWeapon.DisplayNameShort;
                        lblVehicleWeaponCategory.Text = objWeapon.DisplayCategory;
                        lblVehicleWeaponDamage.Text = objWeapon.CalculatedDamage();
                        lblVehicleWeaponAP.Text = objWeapon.TotalAP;
                        lblVehicleWeaponAmmo.Text = objWeapon.CalculatedAmmo();
                        lblVehicleWeaponMode.Text = objWeapon.CalculatedMode;
                        if (objWeapon.WeaponType == "Ranged")
                        {
                            cmdFireVehicleWeapon.Enabled = true;
                            cmdReloadVehicleWeapon.Enabled = true;
                            lblVehicleWeaponAmmoRemaining.Text = objWeapon.AmmoRemaining.ToString();

                            cmsVehicleAmmoSingleShot.Enabled = objWeapon.AllowMode("SS") || objWeapon.AllowMode("SA");
                            cmsVehicleAmmoShortBurst.Enabled = objWeapon.AllowMode("BF");
                            cmsVehicleAmmoLongBurst.Enabled = objWeapon.AllowMode("FA");
                            cmsVehicleAmmoFullBurst.Enabled = objWeapon.AllowMode("FA");
                            cmsVehicleAmmoSuppressiveFire.Enabled = objWeapon.AllowMode("FA");
                            if (cmsVehicleAmmoFullBurst.Enabled)
                                cmsVehicleAmmoFullBurst.Text = LanguageManager.Instance.GetString("String_FullBurst").Replace("{0}", objWeapon.FullBurst.ToString());
                            if (cmsVehicleAmmoSuppressiveFire.Enabled)
                                cmsVehicleAmmoSuppressiveFire.Text = LanguageManager.Instance.GetString("String_SuppressiveFire").Replace("{0}", objWeapon.Suppressive.ToString());

                            List<ListItem> lstAmmo = new List<ListItem>();
                            int intCurrentSlot = objWeapon.ActiveAmmoSlot;
                            for (int i = 1; i <= objWeapon.AmmoSlots; i++)
                            {
                                Gear objVehicleGear = new Gear(_objCharacter);
                                ListItem objAmmo = new ListItem();
                                objWeapon.ActiveAmmoSlot = i;
                                objVehicleGear = _objFunctions.FindGear(objWeapon.AmmoLoaded, objCurrentVehicle.Gear);
                                objAmmo.Value = i.ToString();

                                string strPlugins = "";
                                foreach (Vehicle objVehicle in _objCharacter.Vehicles)
                                {
                                    foreach (Gear objCurrentAmmo in objVehicle.Gear)
                                    {
                                        if (objCurrentAmmo.InternalId == objWeapon.AmmoLoaded)
                                        {
                                            foreach (Gear objChild in objCurrentAmmo.Children)
                                            {
                                                strPlugins += objChild.DisplayNameShort + ", ";
                                            }
                                        }
                                    }
                                }
                                // Remove the trailing comma.
                                if (strPlugins != "")
                                    strPlugins = strPlugins.Substring(0, strPlugins.Length - 2);

                                if (objVehicleGear == null)
                                {
                                    if (objWeapon.AmmoRemaining == 0)
                                        objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + LanguageManager.Instance.GetString("String_Empty");
                                    else
                                        objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + LanguageManager.Instance.GetString("String_ExternalSource");
                                }
                                else
                                    objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + objVehicleGear.DisplayNameShort;
                                if (strPlugins != "")
                                    objAmmo.Name += " [" + strPlugins + "]";
                                lstAmmo.Add(objAmmo);
                            }
                            _blnSkipRefresh = true;
                            objWeapon.ActiveAmmoSlot = intCurrentSlot;
                            cboVehicleWeaponAmmo.Enabled = true;
                            cboVehicleWeaponAmmo.ValueMember = "Value";
                            cboVehicleWeaponAmmo.DisplayMember = "Name";
                            cboVehicleWeaponAmmo.DataSource = lstAmmo;
                            cboVehicleWeaponAmmo.SelectedValue = objWeapon.ActiveAmmoSlot.ToString();
                            if (cboVehicleWeaponAmmo.SelectedIndex == -1)
                                cboVehicleWeaponAmmo.SelectedIndex = 0;
                            _blnSkipRefresh = false;
                        }

                        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 = "";
                        lblVehicleSlots.Text = "6 (" + objWeapon.SlotsRemaining.ToString() + " " + LanguageManager.Instance.GetString("String_Remaining") + ")";
                        string strBook = _objOptions.LanguageBookShort(objWeapon.Source);
                        string strPage = objWeapon.Page;
                        lblVehicleSource.Text = strBook + " " + strPage;
                        tipTooltip.SetToolTip(lblVehicleSource, _objOptions.LanguageBookLong(objWeapon.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objWeapon.Page);

                        cmdVehicleMoveToInventory.Enabled = true;

                        // Determine the Dice Pool size.
                        int intPilot = objCurrentVehicle.Pilot;
                        int intAutosoft = 0;
                        bool blnAutosoftFound = false;
                        foreach (Gear objAutosoft in objCurrentVehicle.Gear)
                        {
                            if (objAutosoft.Category.StartsWith("Autosofts") && objAutosoft.Name == "Targeting")
                            {
                                if (!blnAutosoftFound)
                                {
                                    if (objAutosoft.Rating > intAutosoft)
                                        intAutosoft = objAutosoft.Rating;
                                    if (objAutosoft.Extra == objWeapon.DisplayCategory)
                                    {
                                        intAutosoft = objAutosoft.Rating;
                                        blnAutosoftFound = true;
                                    }
                                }
                            }
                        }
                        if (intAutosoft == 0)
                            intPilot -= 1;
                        lblVehicleWeaponDicePool.Text = (intPilot + intAutosoft).ToString();
                    }
                    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");
                            lblVehicleRating.Text = objCyberware.Rating.ToString();
                            _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 = "";
                            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)
            {
                panVehicleCM.Visible = true;
                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)
                {
                    lblVehicleRating.Text = "";
                    if (objGear.InternalId == treVehicles.SelectedNode.Tag.ToString())
                    {
                        lblVehicleGearQty.Text = objGear.Quantity.ToString();
                        cmdVehicleGearReduceQty.Enabled = true;

                        if (objGear.Rating > 0)
                            lblVehicleRating.Text = objGear.Rating.ToString();
                    }

                    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 = "";
                    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;
                        lblVehicleDevice.Text = objCommlink.DeviceRating.ToString();
                        lblVehicleAttack.Text = objCommlink.Attack.ToString();
                        lblVehicleSleaze.Text = objCommlink.Sleaze.ToString();
                        lblVehicleDataProcessing.Text = objCommlink.DataProcessing.ToString();
                        lblVehicleFirewall.Text = objCommlink.Firewall.ToString();
                    }

                    if ((_objCharacter.Metatype.EndsWith("A.I.") || _objCharacter.MetatypeCategory == "Technocritters" || _objCharacter.MetatypeCategory == "Protosapients") && objGear.GetType() == typeof(Commlink))
                    {
                        chkVehicleHomeNode.Visible = true;
                        chkVehicleHomeNode.Checked = objGear.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 = "";

                        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;

                        lblVehicleWeaponRangeShort.Text = objWeapon.RangeShort;
                        lblVehicleWeaponRangeMedium.Text = objWeapon.RangeMedium;
                        lblVehicleWeaponRangeLong.Text = objWeapon.RangeLong;
                        lblVehicleWeaponRangeExtreme.Text = objWeapon.RangeExtreme;

                        cmdFireVehicleWeapon.Enabled = false;
                        cmdReloadVehicleWeapon.Enabled = false;
                        cboVehicleWeaponAmmo.Enabled = false;
                    }
                    else
                    {
                        bool blnMod = false;
                        // Locate the selected Vehicle Weapon Modification.
                        WeaponMod objMod = _objFunctions.FindVehicleWeaponMod(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles);
                        if (objMod != null)
                        {
                            objWeapon = objMod.Parent;
                            blnMod = true;
                        }

                        if (blnMod)
                        {
                            lblVehicleName.Text = objMod.DisplayNameShort;
                            lblVehicleCategory.Text = LanguageManager.Instance.GetString("String_VehicleWeaponModification");
                            lblVehicleAvail.Text = objMod.TotalAvail;
                            lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", Convert.ToInt32(objMod.TotalCost));
                            lblVehicleHandling.Text = "";
                            lblVehicleAccel.Text = "";
                            lblVehicleSpeed.Text = "";
                            lblVehicleDevice.Text = "";
                            lblVehiclePilot.Text = "";
                            lblVehicleBody.Text = "";
                            lblVehicleArmor.Text = "";
                            lblVehicleSensor.Text = "";
                            lblVehicleSlots.Text = objMod.Slots.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);
                            chkVehicleWeaponAccessoryInstalled.Enabled = true;
                            chkVehicleWeaponAccessoryInstalled.Checked = objMod.Installed;
                            chkVehicleIncludedInWeapon.Checked = objMod.IncludedInWeapon;

                            lblVehicleWeaponRangeShort.Text = objWeapon.RangeShort;
                            lblVehicleWeaponRangeMedium.Text = objWeapon.RangeMedium;
                            lblVehicleWeaponRangeLong.Text = objWeapon.RangeLong;
                            lblVehicleWeaponRangeExtreme.Text = objWeapon.RangeExtreme;

                            cmdFireVehicleWeapon.Enabled = false;
                            cmdReloadVehicleWeapon.Enabled = false;
                            cboVehicleWeaponAmmo.Enabled = false;
                        }
                        else
                        {
                            // If it's none of these, it must be an Underbarrel Weapon.
                            Vehicle objCurrentVehicle = new Vehicle(_objCharacter);
                            objWeapon = _objFunctions.FindVehicleWeapon(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objCurrentVehicle);

                            lblVehicleWeaponName.Text = objWeapon.DisplayNameShort;
                            lblVehicleWeaponCategory.Text = objWeapon.DisplayCategory;
                            lblVehicleWeaponDamage.Text = objWeapon.CalculatedDamage();
                            lblVehicleWeaponAP.Text = objWeapon.TotalAP;
                            lblVehicleWeaponAmmo.Text = objWeapon.CalculatedAmmo();
                            lblVehicleWeaponMode.Text = objWeapon.CalculatedMode;
                            if (objWeapon.WeaponType == "Ranged")
                            {
                                cmdFireVehicleWeapon.Enabled = true;
                                cmdReloadVehicleWeapon.Enabled = true;
                                lblVehicleWeaponAmmoRemaining.Text = objWeapon.AmmoRemaining.ToString();

                                cmsVehicleAmmoSingleShot.Enabled = objWeapon.AllowMode("SS") || objWeapon.AllowMode("SA");
                                cmsVehicleAmmoShortBurst.Enabled = objWeapon.AllowMode("BF");
                                cmsVehicleAmmoLongBurst.Enabled = objWeapon.AllowMode("FA");
                                cmsVehicleAmmoFullBurst.Enabled = objWeapon.AllowMode("FA");
                                cmsVehicleAmmoSuppressiveFire.Enabled = objWeapon.AllowMode("FA");
                                if (cmsVehicleAmmoFullBurst.Enabled)
                                    cmsVehicleAmmoFullBurst.Text = LanguageManager.Instance.GetString("String_FullBurst").Replace("{0}", objWeapon.FullBurst.ToString());
                                if (cmsVehicleAmmoSuppressiveFire.Enabled)
                                    cmsVehicleAmmoSuppressiveFire.Text = LanguageManager.Instance.GetString("String_SuppressiveFire").Replace("{0}", objWeapon.Suppressive.ToString());
                            }

                            List<ListItem> lstAmmo = new List<ListItem>();
                            int intCurrentSlot = objWeapon.ActiveAmmoSlot;
                            for (int i = 1; i <= objWeapon.AmmoSlots; i++)
                            {
                                Gear objVehicleGear = new Gear(_objCharacter);
                                ListItem objAmmo = new ListItem();
                                objWeapon.ActiveAmmoSlot = i;
                                objVehicleGear = _objFunctions.FindGear(objWeapon.AmmoLoaded, objCurrentVehicle.Gear);
                                objAmmo.Value = i.ToString();

                                string strPlugins = "";
                                foreach (Vehicle objVehicle in _objCharacter.Vehicles)
                                {
                                    foreach (Gear objCurrentAmmo in objVehicle.Gear)
                                    {
                                        if (objCurrentAmmo.InternalId == objWeapon.AmmoLoaded)
                                        {
                                            foreach (Gear objChild in objCurrentAmmo.Children)
                                            {
                                                strPlugins += objChild.DisplayNameShort + ", ";
                                            }
                                        }
                                    }
                                }
                                // Remove the trailing comma.
                                if (strPlugins != "")
                                    strPlugins = strPlugins.Substring(0, strPlugins.Length - 2);

                                if (objVehicleGear == null)
                                {
                                    if (objWeapon.AmmoRemaining == 0)
                                        objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + LanguageManager.Instance.GetString("String_Empty");
                                    else
                                        objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + LanguageManager.Instance.GetString("String_ExternalSource");
                                }
                                else
                                    objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + objVehicleGear.DisplayNameShort;

                                if (strPlugins != "")
                                    objAmmo.Name += " [" + strPlugins + "]";
                                lstAmmo.Add(objAmmo);
                            }
                            _blnSkipRefresh = true;
                            objWeapon.ActiveAmmoSlot = intCurrentSlot;
                            cboVehicleWeaponAmmo.Enabled = true;
                            cboVehicleWeaponAmmo.ValueMember = "Value";
                            cboVehicleWeaponAmmo.DisplayMember = "Name";
                            cboVehicleWeaponAmmo.DataSource = lstAmmo;
                            cboVehicleWeaponAmmo.SelectedValue = objWeapon.ActiveAmmoSlot.ToString();
                            if (cboVehicleWeaponAmmo.SelectedIndex == -1)
                                cboVehicleWeaponAmmo.SelectedIndex = 0;
                            _blnSkipRefresh = false;

                            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 = "";
                            lblVehicleSlots.Text = "6 (" + objWeapon.SlotsRemaining.ToString() + " " + LanguageManager.Instance.GetString("String_Remaining") + ")";
                            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);

                            // Determine the Dice Pool size.
                            int intPilot = objCurrentVehicle.Pilot;
                            int intAutosoft = 0;
                            bool blnAutosoftFound = false;
                            foreach (Gear objAutosoft in objCurrentVehicle.Gear)
                            {
                                if (objAutosoft.Category.StartsWith("Autosofts") && objAutosoft.Name == "Targeting")
                                {
                                    if (!blnAutosoftFound)
                                    {
                                        if (objAutosoft.Rating > intAutosoft)
                                            intAutosoft = objAutosoft.Rating;
                                        if (objAutosoft.Extra == objWeapon.DisplayCategory)
                                        {
                                            intAutosoft = objAutosoft.Rating;
                                            blnAutosoftFound = true;
                                        }
                                    }
                                }
                            }
                            if (intAutosoft == 0)
                                intPilot -= 1;
                            lblVehicleWeaponDicePool.Text = (intPilot + intAutosoft).ToString();
                        }
                    }
                }
            }
            else if (treVehicles.SelectedNode.Level == 5)
            {
                panVehicleCM.Visible = true;
                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 = "";

                    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;

                    lblVehicleWeaponRangeShort.Text = objWeapon.RangeShort;
                    lblVehicleWeaponRangeMedium.Text = objWeapon.RangeMedium;
                    lblVehicleWeaponRangeLong.Text = objWeapon.RangeLong;
                    lblVehicleWeaponRangeExtreme.Text = objWeapon.RangeExtreme;

                    cmdFireVehicleWeapon.Enabled = false;
                    cmdReloadVehicleWeapon.Enabled = false;
                    cboVehicleWeaponAmmo.Enabled = false;
                }
                else
                {
                    // Locate the selected Vehicle Weapon Modification.
                    WeaponMod objMod = _objFunctions.FindVehicleWeaponMod(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles);
                    if (objMod != null)
                    {
                        blnFound = true;
                        objWeapon = objMod.Parent;
                    }

                    if (blnFound)
                    {
                        lblVehicleName.Text = objMod.DisplayNameShort;
                        lblVehicleCategory.Text = LanguageManager.Instance.GetString("String_VehicleWeaponModification");
                        lblVehicleAvail.Text = objMod.TotalAvail;
                        lblVehicleCost.Text = String.Format("{0:###,###,##0¥}", Convert.ToInt32(objMod.TotalCost));
                        lblVehicleHandling.Text = "";
                        lblVehicleAccel.Text = "";
                        lblVehicleSpeed.Text = "";
                        lblVehicleDevice.Text = "";
                        lblVehiclePilot.Text = "";
                        lblVehicleBody.Text = "";
                        lblVehicleArmor.Text = "";
                        lblVehicleSensor.Text = "";
                        lblVehicleSlots.Text = objMod.Slots.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);
                        chkVehicleWeaponAccessoryInstalled.Enabled = true;
                        chkVehicleWeaponAccessoryInstalled.Checked = objMod.Installed;
                        chkVehicleIncludedInWeapon.Checked = objMod.IncludedInWeapon;

                        lblVehicleWeaponRangeShort.Text = objWeapon.RangeShort;
                        lblVehicleWeaponRangeMedium.Text = objWeapon.RangeMedium;
                        lblVehicleWeaponRangeLong.Text = objWeapon.RangeLong;
                        lblVehicleWeaponRangeExtreme.Text = objWeapon.RangeExtreme;

                        cmdFireVehicleWeapon.Enabled = false;
                        cmdReloadVehicleWeapon.Enabled = false;
                        cboVehicleWeaponAmmo.Enabled = false;
                    }
                    else
                    {
                        panVehicleCM.Visible = true;
                        Vehicle objSelectedVehicle = new Vehicle(_objCharacter);
                        Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objSelectedVehicle);

                        lblVehicleRating.Text = "";
                        if (objGear.InternalId == treVehicles.SelectedNode.Tag.ToString())
                        {
                            lblVehicleGearQty.Text = objGear.Quantity.ToString();
                            cmdVehicleGearReduceQty.Enabled = true;

                            if (objGear.Rating > 0)
                                lblVehicleRating.Text = objGear.Rating.ToString();
                        }

                        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 = "";
                        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;
                            lblVehicleDevice.Text = objCommlink.DeviceRating.ToString();
                            lblVehicleAttack.Text = objCommlink.Attack.ToString();
                            lblVehicleSleaze.Text = objCommlink.Sleaze.ToString();
                            lblVehicleDataProcessing.Text = objCommlink.DataProcessing.ToString();
                            lblVehicleFirewall.Text = objCommlink.Firewall.ToString();
                        }

                        if ((_objCharacter.Metatype.EndsWith("A.I.") || _objCharacter.MetatypeCategory == "Technocritters" || _objCharacter.MetatypeCategory == "Protosapients") && objGear.GetType() == typeof(Commlink))
                        {
                            chkVehicleHomeNode.Visible = true;
                            chkVehicleHomeNode.Checked = objGear.HomeNode;
                        }
                    }
                }
            }
            else if (treVehicles.SelectedNode.Level > 5)
            {
                panVehicleCM.Visible = true;
                Vehicle objSelectedVehicle = new Vehicle(_objCharacter);
                Gear objGear = _objFunctions.FindVehicleGear(treVehicles.SelectedNode.Tag.ToString(), _objCharacter.Vehicles, out objSelectedVehicle);

                lblVehicleRating.Text = "";
                if (objGear.InternalId == treVehicles.SelectedNode.Tag.ToString())
                {
                    lblVehicleGearQty.Text = objGear.Quantity.ToString();
                    cmdVehicleGearReduceQty.Enabled = true;

                    if (objGear.Rating > 0)
                        lblVehicleRating.Text = objGear.Rating.ToString();
                }

                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 = "";
                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;
                    lblVehicleDevice.Text = objCommlink.DeviceRating.ToString();
                    lblVehicleAttack.Text = objCommlink.Attack.ToString();
                    lblVehicleSleaze.Text = objCommlink.Sleaze.ToString();
                    lblVehicleDataProcessing.Text = objCommlink.DataProcessing.ToString();
                    lblVehicleFirewall.Text = objCommlink.Firewall.ToString();
                }

                if ((_objCharacter.Metatype.EndsWith("A.I.") || _objCharacter.MetatypeCategory == "Technocritters" || _objCharacter.MetatypeCategory == "Protosapients") && objGear.GetType() == typeof(Commlink))
                {
                    chkVehicleHomeNode.Visible = true;
                    chkVehicleHomeNode.Checked = objGear.HomeNode;
                }
            }
            else
                panVehicleCM.Visible = false;
        }
Esempio n. 2
0
        /// <summary>
        /// Refresh the information for the currently displayed Weapon.
        /// </summary>
        public void RefreshSelectedWeapon()
        {
            lblWeaponDeviceRating.Text = "";
            lblWeaponAttack.Text = "";
            lblWeaponSleaze.Text = "";
            lblWeaponDataProcessing.Text = "";
            lblWeaponFirewall.Text = "";

            bool blnClear = false;
            try
            {
                if (treWeapons.SelectedNode.Level == 0)
                    blnClear = true;
            }
            catch
            {
                blnClear = true;
            }
            if (blnClear)
            {
                lblWeaponName.Text = "";
                lblWeaponCategory.Text = "";
                lblWeaponAvail.Text = "";
                lblWeaponCost.Text = "";
                lblWeaponConceal.Text = "";
                lblWeaponAccuracy.Text = "";
                lblWeaponDamage.Text = "";
                lblWeaponRC.Text = "";
                lblWeaponAP.Text = "";
                lblWeaponReach.Text = "";
                lblWeaponMode.Text = "";
                lblWeaponAmmo.Text = "";
                lblWeaponSource.Text = "";
                cboWeaponAmmo.Enabled = false;
                tipTooltip.SetToolTip(lblWeaponSource, null);
                chkWeaponAccessoryInstalled.Enabled = false;
                chkIncludedInWeapon.Enabled = false;
                chkIncludedInWeapon.Checked = false;

                // Disable the fire button.
                cmdFireWeapon.Enabled = false;
                cmdReloadWeapon.Enabled = false;
                cmdWeaponBuyAmmo.Enabled = false;
                cboWeaponAmmo.Enabled = false;

                // Hide Weapon Ranges.
                lblWeaponRangeShort.Text = "";
                lblWeaponRangeMedium.Text = "";
                lblWeaponRangeLong.Text = "";
                lblWeaponRangeExtreme.Text = "";
                return;
            }

            lblWeaponDicePool.Text = "";
            tipTooltip.SetToolTip(lblWeaponDicePool, "");
            cmdWeaponMoveToVehicle.Enabled = false;

            // Locate the selected Weapon.
            if (treWeapons.SelectedNode.Level == 1)
            {
                Weapon objWeapon = _objFunctions.FindWeapon(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons);
                if (objWeapon == null)
                    return;

                _blnSkipRefresh = true;
                lblWeaponName.Text = objWeapon.DisplayNameShort;
                lblWeaponCategory.Text = objWeapon.DisplayCategory;
                string strBook = _objOptions.LanguageBookShort(objWeapon.Source);
                string strPage = objWeapon.Page;
                lblWeaponSource.Text = strBook + " " + strPage;
                tipTooltip.SetToolTip(lblWeaponSource, _objOptions.LanguageBookLong(objWeapon.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objWeapon.Page);
                chkWeaponAccessoryInstalled.Enabled = false;
                chkIncludedInWeapon.Enabled = false;
                chkIncludedInWeapon.Checked = false;

                // Do not allow Cyberware of Gear Weapons to be moved.
                if (!objWeapon.Cyberware && objWeapon.Category != "Gear")
                {
                    if (_objCharacter.Vehicles.Count > 0)
                        cmdWeaponMoveToVehicle.Enabled = true;
                    else
                        cmdWeaponMoveToVehicle.Enabled = false;
                }

                // Enable the fire button if the Weapon is Ranged.
                if (objWeapon.WeaponType == "Ranged" || (objWeapon.WeaponType == "Melee" && objWeapon.Ammo != "0"))
                {
                    cmdFireWeapon.Enabled = true;
                    cmdReloadWeapon.Enabled = true;
                    cmdWeaponBuyAmmo.Enabled = true;
                    lblWeaponAmmoRemaining.Text = objWeapon.AmmoRemaining.ToString();
                    //lblWeaponAmmoType.Text = "External Source";

                    cmsAmmoSingleShot.Enabled = objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeSingleShot")) || objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeSemiAutomatic"));
                    cmsAmmoShortBurst.Enabled = objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeBurstFire")) || objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeFullAutomatic"));
                    cmsAmmoLongBurst.Enabled = objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeFullAutomatic"));
                    cmsAmmoFullBurst.Enabled = objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeFullAutomatic"));
                    cmsAmmoSuppressiveFire.Enabled = objWeapon.AllowMode(LanguageManager.Instance.GetString("String_ModeFullAutomatic"));

                    // Melee Weapons with Ammo are considered to be Single Shot.
                    if (objWeapon.WeaponType == "Melee" && objWeapon.Ammo != "0")
                        cmsAmmoSingleShot.Enabled = true;

                    if (cmsAmmoFullBurst.Enabled)
                        cmsAmmoFullBurst.Text = LanguageManager.Instance.GetString("String_FullBurst").Replace("{0}", objWeapon.FullBurst.ToString());
                    if (cmsAmmoSuppressiveFire.Enabled)
                        cmsAmmoSuppressiveFire.Text = LanguageManager.Instance.GetString("String_SuppressiveFire").Replace("{0}", objWeapon.Suppressive.ToString());

                    List<ListItem> lstAmmo = new List<ListItem>();
                    int intCurrentSlot = objWeapon.ActiveAmmoSlot;
                    for (int i = 1; i <= objWeapon.AmmoSlots; i++)
                    {
                        Gear objGear = new Gear(_objCharacter);
                        ListItem objAmmo = new ListItem();
                        objWeapon.ActiveAmmoSlot = i;
                        objGear = _objFunctions.FindGear(objWeapon.AmmoLoaded, _objCharacter.Gear);
                        objAmmo.Value = i.ToString();

                        string strPlugins = "";
                        if (objGear != null)
                        {
                            foreach (Gear objChild in objGear.Children)
                            {
                                strPlugins += objChild.DisplayNameShort + ", ";
                            }
                        }
                        // Remove the trailing comma.
                        if (strPlugins != "")
                            strPlugins = strPlugins.Substring(0, strPlugins.Length - 2);

                        if (objGear == null)
                        {
                            if (objWeapon.AmmoRemaining == 0)
                                objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + LanguageManager.Instance.GetString("String_Empty");
                            else
                                objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + LanguageManager.Instance.GetString("String_ExternalSource");
                        }
                        else
                            objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + objGear.DisplayNameShort;
                        if (strPlugins != "")
                            objAmmo.Name += " [" + strPlugins + "]";
                        lstAmmo.Add(objAmmo);
                    }
                    _blnSkipRefresh = true;
                    objWeapon.ActiveAmmoSlot = intCurrentSlot;
                    cboWeaponAmmo.Enabled = true;
                    cboWeaponAmmo.ValueMember = "Value";
                    cboWeaponAmmo.DisplayMember = "Name";
                    cboWeaponAmmo.DataSource = lstAmmo;
                    cboWeaponAmmo.SelectedValue = objWeapon.ActiveAmmoSlot.ToString();
                    if (cboWeaponAmmo.SelectedIndex == -1)
                        cboWeaponAmmo.SelectedIndex = 0;
                    _blnSkipRefresh = false;
                }
                else
                {
                    cmdFireWeapon.Enabled = false;
                    cmdReloadWeapon.Enabled = false;
                    cmdWeaponBuyAmmo.Enabled = false;
                    lblWeaponAmmoRemaining.Text = "";
                    cboWeaponAmmo.Enabled = false;
                }

                // If this is a Cyberweapon, grab the STR of the limb.
                int intUseSTR = 0;
                if (objWeapon.Cyberware)
                {
                    foreach (Cyberware objCyberware in _objCharacter.Cyberware)
                    {
                        foreach (Cyberware objPlugin in objCyberware.Children)
                        {
                            if (objPlugin.WeaponID == objWeapon.InternalId)
                            {
                                intUseSTR = objCyberware.TotalStrength;
                                break;
                            }
                        }
                    }
                }

                // Show the Weapon Ranges.
                lblWeaponRangeShort.Text = objWeapon.RangeShort;
                lblWeaponRangeMedium.Text = objWeapon.RangeMedium;
                lblWeaponRangeLong.Text = objWeapon.RangeLong;
                lblWeaponRangeExtreme.Text = objWeapon.RangeExtreme;

                _blnSkipRefresh = false;

                lblWeaponAvail.Text = objWeapon.TotalAvail;
                lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", objWeapon.TotalCost);
                lblWeaponConceal.Text = objWeapon.CalculatedConcealability();
                lblWeaponDamage.Text = objWeapon.CalculatedDamage(intUseSTR);
                lblWeaponAccuracy.Text = objWeapon.TotalAccuracy.ToString();
                lblWeaponRC.Text = objWeapon.TotalRC;
                lblWeaponAP.Text = objWeapon.TotalAP;
                lblWeaponReach.Text = objWeapon.TotalReach.ToString();
                lblWeaponMode.Text = objWeapon.CalculatedMode;
                lblWeaponAmmo.Text = objWeapon.CalculatedAmmo();
                lblWeaponSlots.Text = "6 (" + objWeapon.SlotsRemaining.ToString() + " " + LanguageManager.Instance.GetString("String_Remaining") + ")";
                lblWeaponDicePool.Text = objWeapon.DicePool;
                tipTooltip.SetToolTip(lblWeaponDicePool, objWeapon.DicePoolTooltip);
                tipTooltip.SetToolTip(lblWeaponRC, objWeapon.RCToolTip);

                UpdateCharacterInfo();
            }
            else
            {
                // See if this is an Underbarrel Weapon.
                bool blnUnderbarrel = false;
                Weapon objWeapon = new Weapon(_objCharacter);
                foreach (Weapon objCharacterWeapon in _objCharacter.Weapons)
                {
                    if (objCharacterWeapon.UnderbarrelWeapons.Count > 0)
                    {
                        foreach (Weapon objUnderbarrelWeapon in objCharacterWeapon.UnderbarrelWeapons)
                        {
                            if (objUnderbarrelWeapon.InternalId == treWeapons.SelectedNode.Tag.ToString())
                            {
                                objWeapon = objUnderbarrelWeapon;
                                blnUnderbarrel = true;
                                break;
                            }
                        }
                    }
                }

                if (blnUnderbarrel)
                {
                    cmdFireWeapon.Enabled = true;
                    cmdReloadWeapon.Enabled = true;
                    cmdWeaponBuyAmmo.Enabled = true;

                    lblWeaponAvail.Text = objWeapon.TotalAvail;
                    lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", objWeapon.TotalCost);
                    lblWeaponConceal.Text = "+4";
                    lblWeaponDamage.Text = objWeapon.CalculatedDamage();
                    lblWeaponRC.Text = objWeapon.TotalRC;
                    lblWeaponAccuracy.Text = objWeapon.TotalAccuracy.ToString();
                    lblWeaponAP.Text = objWeapon.TotalAP;
                    lblWeaponReach.Text = objWeapon.TotalReach.ToString();
                    lblWeaponMode.Text = objWeapon.CalculatedMode;
                    lblWeaponAmmo.Text = objWeapon.CalculatedAmmo();
                    lblWeaponSlots.Text = "6 (" + objWeapon.SlotsRemaining.ToString() + " " + LanguageManager.Instance.GetString("String_Remaining") + ")";
                    lblWeaponDicePool.Text = objWeapon.DicePool;
                    tipTooltip.SetToolTip(lblWeaponDicePool, objWeapon.DicePoolTooltip);
                    UpdateCharacterInfo();

                    cmsAmmoSingleShot.Enabled = objWeapon.AllowMode("SS") || objWeapon.AllowMode("SA");
                    cmsAmmoShortBurst.Enabled = objWeapon.AllowMode("BF") || objWeapon.AllowMode("FA");
                    cmsAmmoLongBurst.Enabled = objWeapon.AllowMode("FA");
                    cmsAmmoFullBurst.Enabled = objWeapon.AllowMode("FA");
                    cmsAmmoSuppressiveFire.Enabled = objWeapon.AllowMode("FA");

                    // Melee Weapons with Ammo are considered to be Single Shot.
                    if (objWeapon.WeaponType == "Melee" && objWeapon.Ammo != "0")
                        cmsAmmoSingleShot.Enabled = true;

                    if (cmsAmmoFullBurst.Enabled)
                        cmsAmmoFullBurst.Text = LanguageManager.Instance.GetString("String_FullBurst").Replace("{0}", objWeapon.FullBurst.ToString());
                    if (cmsAmmoSuppressiveFire.Enabled)
                        cmsAmmoSuppressiveFire.Text = LanguageManager.Instance.GetString("String_SuppressiveFire").Replace("{0}", objWeapon.Suppressive.ToString());

                    List<ListItem> lstAmmo = new List<ListItem>();
                    int intCurrentSlot = objWeapon.ActiveAmmoSlot;
                    for (int i = 1; i <= objWeapon.AmmoSlots; i++)
                    {
                        Gear objGear = new Gear(_objCharacter);
                        ListItem objAmmo = new ListItem();
                        objWeapon.ActiveAmmoSlot = i;
                        objGear = _objFunctions.FindGear(objWeapon.AmmoLoaded, _objCharacter.Gear);
                        objAmmo.Value = i.ToString();

                        string strPlugins = "";
                        if (objGear != null)
                        {
                            foreach (Gear objChild in objGear.Children)
                            {
                                strPlugins += objChild.DisplayNameShort + ", ";
                            }
                        }
                        // Remove the trailing comma.
                        if (strPlugins != string.Empty)
                            strPlugins = strPlugins.Substring(0, strPlugins.Length - 2);

                        if (objGear == null)
                            objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + LanguageManager.Instance.GetString("String_Empty");
                        else
                            objAmmo.Name = LanguageManager.Instance.GetString("String_SlotNumber").Replace("{0}", i.ToString()) + " " + objGear.DisplayNameShort;
                        if (strPlugins != "")
                            objAmmo.Name += " [" + strPlugins + "]";
                        lstAmmo.Add(objAmmo);
                    }
                    _blnSkipRefresh = true;
                    chkWeaponAccessoryInstalled.Enabled = true;
                    chkWeaponAccessoryInstalled.Checked = objWeapon.Installed;
                    chkIncludedInWeapon.Enabled = false;
                    chkIncludedInWeapon.Checked = objWeapon.IncludedInWeapon;
                    objWeapon.ActiveAmmoSlot = intCurrentSlot;
                    cboWeaponAmmo.Enabled = true;
                    cboWeaponAmmo.ValueMember = "Value";
                    cboWeaponAmmo.DisplayMember = "Name";
                    cboWeaponAmmo.DataSource = lstAmmo;
                    cboWeaponAmmo.SelectedValue = objWeapon.ActiveAmmoSlot.ToString();
                    if (cboWeaponAmmo.SelectedIndex == -1)
                        cboWeaponAmmo.SelectedIndex = 0;

                    // Show the Weapon Ranges.
                    lblWeaponAmmoRemaining.Text = objWeapon.AmmoRemaining.ToString();
                    lblWeaponRangeShort.Text = objWeapon.RangeShort;
                    lblWeaponRangeMedium.Text = objWeapon.RangeMedium;
                    lblWeaponRangeLong.Text = objWeapon.RangeLong;
                    lblWeaponRangeExtreme.Text = objWeapon.RangeExtreme;

                    _blnSkipRefresh = false;
                }
                else
                {
                    cmdFireWeapon.Enabled = false;
                    cmdReloadWeapon.Enabled = false;
                    cmdWeaponBuyAmmo.Enabled = false;
                    cboWeaponAmmo.Enabled = false;

                    bool blnAccessory = false;
                    Weapon objSelectedWeapon = new Weapon(_objCharacter);
                    WeaponAccessory objSelectedAccessory = _objFunctions.FindWeaponAccessory(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons);
                    if (objSelectedAccessory != null)
                    {
                        blnAccessory = true;
                        objSelectedWeapon = objSelectedAccessory.Parent;
                    }

                    if (blnAccessory)
                    {
                        lblWeaponName.Text = objSelectedAccessory.DisplayNameShort;
                        lblWeaponCategory.Text = LanguageManager.Instance.GetString("String_WeaponAccessory");
                        lblWeaponAvail.Text = objSelectedAccessory.TotalAvail;
                        lblWeaponAccuracy.Text = objWeapon.TotalAccuracy.ToString();
                        lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", Convert.ToInt32(objSelectedAccessory.TotalCost));
                        lblWeaponConceal.Text = objSelectedAccessory.Concealability.ToString();
                        lblWeaponDamage.Text = "";
                        lblWeaponRC.Text = objSelectedAccessory.RC;
                        lblWeaponAP.Text = "";
                        lblWeaponReach.Text = "";
                        lblWeaponMode.Text = "";
                        lblWeaponAmmo.Text = "";

                        string[] strMounts = objSelectedAccessory.Mount.Split('/');
                        string strMount = "";
                        foreach (string strCurrentMount in strMounts)
                        {
                            if (strCurrentMount != "")
                                strMount += LanguageManager.Instance.GetString("String_Mount" + strCurrentMount) + "/";
                        }
                        // Remove the trailing /
                        if (strMount != "" && strMount.Contains('/'))
                            strMount = strMount.Substring(0, strMount.Length - 1);

                        lblWeaponSlots.Text = strMount;
                        string strBook = _objOptions.LanguageBookShort(objSelectedAccessory.Source);
                        string strPage = objSelectedAccessory.Page;
                        lblWeaponSource.Text = strBook + " " + strPage;
                        tipTooltip.SetToolTip(lblWeaponSource, _objOptions.LanguageBookLong(objSelectedAccessory.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objSelectedAccessory.Page);
                        chkWeaponAccessoryInstalled.Enabled = true;
                        chkWeaponAccessoryInstalled.Checked = objSelectedAccessory.Installed;
                        chkIncludedInWeapon.Enabled = _objOptions.AllowEditPartOfBaseWeapon;
                        chkIncludedInWeapon.Checked = objSelectedAccessory.IncludedInWeapon;
                    }
                    else
                    {
                        bool blnMod = false;
                        WeaponMod objSelectedMod = _objFunctions.FindWeaponMod(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons);
                        if (objSelectedMod != null)
                        {
                            blnMod = true;
                            objSelectedWeapon = objSelectedMod.Parent;
                        }

                        if (blnMod)
                        {
                            lblWeaponName.Text = objSelectedMod.DisplayNameShort;
                            lblWeaponCategory.Text = LanguageManager.Instance.GetString("String_WeaponModification");
                            lblWeaponAvail.Text = objSelectedMod.TotalAvail;
                            lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", Convert.ToInt32(objSelectedMod.TotalCost));
                            lblWeaponConceal.Text = objSelectedMod.Concealability.ToString();
                            lblWeaponAccuracy.Text = objWeapon.TotalAccuracy.ToString();
                            lblWeaponDamage.Text = "";
                            lblWeaponRC.Text = objSelectedMod.RC;
                            lblWeaponAP.Text = "";
                            lblWeaponReach.Text = "";
                            lblWeaponMode.Text = "";
                            lblWeaponAmmo.Text = "";
                            lblWeaponSlots.Text = objSelectedMod.Slots.ToString();
                            string strBook = _objOptions.LanguageBookShort(objSelectedMod.Source);
                            string strPage = objSelectedMod.Page;
                            lblWeaponSource.Text = strBook + " " + strPage;
                            tipTooltip.SetToolTip(lblWeaponSource, _objOptions.LanguageBookLong(objSelectedMod.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objSelectedMod.Page);
                            chkWeaponAccessoryInstalled.Enabled = true;
                            chkWeaponAccessoryInstalled.Checked = objSelectedMod.Installed;
                            chkIncludedInWeapon.Enabled = _objOptions.AllowEditPartOfBaseWeapon;
                            chkIncludedInWeapon.Checked = objSelectedMod.IncludedInWeapon;
                        }
                        else
                        {
                            // Find the selected Gear.
                            _blnSkipRefresh = true;
                            WeaponAccessory objAccessory = new WeaponAccessory(_objCharacter);
                            Gear objGear = _objFunctions.FindWeaponGear(treWeapons.SelectedNode.Tag.ToString(), _objCharacter.Weapons, out objAccessory);
                            lblWeaponName.Text = objGear.DisplayNameShort;
                            lblWeaponCategory.Text = objGear.DisplayCategory;
                            lblWeaponAvail.Text = objGear.TotalAvail(true);
                            lblWeaponCost.Text = String.Format("{0:###,###,##0¥}", objGear.TotalCost);
                            lblWeaponAccuracy.Text = objWeapon.TotalAccuracy.ToString();
                            lblWeaponConceal.Text = "";
                            lblWeaponDamage.Text = "";
                            lblWeaponRC.Text = "";
                            lblWeaponAP.Text = "";
                            lblWeaponReach.Text = "";
                            lblWeaponMode.Text = "";
                            lblWeaponAmmo.Text = "";
                            lblWeaponSlots.Text = "";
                            string strBook = _objOptions.LanguageBookShort(objGear.Source);
                            string strPage = objGear.Page;
                            lblWeaponSource.Text = strBook + " " + strPage;
                            tipTooltip.SetToolTip(lblWeaponSource, _objOptions.BookFromCode(objGear.Source) + " " + LanguageManager.Instance.GetString("String_Page") + " " + objGear.Page);
                            chkWeaponAccessoryInstalled.Enabled = true;
                            chkWeaponAccessoryInstalled.Checked = objGear.Equipped;
                            chkIncludedInWeapon.Enabled = false;
                            chkIncludedInWeapon.Checked = false;
                            _blnSkipRefresh = true;

                            if (objGear.GetType() == typeof(Commlink))
                            {
                                Commlink objCommlink = (Commlink)objGear;
                                lblWeaponDeviceRating.Text = objCommlink.DeviceRating.ToString();
                                lblWeaponAttack.Text = objCommlink.Attack.ToString();
                                lblWeaponSleaze.Text = objCommlink.Sleaze.ToString();
                                lblWeaponDataProcessing.Text = objCommlink.DataProcessing.ToString();
                                lblWeaponFirewall.Text = objCommlink.Firewall.ToString();
                            }
                        }
                    }

                    // Show the Weapon Ranges.
                    lblWeaponRangeShort.Text = objSelectedWeapon.RangeShort;
                    lblWeaponRangeMedium.Text = objSelectedWeapon.RangeMedium;
                    lblWeaponRangeLong.Text = objSelectedWeapon.RangeLong;
                    lblWeaponRangeExtreme.Text = objSelectedWeapon.RangeExtreme;
                }
            }
        }