/// <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); }
/// <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); }
/// <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); }