bool CheckReset(object[] Params) { if (AllowResume <= DateTime.Now) { return(true); } FleeTrigger Reported = SafeTrigger(); if (Reported != FleeTrigger.None) { Log.Log("|oNew flee condition"); if (Config.BroadcastTrigger && (Reported == FleeTrigger.NegativeStanding || Reported == FleeTrigger.NeutralStanding || Reported == FleeTrigger.Paranoid)) { LavishScript.ExecuteCommand("relay \"" + Config.ISRelayTarget + "\" -noredirect SecurityBroadcastTrigger " + Me.CharID + " " + Session.SolarSystemID); } ReportTrigger(Reported); Log.Log(" |-gWaiting for safety"); Comms.ChatQueue.Enqueue("<Security> New flee condition, waiting for safety"); Clear(); QueueState(CheckClear, -1, Reported); } return(false); }
bool CheckClear(object[] Params) { if (_isPanic || StopUntilManualClearance) { return(false); } FleeTrigger Trigger = (FleeTrigger)Params[0]; int FleeWait = (Trigger == FleeTrigger.ArmorLow || Trigger == FleeTrigger.CapacitorLow || Trigger == FleeTrigger.ShieldLow || Trigger == FleeTrigger.Forced || Trigger == FleeTrigger.Panic) ? 0 : Config.FleeWait; AutoModule.AutoModule.Instance.Decloak = false; if (Trigger == FleeTrigger.CapacitorLow && Trigger == FleeTrigger.ShieldLow) { AutoModule.AutoModule.Instance.Decloak = true; } if (Trigger == FleeTrigger.ArmorLow && MyShip.Modules.Any(a => a.GroupID == Group.ArmorRepairUnit && a.IsOnline)) { AutoModule.AutoModule.Instance.Decloak = true; } if (SafeTrigger() != FleeTrigger.None) { return(false); } if (Config.IncludeBroadcastTriggers && BroadcastSafe.ContainsValue(false)) { return(false); } Log.Log("|oArea is now safe"); Log.Log(" |-gWaiting for |w{0}|-g minutes", FleeWait); Comms.ChatQueue.Enqueue(string.Format("<Security> Area is now safe, waiting for {0} minutes", FleeWait)); QueueState(CheckReset); QueueState(Resume); AllowResume = DateTime.Now.AddMinutes(FleeWait); return(true); }
bool Flee(object[] Params) { FleeTrigger Trigger = (FleeTrigger)Params[0]; Cargo.Clear(); Move.Clear(); Decloak = AutoModule.AutoModule.Instance.Decloak; QueueState(WaitFlee); QueueState(SignalSuccessful); QueueState(CheckClear, -1, Trigger); if (Session.InStation) { return(true); } if (Config.AlternateStationFlee && (Trigger == FleeTrigger.ArmorLow || Trigger == FleeTrigger.ShieldLow || Trigger == FleeTrigger.CapacitorLow) && Entity.All.FirstOrDefault(a => a.GroupID == Group.Station) != null) { Move.Object(Entity.All.FirstOrDefault(a => a.GroupID == Group.Station)); return(true); } foreach (FleeType FleeType in Config.Types) { switch (FleeType) { case FleeType.NearestStation: Entity Station = Entity.All.FirstOrDefault(a => a.GroupID == Group.Station); if (Station != null) { Move.Object(Station); return(true); } break; case FleeType.SecureBookmark: Bookmark FleeTo = Bookmark.All.PreferredBookmark(a => a.Title == Config.SecureBookmark); if (FleeTo != null) { Move.Bookmark(FleeTo); return(true); } Log.Log("Warning: Bookmark not found!"); break; case FleeType.SafeBookmarks: if (!SafeSpots.Any()) { SafeSpots = Bookmark.All.Where(a => a.Title.Contains(Config.SafeSubstring) && a.LocationID == Session.SolarSystemID).ToList(); } if (SafeSpots.Any()) { Move.Bookmark(SafeSpots.FirstOrDefault()); SafeSpots.Remove(SafeSpots.FirstOrDefault()); return(true); } break; } } return(true); }
bool CheckSafe(object[] Params) { if ((!Session.InSpace && !Session.InStation) || !Session.Safe) { return(false); } Entity WarpScrambling = Entity.All.FirstOrDefault(a => a.IsWarpScrambling); if (WarpScrambling != null && WarpScrambling.GroupID != Group.EncounterSurveillanceSystem) { LavishScript.ExecuteCommand("relay \"all\" -noredirect SecurityAddScrambler " + WarpScrambling.ID); return(false); } Entity Neuting = Entity.All.FirstOrDefault(a => a.IsEnergyNeuting || a.IsEnergyStealing && !Triggers.Contains(a.Name)); if (Neuting != null) { LavishScript.ExecuteCommand("relay \"all\" -noredirect SecurityAddNeuter " + Neuting.ID); } if (ValidScramble != null) { return(false); } FleeTrigger Reported = SafeTrigger(); switch (Reported) { case FleeTrigger.NegativeStanding: case FleeTrigger.NeutralStanding: case FleeTrigger.Paranoid: case FleeTrigger.WhitelistedCharacterOnGrid: case FleeTrigger.BubbleOnPOSGrid: case FleeTrigger.CriminalLocal: case FleeTrigger.CriminalGrid: case FleeTrigger.SuspectLocal: case FleeTrigger.SuspectGrid: if (Config.BroadcastTrigger) { LavishScript.ExecuteCommand("relay \"" + Config.ISRelayTarget + "\" -noredirect SecurityBroadcastTrigger " + Me.CharID + " " + Session.SolarSystemID); } goto case FleeTrigger.Pod; case FleeTrigger.CapitalSpawn: case FleeTrigger.CynoGrid: case FleeTrigger.CynoSystem: case FleeTrigger.Targeted: case FleeTrigger.CapacitorLow: case FleeTrigger.ShieldLow: case FleeTrigger.ArmorLow: if (Session.InSpace && Drone.AllInSpace.Any()) { if (Config.FleeDroneWait > 0) { WaitFor(Config.FleeDroneWait, () => !Drone.AllInSpace.Any()); } Drone.AllInSpace.ReturnToDroneBay(); } goto case FleeTrigger.Pod; case FleeTrigger.Pod: TriggerAlert(); QueueState(Flee, -1, Reported); ReportTrigger(Reported); return(true); } return(false); }
void ReportTrigger(FleeTrigger reported) { switch (reported) { case FleeTrigger.Pod: Log.Log("|rIn a pod!"); Comms.ChatQueue.Enqueue("<Security> In a pod!"); return; case FleeTrigger.CapitalSpawn: Log.Log("|rCapital Spawn on grid!"); Comms.ChatQueue.Enqueue("<Security> Capital Spawn on grid!"); return; case FleeTrigger.CynoGrid: Log.Log("|rCyno on grid!"); Comms.ChatQueue.Enqueue("<Security> Cyno on grid!"); return; case FleeTrigger.CynoSystem: Log.Log("|rCyno in system!"); Comms.ChatQueue.Enqueue("<Security> Cyno in system!"); return; case FleeTrigger.WhitelistedCharacterOnGrid: Log.Log("|rWhitelisted character on grid!"); Comms.ChatQueue.Enqueue("<Security> Whitelisted character on grid"); StopUntilManualClearance = true; return; case FleeTrigger.BubbleOnPOSGrid: Log.Log("|rBubble On POS Grid"); Comms.ChatQueue.Enqueue("<Security> Bubble On POS Grid"); StopUntilManualClearance = true; return; case FleeTrigger.SuspectLocal: Log.Log("|rSuspect pilot in system"); Comms.ChatQueue.Enqueue("Suspect pilot in system"); return; case FleeTrigger.SuspectGrid: Log.Log("|rSuspect pilot on grid"); Comms.ChatQueue.Enqueue("Suspect pilot on grid"); return; case FleeTrigger.CriminalLocal: Log.Log("|rCriminal pilot in system"); Comms.ChatQueue.Enqueue("Criminal pilot in system"); return; case FleeTrigger.CriminalGrid: Log.Log("|rCriminal pilot on grid"); Comms.ChatQueue.Enqueue("Criminal pilot on grid"); return; case FleeTrigger.NegativeStanding: Log.Log("|r{0} is negative standing", Hostile.Name); Comms.ChatQueue.Enqueue("<Security> " + Hostile.Name + " is negative standing"); return; case FleeTrigger.NeutralStanding: Log.Log("|r{0} is neutral standing", Hostile.Name); Comms.ChatQueue.Enqueue("<Security> " + Hostile.Name + " is neutral standing"); return; case FleeTrigger.Paranoid: Log.Log("|r{0} is neutral to me", Hostile.Name); Comms.ChatQueue.Enqueue("<Security> " + Hostile.Name + " is neutral to me"); return; case FleeTrigger.Targeted: Log.Log("|r{0} is targeting me", Hostile.Name); Comms.ChatQueue.Enqueue("<Security> " + Hostile.Name + " is targeting me"); return; case FleeTrigger.CapacitorLow: Log.Log("|rCapacitor is below threshold (|w{0}%|r)", Config.CapThreshold); Comms.ChatQueue.Enqueue(string.Format("<Security> Capacitor is below threshold ({0}%)", Config.CapThreshold)); return; case FleeTrigger.ShieldLow: Log.Log("|rShield is below threshold (|w{0}%|r)", Config.ShieldThreshold); Comms.ChatQueue.Enqueue(string.Format("<Security> Shield is below threshold ({0}%)", Config.ShieldThreshold)); return; case FleeTrigger.ArmorLow: Log.Log("|rArmor is below threshold (|w{0}%|r)", Config.ArmorThreshold); Comms.ChatQueue.Enqueue(string.Format("<Security> Armor is below threshold ({0}%)", Config.ArmorThreshold)); return; case FleeTrigger.Forced: Log.Log("|rFlee trigger forced."); Comms.ChatQueue.Enqueue("<Security> Flee trigger forced."); return; case FleeTrigger.Panic: Log.Log("|rPanicking!"); Comms.ChatQueue.Enqueue("<Security> Panicking!"); return; } }