示例#1
0
        public void ChangeAmmoMagazine(MyDefinitionId newAmmoMagazineId)
        {
            MyDebug.AssertDebug(WeaponDefinition.IsAmmoMagazineCompatible(newAmmoMagazineId), "Ammo magazine is changed to not compatible one");

            AmmoMagazineId           = newAmmoMagazineId;
            m_ammoMagazineDefinition = MyDefinitionManager.Static.GetAmmoMagazineDefinition(AmmoMagazineId);
            AmmoDefinitionId         = AmmoMagazineDefinition.AmmoDefinitionId;
            m_ammoDefinition         = MyDefinitionManager.Static.GetAmmoDefinition(AmmoDefinitionId);
        }
示例#2
0
文件: Ammo.cs 项目: zrisher/ARMS
        private Ammo(MyAmmoMagazineDefinition ammoMagDef)
        {
            MyAmmoDefinition ammoDef = MyDefinitionManager.Static.GetAmmoDefinition(ammoMagDef.AmmoDefinitionId);

            this.AmmoDefinition     = ammoDef;
            this.MissileDefinition  = AmmoDefinition as MyMissileAmmoDefinition;
            this.MagazineDefinition = ammoMagDef;

            if (MissileDefinition != null && !MissileDefinition.MissileSkipAcceleration)
            {
                this.TimeToMaxSpeed     = (MissileDefinition.DesiredSpeed - MissileDefinition.MissileInitialSpeed) / MissileDefinition.MissileAcceleration;
                this.DistanceToMaxSpeed = (MissileDefinition.DesiredSpeed + MissileDefinition.MissileInitialSpeed) / 2 * TimeToMaxSpeed;
            }
            else
            {
                this.TimeToMaxSpeed     = 0;
                this.DistanceToMaxSpeed = 0;
            }

            Description = AmmoDescription.CreateFrom(AmmoDefinition);

            if (Description == null)
            {
                return;
            }

            if (Description.ClusterCooldown > 0f)
            {
                Log.DebugLog("Is a cluster missile");
                IsCluster = true;
            }
            if (!string.IsNullOrWhiteSpace(Description.Radar))
            {
                try
                {
                    RadarDefinition = new RadarEquipment.Definition();
                    XML_Amendments <RadarEquipment.Definition> ammender = new XML_Amendments <RadarEquipment.Definition>(RadarDefinition);
                    ammender.primarySeparator = new char[] { ',' };
                    ammender.AmendAll(Description.Radar, true);
                    RadarDefinition = ammender.Deserialize();
                    Log.DebugLog("Loaded description for radar", Logger.severity.DEBUG);
                }
                catch (Exception ex)
                {
                    Logger.DebugNotify("Failed to load radar description for an ammo", 10000, Logger.severity.ERROR);
                    Log.AlwaysLog("Failed to load radar description for an ammo", Logger.severity.ERROR);
                    Log.AlwaysLog("Exception: " + ex, Logger.severity.ERROR);
                    RadarDefinition = null;
                }
            }
        }
示例#3
0
        public InventoryItemDialog()
        {
            //Populate the static list with the ids from the items
            if (_idList == null)
            {
                _idList = new List <MyDefinitionId>();

                DictionaryValuesReader <MyDefinitionId, MyDefinitionBase> allDefinitions = MyDefinitionManager.Static.GetAllDefinitions();
                foreach (MyDefinitionBase definition in allDefinitions)
                {
                    MyPhysicalItemDefinition def = definition as MyPhysicalItemDefinition;
                    if (def != null)
                    {
                        _idList.Add(def.Id);
                    }
                }
                foreach (MyDefinitionBase definition in allDefinitions)
                {
                    MyComponentDefinition def = definition as MyComponentDefinition;
                    if (def != null)
                    {
                        _idList.Add(def.Id);
                    }
                }
                foreach (MyDefinitionBase definition in allDefinitions)
                {
                    MyAmmoMagazineDefinition def = definition as MyAmmoMagazineDefinition;
                    if (def != null)
                    {
                        _idList.Add(def.Id);
                    }
                }
            }

            InitializeComponent();

            CMB_ItemType.BeginUpdate();
            foreach (var entry in _idList)
            {
                CMB_ItemType.Items.Add(entry);
            }
            CMB_ItemType.EndUpdate();

            TXT_ItemAmount.Text = "0.0";
        }
示例#4
0
        private static void ProcessSmallMissileLauncherReload(MyObjectBuilder_CubeBlock block, Options options, MyCubeSize size)
        {         // Has it's own inventory, supporting function to add inventory doesn't work on this block
            if (!options.Restock)
            {
                return;
            }
            try
            {
                List <MyDefinitionId> ammoSubTypeIds = GetItemDefinitionList(block);
                if (ammoSubTypeIds == null || ammoSubTypeIds.Count == 0)
                {
                    return;
                }
                ((MyObjectBuilder_SmallMissileLauncherReload)block).Inventory.Clear();

                MyDefinitionId           ammoSubType = ammoSubTypeIds[Core.Random.Next(0, ammoSubTypeIds.Count)];
                MyAmmoMagazineDefinition myAmmo      = MyDefinitionManager.Static.GetAmmoMagazineDefinition(ammoSubType);
                ((MyObjectBuilder_SmallMissileLauncherReload)block).Inventory.Items.Add(new MyObjectBuilder_InventoryItem
                {
                    Amount          = GetAmount(GetMaxVolume(block, size), myAmmo.Volume),
                    PhysicalContent = new MyObjectBuilder_AmmoMagazine()
                    {
                        SubtypeName = ammoSubType.SubtypeName
                    }
                });

                //foreach (MyDefinitionId ammoSubType in ammoSubTypeIds)
                //{
                //	MyAmmoMagazineDefinition myAmmo = MyDefinitionManager.Static.GetAmmoMagazineDefinition(ammoSubType);
                //	int amountToAdd = (int)(GetMaxVolume(block, size) / myAmmo.Volume) / ammoSubTypeIds.Count;
                //	Core.GeneralLog.WriteToLog("ProcessSmallMissileLauncherReload", $"Adding to inventory:\t{ammoSubType.SubtypeName}: {amountToAdd}");
                //	((MyObjectBuilder_SmallMissileLauncherReload)block).Inventory.Items.Add(new MyObjectBuilder_InventoryItem
                //	{
                //		Amount = amountToAdd,
                //		PhysicalContent = new MyObjectBuilder_AmmoMagazine() { SubtypeName = ammoSubType.SubtypeName }
                //	});
                //}
            }
            catch (Exception e)
            {
                Core.GeneralLog.WriteToLog("ProcessWeaponRestocking", $"Exception! {e}");
            }
        }
示例#5
0
文件: Ammo.cs 项目: zrisher/ARMS
        public static Ammo GetAmmo(MyDefinitionId magazineId)
        {
            Ammo value;

            if (KnownDefinitions_Ammo.TryGetValue(magazineId, out value))
            {
                return(value);
            }

            MyAmmoMagazineDefinition magDef = MyDefinitionManager.Static.GetAmmoMagazineDefinition(magazineId);

            if (magDef == null)
            {
                throw new InvalidOperationException("not a magazine: " + magazineId);
            }

            value = new Ammo(magDef);
            KnownDefinitions_Ammo.Add(magazineId, value);
            return(value);
        }
示例#6
0
        public virtual void RefreshAmmoDetails()
        {
            var timeSpan = MyAPIGateway.Session.GameDateTime - _lastAmmoRefresh;

            if (timeSpan.TotalMilliseconds < 500)
            {
                return;
            }

            _lastAmmoRefresh = MyAPIGateway.Session.GameDateTime;

            if (_gunBase?.GunBase == null)
            {
                _maxAmmoTrajectory = 0;
                _maxAmmoSpeed      = 0;
                return;
            }

            _ammoMagazineDefinition = _gunBase.GunBase.CurrentAmmoMagazineDefinition;
            _ammoDefinition         = _gunBase.GunBase.CurrentAmmoDefinition;

            if (_ammoDefinition != null)
            {
                _maxAmmoTrajectory = _ammoDefinition.MaxTrajectory;
                _maxAmmoSpeed      = _ammoDefinition.DesiredSpeed;
            }

            if (_ammoMagazineDefinition != null)
            {
                _currentAmmoCount = _gunBase.GunBase.CurrentAmmo + (_ammoMagazineDefinition.Capacity * CountItemsInInventory(_ammoMagazineDefinition.Id));
            }

            if (_currentAmmoCount == 0 && _weaponSystem.UseAmmoReplenish)
            {
                if (_ammoMagazinesReloads < _weaponSystem.MaxAmmoReplenishments || _weaponSystem.MaxAmmoReplenishments == -1)
                {
                    _ammoMagazinesReloads++;
                    _ammoReloadPending = true;
                }
            }
        }
示例#7
0
        private static void ProcessWeaponRestocking(MyObjectBuilder_CubeBlock block, Options options, MyCubeSize size)
        {
            try
            {
                List <MyDefinitionId> ammoSubTypeIds = GetItemDefinitionList(block);
                if (ammoSubTypeIds == null || ammoSubTypeIds.Count == 0)
                {
                    return;
                }
                ClearInventory(block.ComponentContainer);
                MyDefinitionId           ammoSubType = ammoSubTypeIds[Core.Random.Next(0, ammoSubTypeIds.Count)];
                MyAmmoMagazineDefinition myAmmo      = MyDefinitionManager.Static.GetAmmoMagazineDefinition(ammoSubType);
                int amountToAdd = GetAmount(GetMaxVolume(block, size), myAmmo.Volume);
                if (options.MaxAmmo != 0 && amountToAdd > options.MaxAmmo)
                {
                    amountToAdd = options.MaxAmmo;
                }
                AddToInventory(block.ComponentContainer, new MyObjectBuilder_AmmoMagazine()
                {
                    SubtypeName = ammoSubType.SubtypeName
                }, amountToAdd, false);


                //foreach (MyDefinitionId ammoSubType in ammoSubTypeIds)
                //{
                //	MyAmmoMagazineDefinition myAmmo = MyDefinitionManager.Static.GetAmmoMagazineDefinition(ammoSubType);
                //	//int amountToAdd = (int)Math.Ceiling((GetMaxVolume(block, size) / myAmmo.Volume) / ammoSubTypeIds.Count);
                //	int amountToAdd = GetAmount(GetMaxVolume(block, size), myAmmo.Volume, ammoSubTypeIds.Count);
                //	Core.GeneralLog.WriteToLog("ProcessWeaponRestocking", $"Adding to inventory:\t{ammoSubType.SubtypeName}: {amountToAdd}");
                //	AddToInventory(block.ComponentContainer, new MyObjectBuilder_AmmoMagazine() {SubtypeName = ammoSubType.SubtypeName}, amountToAdd, false);
                //}
            }
            catch (Exception e)
            {
                Core.GeneralLog.WriteToLog("ProcessWeaponRestocking", $"Exception! {e}");
            }
        }
        private void Init(IMyEntity Entity)
        {
            try
            {
                m_entity            = Entity;
                m_entityId          = Entity.EntityId;
                Entity.NeedsUpdate |= MyEntityUpdateEnum.EACH_100TH_FRAME;
                m_functionalBlock   = Entity as IMyFunctionalBlock;
                m_cubeBlock         = Entity as IMyCubeBlock;
                m_myCubeBlock       = Entity as MyCubeBlock;
                CubeGrid            = m_myCubeBlock.CubeGrid;
                _cubeGridEntityId   = CubeGrid.EntityId;
                m_terminalBlock     = Entity as IMyTerminalBlock;
                m_gunObject         = m_cubeBlock as IMyGunObject <MyGunBase>;

                MyWeaponBlockDefinition weaponBlockDef = null; Debug.Write($"def == null ? {weaponBlockDef == null}", 1, debug);
                MyDefinitionManager.Static.TryGetDefinition <MyWeaponBlockDefinition>(new SerializableDefinitionId(m_functionalBlock.BlockDefinition.TypeId, m_functionalBlock.BlockDefinition.SubtypeId), out weaponBlockDef);
                m_weaponDef = MyDefinitionManager.Static.GetWeaponDefinition(weaponBlockDef.WeaponDefinitionId); Debug.Write($"weaponDef == null ? {m_weaponDef == null}", 1, debug);
                Debug.Write($"Attempting to get magDefId from {m_weaponDef.AmmoMagazinesId[0]} ...", 1, debug);
                m_magDefId = m_weaponDef.AmmoMagazinesId[0]; Debug.Write($"Complete. magDefId == null ? {m_magDefId == null}", 1, debug);
                m_magDef   = MyDefinitionManager.Static.GetAmmoMagazineDefinition(m_magDefId); Debug.Write($"m_magDef == null ? {m_magDef == null}", 1, debug);
                Debug.Write($"m_weaponDef.WeaponAmmoDatas == null ? {m_weaponDef.WeaponAmmoDatas == null}", 1, debug);
                Debug.Write($"m_weaponDef.WeaponAmmoDatas.Count == {m_weaponDef.WeaponAmmoDatas.Count()}", 1, debug);

                MyWeaponDefinition.MyWeaponAmmoData data = null;
                var i = -1;
                while (i < m_weaponDef.WeaponAmmoDatas.Count() - 1)
                {
                    i++;
                    Debug.Write($"m_weaponDef.WeaponAmmoDatas[{i}] == null ? {m_weaponDef.WeaponAmmoDatas[i] == null }", 1, debug);
                    if (m_weaponDef.WeaponAmmoDatas[i] == null)
                    {
                        continue;
                    }

                    data = m_weaponDef.WeaponAmmoDatas[i];
                    break;
                }

                m_timeoutMult        = 60f / data.RateOfFire;
                m_chargeDefinitionId = m_magDefId;
                Debug.Write($"Attempting to get ammoDef from {m_magDef.AmmoDefinitionId} ...", 1, debug);
                var ammoDef = MyDefinitionManager.Static.GetAmmoDefinition(m_magDef.AmmoDefinitionId);
                Debug.Write($"Complete. ammoDef == null ? {ammoDef == null}", 1, debug);
                var damagePerShot = ammoDef.GetDamageForMechanicalObjects();
                Debug.Write($"Damage per shot = {damagePerShot}", 1, debug);

                m_heatPerShot = (damagePerShot + ammoDef.MaxTrajectory + ammoDef.DesiredSpeed) * 0.01f;
                m_heatMax     = m_cubeBlock.SlimBlock.MaxIntegrity;
                Debug.Write($"m_heatMax/m_heatPerShot = {m_heatMax}/{m_heatPerShot} = {m_heatMax / m_heatPerShot} shots", 1, debug);
                m_operationalPower = m_heatPerShot * 0.01f;
                m_maxAmmo          = (int)(m_heatMax / m_heatPerShot);

                m_inventory    = ((Sandbox.ModAPI.Ingame.IMyTerminalBlock)(Entity)).GetInventory(0) as IMyInventory;
                m_resourceSink = Entity.Components.Get <MyResourceSinkComponent>();

                if (!LogicCore.Instance.BeamLogics.ContainsKey(Entity.EntityId))
                {
                    LogicCore.Instance.BeamLogics.Add(Entity.EntityId, this);
                    Debug.Write("Added new beamlogic to BeamLogics dictionary.", 1, debug);
                }

                MyAPIGateway.Utilities.InvokeOnGameThread(() => RemoveSmokeEffects());
                m_terminalBlock.AppendingCustomInfo += AppendCustomInfo;
                m_initialized = true;
                Debug.Write("Weapon initialization complete.", 1, debug);
            }
            catch (Exception e)
            {
                Debug.HandleException(e);
                MyAPIGateway.Parallel.Sleep(1000);
                Init(Entity);
            }
        }
示例#9
0
        public AmmoConstants(WeaponAmmoTypes ammo, WeaponDefinition wDef, Session session, WeaponSystem system)
        {
            MyInventory.GetItemVolumeAndMass(ammo.AmmoDefinitionId, out MagMass, out MagVolume);

            MagazineDef    = MyDefinitionManager.Static.GetAmmoMagazineDefinition(ammo.AmmoDefinitionId);
            TracerMaterial = MyStringId.GetOrCompute(ammo.AmmoDef.AmmoGraphics.Lines.TracerMaterial);
            TrailMaterial  = MyStringId.GetOrCompute(ammo.AmmoDef.AmmoGraphics.Lines.Trail.Material);

            if (ammo.AmmoDefinitionId.SubtypeId.String != "Energy" || ammo.AmmoDefinitionId.SubtypeId.String == string.Empty)
            {
                AmmoItem = new MyPhysicalInventoryItem()
                {
                    Amount = 1, Content = MyObjectBuilderSerializer.CreateNewObject <MyObjectBuilder_AmmoMagazine>(ammo.AmmoDefinitionId.SubtypeName)
                }
            }
            ;

            for (int i = 0; i < wDef.Ammos.Length; i++)
            {
                var ammoType = wDef.Ammos[i];
                if (ammoType.AmmoRound.Equals(ammo.AmmoDef.Shrapnel.AmmoRound))
                {
                    ShrapnelId = i;
                }
            }

            IsMine             = ammo.AmmoDef.Trajectory.Guidance == DetectFixed || ammo.AmmoDef.Trajectory.Guidance == DetectSmart || ammo.AmmoDef.Trajectory.Guidance == DetectTravelTo;
            IsField            = ammo.AmmoDef.Trajectory.FieldTime > 0;
            IsHybrid           = ammo.AmmoDef.HybridRound;
            IsTurretSelectable = !ammo.IsShrapnel || ammo.AmmoDef.HardPointUsable;


            AmmoParticle        = ammo.AmmoDef.AmmoGraphics.Particles.Ammo.Name != string.Empty;
            AmmoParticleShrinks = ammo.AmmoDef.AmmoGraphics.Particles.Ammo.ShrinkByDistance;
            HitParticleShrinks  = ammo.AmmoDef.AmmoGraphics.Particles.Hit.ShrinkByDistance;

            HitParticle = ammo.AmmoDef.AmmoGraphics.Particles.Hit.Name != string.Empty;

            DrawLine          = ammo.AmmoDef.AmmoGraphics.Lines.Tracer.Enable;
            LineColorVariance = ammo.AmmoDef.AmmoGraphics.Lines.ColorVariance.Start > 0 && ammo.AmmoDef.AmmoGraphics.Lines.ColorVariance.End > 0;
            LineWidthVariance = ammo.AmmoDef.AmmoGraphics.Lines.WidthVariance.Start > 0 || ammo.AmmoDef.AmmoGraphics.Lines.WidthVariance.End > 0;
            SpeedVariance     = ammo.AmmoDef.Trajectory.SpeedVariance.Start > 0 || ammo.AmmoDef.Trajectory.SpeedVariance.End > 0;
            RangeVariance     = ammo.AmmoDef.Trajectory.RangeVariance.Start > 0 || ammo.AmmoDef.Trajectory.RangeVariance.End > 0;
            TrailWidth        = ammo.AmmoDef.AmmoGraphics.Lines.Trail.CustomWidth > 0 ? ammo.AmmoDef.AmmoGraphics.Lines.Trail.CustomWidth : ammo.AmmoDef.AmmoGraphics.Lines.Tracer.Width;
            TargetOffSet      = ammo.AmmoDef.Trajectory.Smarts.Inaccuracy > 0;

            TargetLossTime   = ammo.AmmoDef.Trajectory.TargetLossTime > 0 ? ammo.AmmoDef.Trajectory.TargetLossTime : int.MaxValue;
            CanZombie        = TargetLossTime > 0 && TargetLossTime != int.MaxValue && !IsMine;
            MaxLifeTime      = ammo.AmmoDef.Trajectory.MaxLifeTime > 0 ? ammo.AmmoDef.Trajectory.MaxLifeTime : int.MaxValue;
            MaxChaseTime     = ammo.AmmoDef.Trajectory.Smarts.MaxChaseTime > 0 ? ammo.AmmoDef.Trajectory.Smarts.MaxChaseTime : int.MaxValue;
            MaxObjectsHit    = ammo.AmmoDef.ObjectsHit.MaxObjectsHit > 0 ? ammo.AmmoDef.ObjectsHit.MaxObjectsHit : int.MaxValue;
            BaseDamage       = ammo.AmmoDef.BaseDamage;
            MaxTargets       = ammo.AmmoDef.Trajectory.Smarts.MaxTargets;
            TargetLossDegree = ammo.AmmoDef.Trajectory.TargetLossDegree > 0 ? (float)Math.Cos(MathHelper.ToRadians(ammo.AmmoDef.Trajectory.TargetLossDegree)) : 0;

            ShieldModifier  = ammo.AmmoDef.DamageScales.Shields.Modifier > 0 ? ammo.AmmoDef.DamageScales.Shields.Modifier : 1;
            ShieldBypassMod = ammo.AmmoDef.DamageScales.Shields.BypassModifier > 0 && ammo.AmmoDef.DamageScales.Shields.BypassModifier < 1 ? ammo.AmmoDef.DamageScales.Shields.BypassModifier : 1;
            AmmoSkipAccel   = ammo.AmmoDef.Trajectory.AccelPerSec <= 0;
            FeelsGravity    = ammo.AmmoDef.Trajectory.GravityMultiplier > 0;

            MaxTrajectory    = ammo.AmmoDef.Trajectory.MaxTrajectory;
            MaxTrajectorySqr = MaxTrajectory * MaxTrajectory;
            HasBackKickForce = ammo.AmmoDef.BackKickForce > 0;

            MaxLateralThrust = MathHelperD.Clamp(ammo.AmmoDef.Trajectory.Smarts.MaxLateralThrust, 0.000001, 1);

            Fields(ammo.AmmoDef, out PulseInterval, out PulseChance, out Pulse);
            AreaEffects(ammo.AmmoDef, out AreaEffect, out AreaEffectDamage, out AreaEffectSize, out DetonationDamage, out AmmoAreaEffect, out AreaRadiusSmall, out AreaRadiusLarge, out DetonateRadiusSmall, out DetonateRadiusLarge, out Ewar, out EwarEffect, out EwarTriggerRange);

            DamageScales(ammo.AmmoDef, out DamageScaling, out FallOffScaling, out ArmorScaling, out CustomDamageScales, out CustomBlockDefinitionBasesToScales, out SelfDamage, out VoxelDamage);
            Beams(ammo.AmmoDef, out IsBeamWeapon, out VirtualBeams, out RotateRealBeam, out ConvergeBeams, out OneHitParticle, out OffsetEffect);
            CollisionShape(ammo.AmmoDef, out CollisionIsLine, out CollisionSize, out TracerLength);
            SmartsDelayDistSqr = (CollisionSize * ammo.AmmoDef.Trajectory.Smarts.TrackingDelay) * (CollisionSize * ammo.AmmoDef.Trajectory.Smarts.TrackingDelay);
            PrimeEntityPool    = Models(ammo.AmmoDef, wDef, out PrimeModel, out TriggerModel, out ModelPath);
            Energy(ammo, system, wDef, out EnergyAmmo, out MustCharge, out Reloadable, out EnergyMagSize, out BurstMode, out HasShotReloadDelay);
            Sound(ammo.AmmoDef, session, out HitSound, out AmmoTravelSound, out HitSoundDistSqr, out AmmoTravelSoundDistSqr, out AmmoSoundMaxDistSqr);
            MagazineSize = EnergyAmmo ? EnergyMagSize : MagazineDef.Capacity;
            GetPeakDps(ammo, system, wDef, out PeakDps, out ShotsPerSec, out BaseDps, out AreaDps, out DetDps);

            DesiredProjectileSpeed = (float)(!IsBeamWeapon ? ammo.AmmoDef.Trajectory.DesiredSpeed : MaxTrajectory * MyEngineConstants.UPDATE_STEPS_PER_SECOND);
            Trail = ammo.AmmoDef.AmmoGraphics.Lines.Trail.Enable;
        }
示例#10
0
        public override void RefreshAmmoDetails()
        {
            var timeSpan = MyAPIGateway.Session.GameDateTime - _lastAmmoRefresh;

            if (timeSpan.TotalMilliseconds < 500)
            {
                return;
            }

            _lastAmmoRefresh = MyAPIGateway.Session.GameDateTime;

            var ammo = RAI_SessionCore.Instance.WeaponCore.GetActiveAmmo(_weaponBlock, _weaponIndex);

            if (string.IsNullOrWhiteSpace(ammo) && _weaponCoreAmmoDefinition.AmmoMagazine != "Energy")
            {
                Logger.MsgDebug("Ammo Is Null", DebugTypeEnum.WeaponCore);
                return;
            }

            if (ammo != _weaponCoreAmmoMagazineId || string.IsNullOrWhiteSpace(_weaponCoreAmmoMagazineId))
            {
                foreach (var ammoDef in _weaponCoreDefinition.Ammos)
                {
                    if (ammoDef.AmmoMagazine == "Energy")
                    {
                        ammo = "Energy";
                    }

                    if (ammoDef.AmmoMagazine == ammo)
                    {
                        _weaponCoreAmmoMagazineId = ammo;
                        _weaponCoreAmmoDefinition = ammoDef;
                        break;
                    }
                }
            }

            _weaponCurrentRange = _weaponCoreAmmoDefinition.Trajectory.MaxTrajectory;
            _weaponRateOfFire   = _weaponCoreDefinition.HardPoint.Loading.RateOfFire;

            if (ammo == "Energy")
            {
                _currentAmmoCount = 1;
            }
            else
            {
                GetTypesOfAmmoInInventory();
                var ammoId = new MyDefinitionId(typeof(MyObjectBuilder_AmmoMagazine), ammo);

                if (_ammoSubtypesInInventory.Contains(ammo))
                {
                    _currentAmmoCount = CountItemsInInventory(ammoId);
                }
                else
                {
                    _currentAmmoCount = 0;

                    if (_weaponSystem.UseAmmoReplenish && _ammoMagazinesReloads < _weaponSystem.MaxAmmoReplenishments)
                    {
                        MyAmmoMagazineDefinition ammoMagDef = null;

                        if (Utilities.NormalAmmoMagReferences.TryGetValue(ammoId, out ammoMagDef))
                        {
                            _ammoMagazineDefinition = ammoMagDef;
                            _ammoReloadPending      = true;
                        }
                    }
                }
            }
        }