Пример #1
0
        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);
            }
        }
Пример #2
0
 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);
 }