private static void SimulateAsteroidMonitors( Random rand, GameSession game, int systemId, FleetInfo randomsFleet, int aiPlayerID, List <FleetInfo> aiPlayerFleets) { int numToKill = rand.NextInclusive(1, 3); Dictionary <FleetInfo, List <ShipInfo> > shipsInFleets = CombatSimulatorRandoms.GetShipsInFleets(game, aiPlayerFleets); if (shipsInFleets.Sum <KeyValuePair <FleetInfo, List <ShipInfo> > >((Func <KeyValuePair <FleetInfo, List <ShipInfo> >, int>)(x => x.Value.Count)) == 0) { return; } CombatSimulatorRandoms.UpdateShipsKilled(game, rand, shipsInFleets, randomsFleet.PlayerID, numToKill); int encounterIdAtSystem = game.GameDatabase.GetEncounterIDAtSystem(EasterEgg.EE_ASTEROID_MONITOR, systemId); ShipInfo shipInfo = game.GameDatabase.GetShipInfoByFleetID(randomsFleet.ID, false).ToList <ShipInfo>().FirstOrDefault <ShipInfo>((Func <ShipInfo, bool>)(x => x.DesignID == game.ScriptModules.AsteroidMonitor.MonitorCommandDesignId)); if (shipInfo != null) { AsteroidMonitorInfo asteroidMonitorInfo = game.GameDatabase.GetAsteroidMonitorInfo(encounterIdAtSystem); if (asteroidMonitorInfo != null) { asteroidMonitorInfo.IsAggressive = false; game.GameDatabase.UpdateAsteroidMonitorInfo(asteroidMonitorInfo); } shipInfo.DesignInfo = game.GameDatabase.GetDesignInfo(shipInfo.DesignID); List <DesignModuleInfo> source = new List <DesignModuleInfo>(); foreach (DesignSectionInfo designSection in shipInfo.DesignInfo.DesignSections) { source.AddRange((IEnumerable <DesignModuleInfo>)designSection.Modules.ToList <DesignModuleInfo>()); } if (source.Any <DesignModuleInfo>()) { foreach (SectionInstanceInfo sectionInstanceInfo in game.GameDatabase.GetShipSectionInstances(shipInfo.ID).ToList <SectionInstanceInfo>()) { foreach (ModuleInstanceInfo module in game.GameDatabase.GetModuleInstances(sectionInstanceInfo.ID).ToList <ModuleInstanceInfo>()) { module.Structure = 0; game.GameDatabase.UpdateModuleInstance(module); } } game.InsertNewMonitorSpecialProject(aiPlayerID, encounterIdAtSystem, randomsFleet.ID); } else { game.GameDatabase.RemoveFleet(randomsFleet.ID); game.GameDatabase.RemoveEncounter(encounterIdAtSystem); } } else { game.GameDatabase.RemoveFleet(randomsFleet.ID); game.GameDatabase.RemoveEncounter(encounterIdAtSystem); } }
public override bool VictoryConditionIsMet() { if (!this.m_Failed && (this.m_Monitor.IsDestroyed || this.m_HasDish && (this.m_Dish == null || !this.m_Dish.IsAlive))) { foreach (IGameObject turret in this.m_Monitor.Turrets) { turret.PostSetProp("Disable", true); } foreach (NormalMonitorCombatAIControl normalMonitor in this.m_NormalMonitors) { normalMonitor.ForceDisable(); } if (this.m_Game.Game.ScriptModules.AsteroidMonitor != null && this.m_Monitor.DesignID == this.m_Game.Game.ScriptModules.AsteroidMonitor.MonitorCommandDesignId) { AsteroidMonitorInfo asteroidMonitorInfo = this.m_Game.GameDatabase.GetAsteroidMonitorInfo(this.m_EncounterID); if (asteroidMonitorInfo != null) { asteroidMonitorInfo.IsAggressive = false; this.m_Game.GameDatabase.UpdateAsteroidMonitorInfo(asteroidMonitorInfo); } } ShipInfo shipInfo = this.m_Game.GameDatabase.GetShipInfo(this.m_Monitor.DatabaseID, false); if (shipInfo != null) { if (this.m_HasDish && this.m_Dish != null && (!this.m_Dish.IsAlive && this.m_Dish.DestroyedByPlayer != 0)) { Player gameObject = this.m_Game.GetGameObject <Player>(this.m_Dish.DestroyedByPlayer); if (gameObject != null && shipInfo != null) { this.m_Game.Game.InsertNewMonitorSpecialProject(gameObject.ID, this.m_EncounterID, shipInfo.FleetID); } } else if (this.m_Monitor.IsDestroyed) { this.m_Game.GameDatabase.RemoveFleet(shipInfo.FleetID); this.m_Game.GameDatabase.RemoveEncounter(this.m_EncounterID); } } this.m_Failed = true; } return(this.m_Failed); }