Exemple #1
0
        /// <summary>
        /// Determine whether or not we can activate a mining laser without going critically low on capacitor.
        /// </summary>
        /// <param name="miningLaser"></param>
        private bool CanSafelyActivateMiningLaser(EVE.ISXEVE.Interfaces.IModule miningLaser)
        {
            var methodName = "CanSafelyActivateMiningLaser";

            LogTrace(methodName);

            if (miningLaser.ActivationCost == null)
            {
                LogMessage(methodName, LogSeverityTypes.Debug, "Error: Module \"{0}\" ({1}) has an invalid activation cost.",
                           miningLaser.ToItem.Name, miningLaser.ID);
                return(true);
            }

            var minimumCapacitor = CalculateMinimumCapacitor();

            LogMessage(methodName, LogSeverityTypes.Debug, "Capacitor: {0}, minimumCapacitor: {1}, activationCost: {2}",
                       _capacitor, minimumCapacitor, miningLaser.ActivationCost.Value);

            var canSafelyActivateMiningLaser = _capacitor > minimumCapacitor + miningLaser.ActivationCost.Value;

            if (canSafelyActivateMiningLaser)
            {
                _capacitor -= miningLaser.ActivationCost.Value;
            }

            return(canSafelyActivateMiningLaser);
        }
Exemple #2
0
        /// <summary>
        /// Ensure the given mining laser is armed with a crystal appropriate for the given target, if such crystal is available.
        /// </summary>
        /// <param name="miningLaser"></param>
        /// <param name="target"></param>
        /// <returns>True if the loaded charge was modified, otherwise false.</returns>
        private bool EnsureMiningLaserIsArmedForTarget(EVE.ISXEVE.Interfaces.IModule miningLaser, IEntityWrapper target)
        {
            var methodName = "EnsureMiningLaserIsArmedForTarget";

            LogTrace(methodName, "Module: {0}, Target: {1}", miningLaser.ID, target.ID);

            if (miningLaser.ToItem.GroupID != (int)GroupIDs.FrequencyMiningLaser)
            {
                return(false);
            }
            if (miningLaser.IsActive)
            {
                return(false);
            }

            //Get the best possible mining crystal, including the crystal loaded
            var bestMiningCrystal = _ship.GetBestMiningCrystal(target, miningLaser);

            if (bestMiningCrystal == null)
            {
                return(false);
            }

            if (!ShouldMiningLaserChangeToCrystal(miningLaser, bestMiningCrystal))
            {
                return(false);
            }

            //Get a matching reference from the module's available ammo
            var availableAmmo = miningLaser.GetAvailableAmmo();

            if (availableAmmo == null)
            {
                return(false);
            }

            //If the charge isn't available, there's nothing more to do
            if (availableAmmo.All(item => item.ID != bestMiningCrystal.ID))
            {
                return(false);
            }

            LogMessage(methodName, LogSeverityTypes.Standard, "Changing the loaded crystal of module \"{0}\" ({1}) to \"{2}\".",
                       miningLaser.ToItem.Name, miningLaser.ID, bestMiningCrystal.Name);
            miningLaser.ChangeAmmo(bestMiningCrystal.ID, 1);
            return(true);
        }
Exemple #3
0
 /// <summary>
 /// Determine if a given mining laser should use the given crystal.
 /// </summary>
 /// <param name="miningLaser"></param>
 /// <param name="bestMiningCrystal"></param>
 /// <returns>True if so, false otherwise.</returns>
 private static bool ShouldMiningLaserChangeToCrystal(EVE.ISXEVE.Interfaces.IModule miningLaser, Item bestMiningCrystal)
 {
     return(LavishScriptObject.IsNullOrInvalid(miningLaser.Charge) || bestMiningCrystal.TypeID != miningLaser.Charge.TypeId);
 }