示例#1
0
 public static StationType ToType(this StationTypeFlags value)
 {
     for (int index = 0; index < 8; ++index)
     {
         StationType      stationType = (StationType)index;
         StationTypeFlags flags       = stationType.ToFlags();
         if ((flags & value) == flags)
         {
             return(stationType);
         }
     }
     return(StationType.INVALID_TYPE);
 }
示例#2
0
        private static void SimulateIndyColony(
            Random rand,
            GameSession game,
            int systemId,
            ColonyInfo indyColony,
            Dictionary <PlayerInfo, List <FleetInfo> > enemyPlayers)
        {
            StarSystemInfo    starSystemInfo  = game.GameDatabase.GetStarSystemInfo(systemId);
            PlanetInfo        planetInfo      = game.GameDatabase.GetPlanetInfo(indyColony.OrbitalObjectID);
            List <PlayerInfo> standardPlayers = game.GameDatabase.GetStandardPlayerInfos().ToList <PlayerInfo>();

            foreach (FleetInfo fleetInfo in game.GameDatabase.GetFleetInfoBySystemID(systemId, FleetType.FL_NORMAL).ToList <FleetInfo>())
            {
                MissionInfo missionByFleetId = game.GameDatabase.GetMissionByFleetID(fleetInfo.ID);
                if (missionByFleetId != null && missionByFleetId.Type == MissionType.INVASION && missionByFleetId.TargetOrbitalObjectID == planetInfo.ID)
                {
                    game.GameDatabase.InsertGovernmentAction(fleetInfo.PlayerID, App.Localize("@GA_INDEPENDANTCONQUERED"), "IndependantConquered", 0, 0);
                    foreach (PlayerInfo playerInfo in standardPlayers)
                    {
                        if (game.GameDatabase.GetDiplomacyInfo(fleetInfo.PlayerID, playerInfo.ID).isEncountered)
                        {
                            game.GameDatabase.ApplyDiplomacyReaction(playerInfo.ID, fleetInfo.PlayerID, StratModifiers.DiplomacyReactionInvadeIndependentWorld, 1);
                        }
                    }
                }
            }
            game.GameDatabase.InsertTurnEvent(new TurnEvent()
            {
                EventType    = TurnEventType.EV_COLONY_DESTROYED,
                EventMessage = TurnEventMessage.EM_COLONY_DESTROYED,
                PlayerID     = indyColony.PlayerID,
                ColonyID     = indyColony.ID,
                SystemID     = systemId,
                TurnNumber   = game.GameDatabase.GetTurnCount(),
                ShowsDialog  = false
            });
            StationTypeFlags stationTypeFlags = StationTypeFlags.CIVILIAN | StationTypeFlags.DIPLOMATIC | StationTypeFlags.DEFENCE;

            foreach (StationInfo stationInfo in game.GameDatabase.GetStationForSystemAndPlayer(systemId, indyColony.PlayerID).ToList <StationInfo>())
            {
                int?parentId = stationInfo.OrbitalObjectInfo.ParentID;
                int id       = planetInfo.ID;
                if ((parentId.GetValueOrDefault() != id ? 0 : (parentId.HasValue ? 1 : 0)) != 0 && ((StationTypeFlags)(1 << (int)(stationInfo.DesignInfo.StationType & (StationType)31)) & stationTypeFlags) != (StationTypeFlags)0)
                {
                    game.GameDatabase.DestroyStation(game, stationInfo.ID, 0);
                }
            }
            game.GameDatabase.RemoveColonyOnPlanet(planetInfo.ID);
            if (enemyPlayers.Keys.Any <PlayerInfo>((Func <PlayerInfo, bool>)(x => standardPlayers.Any <PlayerInfo>((Func <PlayerInfo, bool>)(y => y.ID == x.ID)))))
            {
                GameSession.ApplyMoralEvent(game.App, MoralEvent.ME_LOSE_WORLD_ENEMY, indyColony.PlayerID, new int?(), starSystemInfo.ProvinceID, new int?());
            }
            foreach (int num in enemyPlayers.Keys.Select <PlayerInfo, int>((Func <PlayerInfo, int>)(x => x.ID)).ToList <int>())
            {
                int i = num;
                game.App.GameDatabase.ApplyDiplomacyReaction(indyColony.PlayerID, i, StratModifiers.DiplomacyReactionKillColony, 1);
                int factionId = game.App.GameDatabase.GetPlayerFactionID(indyColony.PlayerID);
                foreach (PlayerInfo playerInfo in standardPlayers.Where <PlayerInfo>((Func <PlayerInfo, bool>)(x =>
                {
                    if (x.FactionID == factionId)
                    {
                        return(x.ID != i);
                    }
                    return(false);
                })).ToList <PlayerInfo>())
                {
                    if (game.App.GameDatabase.GetDiplomacyInfo(i, playerInfo.ID).isEncountered)
                    {
                        game.App.GameDatabase.ApplyDiplomacyReaction(playerInfo.ID, i, StratModifiers.DiplomacyReactionKillRaceWorld, 1);
                    }
                }
            }
            if (indyColony.CurrentStage == Kerberos.Sots.Data.ColonyStage.GemWorld)
            {
                GameSession.ApplyMoralEvent(game.App, MoralEvent.ME_LOSE_GEM, indyColony.PlayerID, new int?(), starSystemInfo.ProvinceID, new int?());
            }
            else
            {
                if (indyColony.CurrentStage != Kerberos.Sots.Data.ColonyStage.ForgeWorld)
                {
                    return;
                }
                GameSession.ApplyMoralEvent(game.App, MoralEvent.ME_LOSE_FORGE, indyColony.PlayerID, new int?(), starSystemInfo.ProvinceID, new int?());
            }
        }