예제 #1
0
        private async Task ActivateModule(Module module)
        {
            try
            {
                module.Activate(false);

                // If this is a profile module, activate the last active profile after module activation
                if (module is ProfileModule profileModule)
                {
                    await _profileService.ActivateLastProfileAnimated(profileModule);
                }
            }
            catch (Exception e)
            {
                _logger.Error(new ArtemisPluginException(module.PluginInfo, "Failed to activate module and last profile.", e), "Failed to activate module and last profile");
                throw;
            }
        }
예제 #2
0
        private void OverrideActivate(Module module)
        {
            try
            {
                if (module.IsActivated)
                {
                    return;
                }

                module.Activate(true);

                // If this is a profile module, activate the last active profile after module activation
                if (module is ProfileModule profileModule)
                {
                    _profileService.ActivateLastProfile(profileModule);
                }
            }
            catch (Exception e)
            {
                _logger.Error(new ArtemisPluginException(module.PluginInfo, "Failed to activate module and last profile.", e), "Failed to activate module and last profile");
                throw;
            }
        }
        /// <inheritdoc />
        protected override void OnActivate()
        {
            Module.Activate();

            base.OnActivate();
        }
예제 #4
0
        bool Control(object[] Params)
        {
            if (!Session.InSpace || !Session.Safe)
            {
                return(false);
            }

            if (UndockWarp.Instance != null && !UndockWarp.Instance.Idle && UndockWarp.Instance.CurState.ToString() != "WaitStation")
            {
                return(false);
            }

            #region Cloaks

            if (Config.Cloaks)
            {
                Module cloakingDevice = MyShip.Modules.FirstOrDefault(a => a.GroupID == Group.CloakingDevice && a.IsOnline);
                if (cloakingDevice != null)
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapCloaks || Decloak)
                    {
                        if (cloakingDevice.IsActive && !cloakingDevice.IsDeactivating)
                        {
                            cloakingDevice.Deactivate();
                        }
                    }
                }
            }

            if (MyShip.ToEntity.Cloaked)
            {
                return(false);
            }

            if (Config.Cloaks)
            {
                Module cloakingDevice = MyShip.Modules.FirstOrDefault(a => a.GroupID == Group.CloakingDevice && a.IsOnline);
                if (cloakingDevice != null && (cloakingDevice.TypeID == 11578 || MyShip.ToEntity.Mode != EntityMode.Warping))
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapCloaks && !Decloak && !Entity.All.Any(a => a.Distance < 2000 && a.ID != MyShip.ToEntity.ID))
                    {
                        if (!Entity.All.Any(a => a.IsTargetingMe && !a.Released && !a.Exploded))
                        {
                            if (!cloakingDevice.IsActive && !cloakingDevice.IsActivating && !cloakingDevice.IsDeactivating)
                            {
                                cloakingDevice.Activate();
                            }
                            return(false);
                        }
                    }
                }
            }

            if (MyShip.Modules.Any(a => a.GroupID == Group.CloakingDevice && a.IsActive && a.IsOnline))
            {
                return(false);
            }

            #endregion

            #region Shield Boosters

            if (Config.ShieldBoosters)
            {
                List <Module> shieldBoosters = MyShip.Modules.Where(a => a.GroupID == Group.ShieldBooster && a.IsOnline).ToList();
                if (shieldBoosters.Any())
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapShieldBoosters && MyShip.ToEntity.ShieldPct <= Config.MinShieldBoosters)
                    {
                        shieldBoosters.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                    }
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapShieldBoosters || MyShip.ToEntity.ShieldPct > Config.MaxShieldBoosters)
                    {
                        shieldBoosters.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                    }
                }
            }

            #endregion

            #region Armor Repairers

            if (Config.ArmorRepairs)
            {
                List <Module> armorRepairers = MyShip.Modules.Where(a => a.GroupID == Group.ArmorRepairUnit && a.IsOnline).ToList();
                if (armorRepairers.Any())
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapArmorRepairs && MyShip.ToEntity.ArmorPct <= Config.MinArmorRepairs)
                    {
                        armorRepairers.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                    }
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapArmorRepairs || MyShip.ToEntity.ArmorPct > Config.MaxArmorRepairs)
                    {
                        armorRepairers.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                    }
                }
            }

            #endregion

            #region Active Hardeners

            if (Config.ActiveHardeners)
            {
                List <Module> shieldHardeners = MyShip.Modules.Where(a => a.GroupID == Group.ShieldHardener && a.IsOnline).ToList();
                if (shieldHardeners.Any())
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapActiveHardeners && MyShip.ToEntity.ShieldPct <= Config.MinActiveThreshold)
                    {
                        shieldHardeners.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                    }
                    if (((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapActiveHardeners || MyShip.ToEntity.ShieldPct > Config.MinActiveThreshold))
                    {
                        shieldHardeners.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                    }
                }

                List <Module> armorHardeners = MyShip.Modules.Where(a => (a.GroupID == Group.ArmorHardener || a.GroupID == Group.ArmorResistanceShiftHardener) && a.IsOnline).ToList();
                if (armorHardeners.Any())
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapActiveHardeners && MyShip.ToEntity.ArmorPct <= Config.MinActiveThreshold)
                    {
                        armorHardeners.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                    }
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapActiveHardeners || MyShip.ToEntity.ArmorPct > Config.MinActiveThreshold)
                    {
                        armorHardeners.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                    }
                }
            }

            #endregion

            #region Gang Links

            if (Config.GangLinks && MyShip.ToEntity.Mode != EntityMode.Warping)
            {
                List <Module> gangLinks = MyShip.Modules.Where(a => a.GroupID == Group.GangCoordinator && a.TypeID != 11014 && a.IsOnline).ToList();
                if (gangLinks.Any())
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapGangLinks)
                    {
                        gangLinks.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                    }
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapGangLinks)
                    {
                        gangLinks.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                    }
                }
            }

            #endregion

            #region Sensor Boosters

            if (Config.SensorBoosters)
            {
                List <Module> sensorBoosters = MyShip.Modules.Where(a => a.GroupID == Group.SensorBooster && a.IsOnline).ToList();
                if (sensorBoosters.Any())
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapSensorBoosters)
                    {
                        sensorBoosters.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                    }
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapSensorBoosters)
                    {
                        sensorBoosters.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                    }
                }
            }

            #endregion

            #region Tracking Computers

            if (Config.TrackingComputers)
            {
                List <Module> trackingComputers = MyShip.Modules.Where(a => (a.GroupID == Group.TrackingComputer || a.GroupID == Group.MissileGuidanceComputer) && a.IsOnline).ToList();
                if (trackingComputers.Any())
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapTrackingComputers)
                    {
                        trackingComputers.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                    }
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapTrackingComputers)
                    {
                        trackingComputers.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                    }
                }
            }

            #endregion

            #region Drone Tracking Modules

            if (Config.DroneTrackingModules)
            {
                List <Module> droneTrackingModules = MyShip.Modules.Where(a => a.GroupID == Group.DroneTrackingModules && a.IsOnline).ToList();
                if (droneTrackingModules.Any())
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapDroneTrackingModules)
                    {
                        droneTrackingModules.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                    }
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapDroneTrackingModules)
                    {
                        droneTrackingModules.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                    }
                }
            }

            #endregion

            #region ECCMs

            if (Config.ECCMs && MyShip.ToEntity.Mode != EntityMode.Warping)
            {
                List <Module> ECCM = MyShip.Modules.Where(a => a.GroupID == Group.ECCM && a.IsOnline).ToList();
                if (ECCM.Any())
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapECCMs)
                    {
                        ECCM.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                    }
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapECCMs)
                    {
                        ECCM.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                    }
                }
            }

            #endregion

            #region ECMBursts

            if (Config.ECMBursts && MyShip.ToEntity.Mode != EntityMode.Warping)
            {
                List <Module> ECMBursts = MyShip.Modules.Where(a => a.GroupID == Group.BurstJammer && a.IsOnline).ToList();
                if (ECMBursts.Any())
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapECMBursts)
                    {
                        ECMBursts.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                    }
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapECMBursts)
                    {
                        ECMBursts.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                    }
                }
            }

            #endregion

            #region Networked Sensor Array

            if (Config.DroneControlUnits && MyShip.ToEntity.Mode != EntityMode.Warping)
            {
                List <Module> droneControlUnits = MyShip.Modules.Where(a => (int)a.GroupID == 1706 && a.IsOnline).ToList();
                if (droneControlUnits.Any())
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapDroneControlUnits)
                    {
                        droneControlUnits.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                    }
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapDroneControlUnits)
                    {
                        droneControlUnits.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                    }
                }
            }

            #endregion

            #region AutoTargeters

            if (Config.AutoTargeters && MyShip.ToEntity.Mode != EntityMode.Warping)
            {
                List <Module> autoTargeters = MyShip.Modules.Where(a => a.GroupID == Group.AutomatedTargetingSystem && a.IsOnline).ToList();
                if (autoTargeters.Any())
                {
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapAutoTargeters)
                    {
                        autoTargeters.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                    }
                    if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapAutoTargeters)
                    {
                        autoTargeters.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                    }
                }
            }

            #endregion

            #region Propulsion Modules

            List <Module> propulsionModules = MyShip.Modules.Where(a => a.GroupID == Group.PropulsionModule && a.IsOnline).ToList();

            if (MyShip.ToEntity.Mode == EntityMode.Warping && !KeepPropulsionModuleActive)
            {
                propulsionModules.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                return(false);
            }

            if (Config.PropulsionModules && propulsionModules.Any())
            {
                if ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) > Config.CapPropulsionModules &&
                    ((Config.PropulsionModulesApproaching && MyShip.ToEntity.Mode == EntityMode.Approaching) ||
                     (Config.PropulsionModulesOrbiting && MyShip.ToEntity.Mode == EntityMode.Orbiting) ||
                     Config.PropulsionModulesAlwaysOn))
                {
                    propulsionModules.Where(a => a.AllowsActivate()).ForEach(m => m.Activate());
                }
                if (!KeepPropulsionModuleActive && !Config.PropulsionModulesAlwaysOn && ((MyShip.Capacitor / MyShip.MaxCapacitor * 100) < Config.CapPropulsionModules) ||
                    MyShip.ToEntity.Mode == EntityMode.Stopped || MyShip.ToEntity.Mode == EntityMode.Aligned)
                {
                    propulsionModules.Where(a => a.AllowsDeactivate()).ForEach(m => m.Deactivate());
                }
            }

            #endregion

            return(false);
        }